卷积操作原来分3种
一开始学习卷积的,书上文章都是空间维度的解说。比如10*10的图片,然后卷积核 3*3,步长1,不填充。
那么卷一遍,就是8*8的图片了。现在发现,怎么还有通道维度的。
卷积的三个核心维度
空间维度(高X宽):作用时提取局部空间特征;
通道维度(深度):融合不同通道的信息,卷积核的数量决定输出通道数。
批次维度:一次处理多个样本,由batch size决定。
所以卷积不仅仅时滑动窗口!
在深度学习中,卷积核其实时一个三维结构:
对于输入张量 H x W x C_in:
- 卷积核大小是K x K x C_in
- 每个卷积核会跨所有输入通道做加权求和,输出一个通道
- 用N个这样的卷积核,得到C_out=N个输出通道
举例:
假设输入的是 24*24*256,你用:
- 卷积核大小:3*3
- 输入通道数:256
- 输出通道数:128(用了128个卷积核)
那么每个卷积核是3*3*256,输出是24*24*128
PyTorch中卷积层:nn.Conv2d
nn.Conv2d(in_channels,out_channelds,kernel_size,stride=1,padding=0)
- in_channels 输入通道,例如RGB图像是3
- out_channelds 输出通道,例如要生成多少个特征图
- kernel_size 卷积核
- stride 步长
- padding 填充
如果搞空间尺寸的,用kernel_size,stride,padding
如果搞通道数的,用in_channels,out_channelds
如果搞批次维度,x=torch.randn(32,3,24,24)。//32张RGB图像,pytorch中,输入张量第一位都是batch_size。这样,GPU可以并行处理。
【什么时候用通道维度变化?】
- 特征的融合核压缩,就是特征太多了,要融合一下,少一点。例如
- 特征扩展,还能把特征变多
- 通道对齐,拼接操作,2个张量通道数一致
- 注意力机制中通道变化,
总结,就是对所有输入通道的加权组合。控制模型的表达能力,计算效率和结构匹配。能够从深度方向上感知信息。
那么我们自己怎么设计多少个卷积核呢,其实我也不知道,但是有现成别人试验过的,例如ResNet-50
【什么时候用空间维度?】
- 降采样
- 保持空间尺寸
- 上采样
总结,控制模型视野和抽象程度。这种其实也是大量试验出来的,用多大卷积核,多少步长。