import torch
import torch.nn as nn
import numpy as np
import cv2
img = cv2.imread('a.png', 1).astype(np.uint8)
img = cv2.resize(img, (380,380))
img = img / 255.
img = torch.from_numpy(img)
img = torch.tensor(img, dtype=torch.float32)
img = img.unsqueeze(0) #在第一维度上增加一个维度,作为batch size大小
img = img.permute(0, 3, 1, 2) # 将图像channel提到前面即 [batch size, width, height, channel]-> [batch size, channel, width, height]
embed_dim = 768
in_c = 3
patch_size = 32
patch_size = (patch_size, patch_size)
proj = nn.Conv2d(in_c, embed_dim, kernel_size=patch_size, stride=patch_size)
a = proj(img).flatten(2).transpose(1,2)
torch.nn.
Conv2d
(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1,groups=1, bias=True, padding_mode='zeros', device=None, dtype=None)
- in_channels:输入的通道数目 【必选】
- out_channels: 输出的通道数目 【必选】
- kernel_size:卷积核的大小 【必选】
- stride: 卷积每次滑动的步长为多少,默认是 1 【可选】
- padding: 设置在所有边界增加 值为 0 的边距的大小(也就是在feature map 外围增加几圈 0 ),例如当 padding =1 的时候,如果原来大小为 3 × 3 ,那么之后的大小为 5 × 5 。即在外围加了一圈 0 。【可选】
- dilation:控制卷积核之间的间距 【可选】
- groups:控制输入和输出之间的连接。【可选】
举例来说:
比如 groups 为1,那么所有的输入都会连接到所有输出
当 groups 为 2的时候,相当于将输入分为两组,并排放置两层,每层看到一半的输入通道并
产生一半的输出通道,并且两者都是串联在一起的。这也是参数字面的意思:“组” 的含义。
需要注意的是,in_channels 和 out_channels 必须都可以整除 groups,否则会报错(因为要
分成这么多组啊,除不开你让人家程序怎么办?)
- bias: 是否将一个 学习到的 bias 增加输出中,默认是 True 。【可选】
- padding_mode : 字符串类型,接收的字符串只有 “zeros” 和 “circular”。【可选】