inception 模型:
concatenate:拼接,沿着通道拼接张量
average pooling:平均值池化,求平均值。
算完之后张量要拼接在一起,必须保证图像的宽度和高度一致。
输入张量是(b,c,w,h),b:batch,c,channel.
走不通路径出来唯一可以不同的是channel。w,h必须保持一致。所以3*3的卷积要保证最后经过block之后w,h没有变化做padding就可以。
average pooling可以通过设置padding和stride来保证输入输出的图片大小一样,即w和h一样。
1* 1的卷积
表示卷积核就是1* 1,计算时就是用其中的权重乘以图像中某个像素的值,然后得到相应的卷积后的结果。
1×1卷积核的个数取决于输入张量的通道。
计算过程:
单通道
多通道(这里是三通道)
每一个都需要配一个1×1的卷积核。且做完卷积之后还要求和。
不管通道是多少,最后都会变成一个1×w×h的feature map。
如果输出需要的通道是c’,比如:如果提供三个摞起来的m个卷积核,就可以得到通道数为m的feature maps。
所以1×1的卷积可以跨越不同通道相同位置元素的值。
也就是说像素x包含了输入通道中所有相同位置的输入通道feature map中的所有信息,把它们融合到了一起。是一种信息融合的算法。
比如,在考试成绩中,求总分就是一种信息融合。
1×1卷积在卷机神经网络中的作用
降低运算量:通过1×1的卷积降低了通道数量,减少运算量。
代码实现inception的方法。
-
average pooling分支,有两个模块,写在init里面。输出通道数为24,只需要知道输入通道数,kernel_size=1,就可以做出1×1的卷积
-
1×1分支:输出通道为16个,直接把x送到branch里面算出branch1×1
-
5×5分支:两个模块,1×1的卷积和5×5的卷积,输出通道分别为16和24.为了保证图像大小不变,5×5的卷积padding为2。
注:padding:扩充图片, 在图片外围补充一些像素点,把这些像素点初始化为0.
padding的用途:
(1)保持边界信息,如果没有加padding的话,输入图片最边缘的像素点信息只会被卷积核操作一次,但是图像中间的像素点会被扫描到很多遍,那么就会在一定程度上降低边界信息的参考程度,但是在加入padding之后,在实际处理过程中就会从新的边界进行操作,就从一定程度上解决了这个问题。
(2)可以利用padding对输入尺寸有差异图片进行补齐,使得输入图片尺寸一致。
(3)卷积神经网络的卷积层加入Padding,可以使得卷积层的输入维度和输出维度一致。
(4)卷积神经网络的池化层加入Padding,一般都是保持边界信息和(1)所述一样。
-
3×3分支:三个模块,一个1×1和两个3×3
-
concatenate:沿通道维度(dim=1)拼接在一起。
inception模块: