卷积与池化
信号处理中的卷积
从数学的角度分析,卷积是函数 g ( τ ) g(\tau) g(τ)先翻转后平移得到的结果与函数 f ( τ ) f(\tau) f(τ)的积分。
另外,在Deeplearning-CNN中,本人层从信号处理的角度深刻探讨了卷积的应用。体现了信号衰减与叠加的魅力。
图像中的卷积
计算机中的图像通常是二维或者三维的,可以用一个二维或者三维的矩阵表示。
我们假设一个二维图像 X ∈ R H × W X\in R^{H\times W} X∈RH×W,卷积核为 G ∈ R k × k G\in R^{k\times k} G∈Rk×k,其中k为奇数。
二维离散卷积的计算方式如下所示:
Y m , n = ∑ i = − ⌊ k 2 ⌋ ⌊ k 2 ⌋ ∑ j = − ⌊ k 2 ⌋ ⌊ k 2 ⌋ X m − i , n − j G i , j Y_{m,n}=\sum_{i=-\lfloor \frac{k}{2}\rfloor}^{\lfloor\frac{k}{2}\rfloor}\sum_{j=-\lfloor \frac{k}{2}\rfloor}^{\lfloor\frac{k}{2}\rfloor}X_{m-i,n-j}G_{i,j} Ym,n=i=−⌊2k⌋∑⌊2k⌋j=−⌊2k⌋∑⌊2k⌋Xm−i,n−jGi,j
简而言之,上述过程就是将卷积核旋转180°,然后在图像中找到一个 k × k k\times k k×k大小的区域,与旋转后的卷积求取内积,得到输出。
不同的卷积核会带来不同的结果:
卷积的意义
卷积定理可以将时域中复杂的卷积运算转化为频域中简单的相乘运算。
在频率域中,卷积核作为一个滤波器,对变换后的频域图像进行处理。
如果卷积核是一个低通滤波器,可以过滤掉较高的频率,那么当频域图像回到像素空间后,细节信息丢失。这是因为高频对应着剧烈变化的区域,比如图像的边缘、细节。
深度学习中的卷积操作
单通道卷积
我们在信号和图像处理中,都发现卷积涉及到翻转的操作,这个定义在信号处理中被称为互关系。但是在深度学习中,卷积是不用进行显示翻转的(训练得到)。
H m , n = ∑ i = − ⌊ k 2 ⌋ ⌊ k 2 ⌋ ∑ j = − ⌊ k 2 ⌋ ⌊ k 2 ⌋ X m + i , n + j G i , j H_{m,n}=\sum_{i=-\lfloor \frac{k}{2}\rfloor}^{\lfloor\frac{k}{2}\rfloor}\sum_{j=-\lfloor \frac{k}{2}\rfloor}^{\lfloor\frac{k}{2}\rfloor}X_{m+i,n+j}G_{i,j} Hm,n=i=−⌊2k⌋∑⌊2k⌋j=−⌊2k⌋∑⌊2k⌋Xm+i,n+jGi,j
每个卷积核提取输入的某种特征,为了增加特征的丰富程度,常常使用多个卷积。
卷积得到的输出称为特征图。
卷积的起始位置无法取得输入的每一个位置,这会带来两个问题:
- 多次卷积运算之后,输出越来越小;
- 边缘的像素点,对于输出的影响越来越小,边缘信息丢失。
于是,我们通常会采用padding的手法来解决这两个问题。通常而言,padding的大小与卷积核的大小息息相关。
为了保持feature map和original map图像一致,padding大小与卷积核大小的关系为 P = ⌊ k 2 ⌋ P=\lfloor\frac{k}{2}\rfloor P=⌊2k⌋
多通道卷积
假设输入 X ∈ R H × W × C X\in R^{H\times W\times C} X∈RH×W×C,给每个通道一个卷积核,于是构成了 G c ′ ∈ R k × k × C G^{c'}\in R^{k\times k\times C} Gc′∈Rk×k×C。
H m , n , c ′ = ∑ i = − ⌊ k 2 ⌋ ⌊ k 2 ⌋ ∑ j = − ⌊ k 2 ⌋ ⌊ k 2 ⌋ X m + i , n + j , : ⋅ G i , j , : H_{m,n,c'}=\sum_{i=-\lfloor \frac{k}{2}\rfloor}^{\lfloor\frac{k}{2}\rfloor}\sum_{j=-\lfloor \frac{k}{2}\rfloor}^{\lfloor\frac{k}{2}\rfloor}X_{m+i,n+j,:}·G_{i,j,:} Hm,n,c′=i=−⌊2k⌋∑⌊2k⌋j=−⌊2k⌋∑⌊2k⌋Xm+i,n+j,:⋅Gi,j,:
于是卷积核的维度为 G ∈ R k × k × C × C ′ G\in R^{k\times k\times C\times C'} G∈Rk×k×C×C′。其中 C ′ C' C′是卷积后的通道数。
通常而言,我们还会对每个通道的卷积操作一个偏置,于是,计算公式变为:
H m , n , c ′ = b c ′ + ∑ i = − ⌊ k 2 ⌋ ⌊ k 2 ⌋ ∑ j = − ⌊ k 2 ⌋ ⌊ k 2 ⌋ X m + i , n + j , : ⋅ G i , j , : H_{m,n,c'}=b_{c'}+\sum_{i=-\lfloor \frac{k}{2}\rfloor}^{\lfloor\frac{k}{2}\rfloor}\sum_{j=-\lfloor \frac{k}{2}\rfloor}^{\lfloor\frac{k}{2}\rfloor}X_{m+i,n+j,:}·G_{i,j,:} Hm,n,c′=bc′+i=−⌊2k⌋∑⌊2k⌋j=−⌊2k⌋∑⌊2k⌋Xm+i,n+j,:⋅Gi,j,:
参数总量为: k 2 × C × C ′ + C ′ k^2\times C\times C' + C' k2×C×C′+C′
尺寸为:
H
′
=
H
+
2
p
−
k
s
+
1
H' = \frac{H+2p-k}{s}+1
H′=sH+2p−k+1
池化
池化操作的主要目的是降低维度,从而达到降低计算量的效果;
同时在训练初期提供一些平移不变性。
卷积神经网络
特点
卷积神经网络的结构一般分为两个部分:
- 卷积层和池化层交替堆叠构成的骨干网络;主要用于从输入中提取丰富的特征;
- 全连接层,主要作用是聚合全局信息并将其映射到输出空间(丢弃了特征图的空间信息)。
卷积神经网络具有三个特点:
1)局部连接:
输入和输出是局部连接的;这样的好处在于需要的参数远远小于全部连接(多层感知机)。
连续使用两层3x3的卷积后,它的输出仅与5x5大小的输入区域有关,这个区域也被称为感受野。
然而,实际感受野通常比这个区域更小。
2)权值共享:
不同区域使用相同的卷积核参数。
这样的好处有两个:1. 减少了参数量;2.平移不变性。
最大池化也带来了平移不变性。
3)层次化表达:
卷积神经网络是通过卷积层堆叠得到的,每一层是对前一层进行变换,提取的特征也是从低层次到高层次,逐渐变得抽象。
低层次的一些特征有:颜色、边缘、角等;中间层次特征有:纹理结构等;高级特征有:图像的语义、具体包含的目标等。
特殊的卷积形式
1x1卷积
1x1卷积的作用如下:
- 信息聚合,增加非线性;1x1卷积可以看做是对所有通道的信息进行加权,即信息聚合;卷积之后可以使用非线性激活,增加模型的表达能力。
- 通道数变换,用于增加或减少特征图的通道数。
转置卷积
语义分割任务中必不可少的模块。语义分割指的是对图像在像素级别上进行分类。比如属于人的像素需要分类为同一类别,属于小鹿部分的像素需要分类为同一类别。
传统的CNN语义分割模型通常由两部分组成,分别是编码器和解码器。解码器将编码得到的低维特征映射回到像素空间,对每个像素的具体类别进行判断。
卷积核大小为k的转置卷积,在进行计算时将默认在输入四周填充 k − 1 k-1 k−1圈0;假设输入是2x2,卷积大小为3x3,转置卷积相当于在输入外补充了两圈0元素,然后进行标准卷积,最终得到4x4的输出。
设置padding的话,会影响最后填充的大小,填充值由k-1-p给出;设置步长的话,它是在卷积元素之间插入s-1个0。
于是,尺寸公式为 H ′ = s ( H − 1 ) − 2 p + k H'=s(H-1)-2p+k H′=s(H−1)−2p+k
另外还有分组卷积、空洞卷积、深度可分离卷积不在此一一赘述。