本文已参与「新人创作礼」活动,一起开启掘金创作之路。
1. 计算机视觉(Computer Vision)领域介绍
图片分类(Image Classification)、目标检测(Object detection)、神经风格转换(Neural Style Transfer)。 计算机视觉的一大挑战就是输入样本的尺寸可以任意大,进一步导致神经网络的参数很多,容易过拟合并且对计算机的内存和运算速度要求极高。为了解决这个问题,可以引入卷积运算。
2. 卷积运算
2.1. 一维场合
卷积的一个重要物理意义是:一个函数(如:单位响应)在另一个函数(如:输入信号)上的加权叠加。 对于线性时不变系统,如果知道该系统的单位响应,那么将单位响应和输入信号求卷积,就相当于把输入信号的各个时间点的单位响应 加权叠加,就直接得到了输出信号。 形象的物理含义见怎样通俗易懂地解释卷积? - 知乎
给定一个输入信号序列
x(t),t=1,⋅⋅⋅,n,和单位响应序列(有时也称滤波器)
f(t),t=1,⋅⋅⋅,m,一般情况下单位响应的长度
m远小于输入信号长度
n。 则卷积输出:
\begin{align*} y(t) &=(f*x)(t)\\ &=\sum_{k=1}^{\infty}f(t-k+1)·x(k)) \\ &=\sum_{k=1}^{\infty}f(k)·x(t-k+1)) \\ &=\sum_{k=1}^{m}f(k)·x(t-k+1))\\ \tag{2-1} \end{align*}
在卷积神经网络中,对于不在
[1,n]范围之内的
x(t)用零补齐(zero-padding),输出长度一般为
n+m−1。此时也称为宽卷积。另一类是窄卷积,输出长度为
n−m+1
2.2. 二维场合
二维卷积经常用在图像处理中。给定一个图像
xij,1≤i≤M,1≤j≤N,和滤波器
fij,1≤i≤m,1≤j≤n,一般
m<<M,n<<N。
卷积的输出为:
\begin{align*} y_{ij}&=\sum_{u=1}^{+\infty}\sum_{v=1}^{+\infty}f_{i-u+1,i-v+1}·x_{u,v}\\ &=\sum_{u=1}^{m}\sum_{v=1}^{n}f_{u,v}·x_{i-u+1,i-v+1}\\ \tag{2-2} \end{align*}
在图像处理中,常用的均值滤波(mean filter)就是当前位置的像素值设为滤波器窗口中素有像素的平均值,也就是
fuv=mn1。 上面的运算是信号与系统里面的定义,在实际的操作中通常要将卷积核进行翻转(水平和竖直方向上分别进行一次翻转)再与输入信号进行逐元素相乘(再相加)。但是在深度学习中,简化了翻转的操作,因此其实不适用于上述的公式。深度学习里面的卷积,更严谨的称呼是交叉相关(cross-correlation),但是由于习惯,还是叫做卷积。
3. 卷积操作的作用和优点
3.1. 参数共享和连接的稀疏性
假设输入图像形状为
32×32×3,卷积核形状为
5×5×6,则卷积后的图像大小为
28×28×6。如果是传统的神经网络,那么参数个数为:
3072×4704≈14M,而在卷积神经网络中参数个数为
(5×5+1)×6=156 卷积核在图像上移动时,参数不变(参数共享) 输出图像上的每个像素只来源于上一层图像的一个局部(连接的稀疏性)
3.2. 平移不变性
3.2. 边缘检测
4. Padding(填充)
常规卷积操作的后果:
- shrinking image没经过一次卷积操作,图片都会缩小
- throw away info from edge(忽视边界信息) ,角落或者边界上的像素被使用的次数比中间的像素少很多
记输入图片尺寸为
n×n,滤波器大小为
f×f,填充的数量为
p,下面是两种常用的填充方式:
- "valid": no padding
n×n ∗ f×f→n−f+1 × n−f+1
- "Same": Pad so that output size is the same as the input size
(n+2p−f+1)×(n+2p−f+1), 其中
p=2f−1。
在计算机视觉领域,f基本上是奇数。因为如果是偶数,需要不对称的填充。而且奇数的滤波器有一个中心,这样可以描述滤波器的位置。
3×3的滤波器最常见
5. Strided Convolutions(带步长的卷积)
假设padding p, stride S,则卷积操作的尺寸运算为:
(n×n)∗(f×f) → (Sn+2p−f+1)×(Sn+2p−f+1)
如果不能整除,则向下取整:
⌊Sn+2p−f+1⌋×⌊Sn+2p−f+1⌋ ,这意味着滤波器必须全部落在(填充后的)图像上。
6. 对三维图片(RGB)的卷积操作
RGB图像有三个通道(channel),或者叫做深度(depth),因此卷积核也应该有三个通道。卷积核的三个通道分别与RGB图像的三个通道逐元素相乘,再将乘积结果相加,得到卷积后的图像。下图是检测红色垂直边缘(上)和整体图像的垂直边缘(下)的例子:

图6.1 RGB图像卷积操作例子 有时为了检测多种类型的边缘,可以用同时多个滤波器对图像进行卷积操作,具体的尺寸运算总结如下: $n\times n\times n_c\ *\ f\times f\times n_c\ \rightarrow\ n-f+1\times n-f+1\times n_c'$ 其中$n_c$代表通道数,通常图像的通道数与滤波器的通道数相等;$n$和$f$分别代表图像和滤波器每个通道的尺寸;$n_c'$代表滤波器的个数

图6.2 同时用多个卷积核对图像进行卷积操作
7. 一层卷积层的例子

图7.1 一层卷积层的例子 卷积核相关说明: $$ \begin{align*} f^{[l]}&=filter\ size,\\ p^{[l]}&=padding\\ s^{[l]}&=stride\\ \tag{7-1} \end{align*} $$ 卷积核的形状为: $$f^{[l]}\times f^{[l]}\times n_c^{[l-1]}\tag{7-2}$$ 输入输出的形状: $$ \begin{align*} Input&: n_H^{[l-1]}\times n_W^{[l-1]}\times n_c^{[l-1]}\\ Output&: n_H^{[l]}\times n_W^{[l]}\times n_c^{[l]}\\ \tag{7-3} \end{align*} $$ 其中: $$ \begin{align*} n_H^{[l]}&=\lfloor\frac{n_H^{[l-1]}+2p^{[l]}-f^{l}}{S^{[l]}}+1\rfloor\\ n_W^{[l]}&=\lfloor\frac{n_W^{[l-1]}+2p^{[l]}-f^{l}}{S^{[l]}}+1\rfloor\\ \tag{7-4} \end{align*} $$ Activations: $a^{[l]}=n_H^{[l]}\times n_W^{[l]}\times n_c^{[l]}$ Batch or mini batch: $A^{[l]}=m\times n_H^{[l]}\times n_W^{[l]}\times n_c^{[l]}$ Weights: $f^{[l]}\times f^{[l]}\times n_c^{[l-1]}\times n_c^{l}$ bias: $n_c^{[l]}\rightarrow (1,1,1,n_c^{[l]})$