CNN中1*1卷积核的意义
信道压缩
- 一个32* 6* 6的图片,32通道,6维矩阵图片
- 当用32* 1* 1的的卷积核提取特征时,得到的是一个6*6的图片
- 卷积运算中输出的通道数与卷积核的数量有关,但是计算过程中,图片的通道数要和卷积核的通道数相同
此时,通过1维卷积核将原来图片在通道维度上进行压缩,即将通道信息进行融合
1* 1也可以理解为一个全连接网络,分别作用所有通道上面
总结:
总结一下,1x1的卷积核可以进行降维或者升维,也就是通过控制卷积核(通道数)实现,这个可以帮助减少模型参数,也可以对不同特征进行尺寸的归一化;同时也可以用于不同channel上特征的融合。一个trick就是在降维的时候考虑结合传统的降维方式,如PCA的特征向量实现,这样效果也可以得到保证。
import torch
a = torch.randn(1, 2, 32, 32)
conv3x1 = torch.nn.Conv2d(2, 2, (3, 1), padding=(1, 0)) # 3x1卷积
conv1x3 = torch.nn.Conv2d(2, 2, (1, 3), padding=(0, 1)) # 1x3卷积
out = conv3x1(a)
print(out.shape)
out = conv1x3(out)
print(out.shape)