卷积神经网络
CNN,即卷积神经网络,是一种深度学习算法,在图像处理,视觉识别等任务中表现出色。
卷积神经网络的组成
CNN模型的组件包括卷积层,池化层,全连接层。
- 卷积层:提取图像中的局部特征
- 池化层:降低体征的空间尺寸,减少计算量并提供一定程度的位移和形变不变性
- 全连接层:将学习到的映射到最终的输出
卷积的属性
- 平移不变性
- 局部相关性
- 权值共享
卷积的感受野
1.感受野介绍
感受野是卷积神经网络输出特征图上的像素点在原始图像上所能看到的(映射的)区域的大小,它决定了该像素对输入图像的感知范围(获取信息的范围)。较小的感受野可以捕捉到更细节的特征,较大的感受野可以捕捉到更全局的特征
2.感受野的计算公式
感受野计算:F(i) = (F(i+1) -1)x Stride + Ksize
或者 F_in = (F_out -1) x Stride + Ksize
其中:
- F(i) :第i层的感受野
- Stride:第i层的步距
- Ksize:第i层卷积或池化的kernel size
八类卷积操作
1.普通卷积
卷积输出的尺寸计算公式:
W_out = (W_in - K_w + 2P_w)/S_w + 1
H_out = (H_in - K_h + 2P_h)/S_h + 1
其中,输入的尺寸为(W_in,H_in), 卷积核的尺寸为(K_w,K_h),步幅(S_w,S_h),填充为(P_w,P_h),输出的尺寸为(W_out,H_out)
2.分组卷积
将输入feature map在channel的维度上进行分组,然后对每一个分组分别进行卷积操作。
分组卷积可减少参数量。如下图所示:分组卷积的参数量是普通卷积的1/g
3.逐深度卷积(DW卷积)
将输入的每个通道(channel)独立地进行卷积,每个通道使用一个单独的卷积核进行处理,即为DW卷积。其优点是参数量和计算量小。
具体做法如下:
- 将输入特征图按照channel进行分组,每一个channel一个组,即g=Cin
- 每个channel使用一个独立的卷积核(大小为1 x k x k)对其对应通道做卷积运算,输入输出通道均为1
4.逐点卷积(PW卷积)
就是普通卷积,只不过kernel_size=1 x 1, 就是conv 1x1,通常用来组合通道之间的特征信息,参数量和计算量小。
5.深度可分离卷积
先做一个DW卷积,后面再做一个PW卷积。深度可分离卷积的优势是极大的减小了卷积的计算量。
普通卷积计算量Dk x Dk x M x N x DF x DF
深度可分离卷积的计算量Dk x Dk x M x DF x DF + M x N x DF x DF
深度可分离卷积和普通卷积的计算量之比是
一般使用的卷积最多是3 x 3的卷积,所以理论上普通卷积的计算量是深度可分离卷积的8~9倍。
6.膨胀卷积
空洞卷积或膨胀卷积,通过在卷积核中引入间隔,从而增大了卷积核的感受野。
膨胀率(Dilation Rate, r): 定义了卷积核处理数据时各值之间的间距。r=1 时就是普通卷积。
- 对于一个 k x k 的卷积核,当膨胀率为 r 时,其等效的卷积核尺寸为:k_dilated = k + (k - 1) x (r - 1)。例如,一个 3x3 的卷积核,当 r=2 时,其等效kernel大小是 3 + (3-1) x (2-1) =5。它相当于一个 5x5 的卷积核进行采样,但只用了9个参数(和标准3x3卷积一样)。
- 膨胀卷积的感受野使用等效后的卷积核尺寸大小计算
7.转置卷积
转置卷积是一种上采样操作。
转置卷积不是卷积的逆运算。
转置卷积的计算:
8.可变形卷积
可变形卷积的灵感来自于空间变换网络(Spatial Transformer Networks) 和光流估计(Optical Flow) 的思想。其核心想法非常简单却非常有效:
让卷积核的采样位置根据输入特征图的内容,自适应地发生偏移。
对于每一个输入,网络会自己学习出一组偏移量(Offsets),这组偏移量会作用到标准卷积的采样网格上,使其“变形”,从而让感受野聚焦到我们真正感兴趣的区域(比如物体的实际边界,而不是一个规则的方框)
可变形卷积的工作步骤如下,以 3x3 卷积为例:
- 常规卷积路径:
输入一个特征图,用一个普通的卷积层进行处理。 - 学习偏移量:
(1)从上一步的同一个输入特征图中,分出一个并行的分支。使用另一个卷积层(例如另一个 3x3 卷积)来学习偏移量。
(2)对于 3x3 卷积核,它有 9 个采样位置。因此,这个偏移量卷积层的输出通道数应该是 2 * 9 = 18(因为每个偏移量需要一个x方向的偏移 Δx 和一个y方向的偏移 Δy)。 - 应用偏移并进行采样:
(1)将学习到的偏移量([Δx1, Δy1, Δx2, Δy2, …, Δx9, Δy9])加到原始的标准 3x3 网格坐标上,得到变形后的、非整数的采样位置。
(2)由于这些新的采样位置是小数(例如 (2.4, 3.7)),无法直接获取像素值,因此使用双线性插值(Bilinear Interpolation) 来计算这些位置的值。 - 加权求和:
像常规卷积一样,将插值后得到的特征值与卷积核的权重进行加权求和,得到输出特征图上的一个点。