写在前面
在看Faster RCNN代码的时候,突然就陷入沉思,为啥总说1x1卷积能代替全连接层,然后看了一些博客看了好一会儿才终于看懂了=-=,于是综合总结了一下,根据1x1卷积的计算过程,画了几张图分享并记录一下自己的理解。
从单个像素点的通道维上将其视作全连接
1x1卷积层的特点:一般只改变输入图像通道维数,不改变宽高
下图简要展示了1x1卷积层的计算过程,这里重点关注输入图像和输出图像中心像素点的计算。假定输入图像shape为(3x3x3),因为卷积核数量设为5,则输出图像通道数为5,shape为(3x3x5)。W0-W4表示5个卷积核,输入图像三个通道维的值分别乘以W0的权值w0-w2,求和就得到输出图像第一个通道维的值;根据W1-W4权值求得的分别对应输出图像第二-第五维的值
如上图,只看输入图像和输出图像的中间一个像素,仅仅从输入图像和输出图像的通道维去考虑,将输入图像的中心像素点在三个维度上的值看作3个神经元a0、a1、a2,同样地,输出图像对应位置就有5个神经元b0、b1、b2、b3、b4、b5。
下图用全连接层的样式,表现出了1x1卷积过程中,单个像素点的计算等同于全连接层计算:
与全连接层的区别
以上都是仅仅考虑图像中心单个像素点的情况,若上升到整个图像,要注意:
- 像素点与像素点之间权值是共享的:输入图像各个像素点分别进行卷积计算都是使用相同的一组卷积核
- 而像素点与像素点之间是相互独立不连接的:输入图像的第一个像素点,不会与输出图像第二~第九个像素点连接
这也帮助理解了1x1卷积与全连接层的区别:
- 全连接层会影响输入图像的空间结构,而1x1卷积不影响
- 全连接层可以将卷积得到的局部特征连接起来,综合考虑整个图像,而1x1卷积分别对输入输出图像各个像素点通道维所有值之间进行连接,并不是综合考虑整个图像
总的来说,我的理解是从各个同一像素点位置的通道维来看,1x1卷积层是可以视为全连接层的,而不同像素之间是不连接的。
若有错误请大神们指出,求轻喷 =v= !!
参考博文: