卷积
严格来说,卷积层是个错误的叫法,因为它所表达的运算其实是互相关运算(cross-correlation)
多输入多输出卷积
对于多输入的情况,输入是几通道卷积核就有几个通道,因为要对应通道相乘相加。
有几个输出通道就有几个卷积核。
空洞卷积
-
dilation:空洞率,空洞卷积权重值的间隔为dilation-1。
-
当空洞率为1时,退化为普通卷积。
-
灰色部分为卷积核权重,与左侧相同;白色部分为空,值为0
空洞卷积感受野大小:\((k-1)*d+1\)
- k是卷积核大小,d是dilation
Hybrid Dilated Convolution (HDC) 条件
- 叠加卷积的 dilation rate 不能有大于1的公约数。比如 [2, 4, 6] 则不是一个好的三层卷积,依然会出现 gridding effect。
- 我们将 dilation rate 设计成锯齿状结构,例 如 [1, 2, 5, 1, 2, 5] 循环结构。
比如dilation rate [1, 2, 5] with 3 x 3 kernel就可以
size
输入大小:\(W*H\)
卷积核大小:\(k_w*k_h\)
输出大小:\((W-k_w +1)*(H-k_h+1)\)
padding
输入大小:\(W*H\)
卷积核大小:\(k_w*k_h\)
padding大小:\(p_w*p_h\)
通常,如果我们添加\(p_h\)行填充(大约一半在顶部,一半在底部)和\(p_w\)列填充(左侧大约一半,右侧一半),则输出形状将为
\[(W-k_w+p_w+1)*(H-k_h+p_h+1)\]这意味着输出的高度和宽度将分别增加\(p_h\)和\(p_w\)。
在许多情况下,我们需要设置\(p_h=k_h−1\)和\(p_w=k_w−1\),使输入和输出具有相同的高度和宽度。 这样可以在构建网络时更容易地预测每个图层的输出形状。假设\(k_h\)是奇数,我们将在高度的两侧填充\(p_h/2\)行。 如果\(k_h\)是偶数,则一种可能性是在输入顶部填充\(⌈p_h/2⌉\)行,在底部填充\(⌊p_h/2⌋\)行。同理,我们填充宽度的两侧。
卷积神经网络中卷积核的高度和宽度通常为奇数,例如1、3、5或7。 选择奇数的好处是,保持空间维度的同时,我们可以在顶部和底部填充相同数量的行,在左侧和右侧填充相同数量的列。
此外,使用奇数的核大小和填充大小也提供了书写上的便利。对于任何二维张量X
,当满足: 1. 卷积核的大小是奇数; 2. 所有边的填充行数和列数相同; 3. 输出与输入具有相同高度和宽度 则可以得出:输出Y[i, j]
是通过以输入X[i, j]
为中心,与卷积核进行互相关计算得到的。
stride
输入大小:\(W*H\)
卷积核大小:\(k_w*k_h\)
stride大小:\(s_w*s_h\)
输出大小:\(\frac{W-k_w+s_w+1}{s_w}*\frac{H-k_h+s_h+1}{s_h}\)
既有padding又有stride
输入大小:\(W*H\)
卷积核大小:\(k_w*k_h\)
stride大小:\(s_w*s_h\)
padding大小:\(p_w*p_h\)
输出大小:\(\frac{W-k_w+p_w+s_w+1}{s_w}*\frac{H-k_h+p_h+s_h+1}{s_h}\)
带空洞卷积的卷积
输入大小:\(W*H\)
卷积核大小:\(k_w*k_h\)
dilation:\(d\)
先计算空洞卷积的感受野: \(k_w*k_h = ((k_w-1)*d+1)*((k_h-1)*d+1)\)
然后再把感受野带入后续的计算,感受野就是之前的卷积核大小。没有空洞卷积的时候,感受野=卷积核面积,有空洞卷积的时候要按上个式子计算。
池化
目的:降低卷积层对位置的敏感性,同时降低对空间降采样表示的敏感性。
不同于卷积层中的输入与卷积核之间的互相关计算,池化层不包含参数。 相反,池运算是确定性的,我们通常计算池化窗口中所有元素的最大值或平均值。这些操作分别称为最大池化层(maximum pooling)和平均池化层(average pooling)。
在处理多通道输入数据时,池化层在每个输入通道上单独运算,而不是像卷积层一样在通道上对输入进行汇总。 这意味着池化层的输出通道数与输入通道数相同。
池化的输出计算和卷积层是一样的
输入大小:\(W*H\)
池化核大小:\(k_w*k_h\)
stride大小:\(s_w*s_h\)
padding大小:\(p_w*p_h\)
输出大小:\(\frac{W-k_w+p_w+s_w+1}{s_w}*\frac{H-k_h+p_h+s_h+1}{s_h}\)