深度学习基础入门篇[9.1]:卷积之标准卷积:卷积核/特征图/卷积计算、填充、感受视野、多通道输入输出、卷积优势和应用案例讲解

释放双眼,带上耳机,听听看~!
本文介绍了卷积神经网络中的基本概念,包括卷积核、特征图、卷积计算等,以及解决全连接网络中存在的问题的背景和应用示例。

深度学习基础入门篇[9.1]:卷积之标准卷积:卷积核/特征图/卷积计算、填充、感受视野、多通道输入输出、卷积优势和应用案例讲解

1.卷积提出背景

在全连接网络[1]中,一张图片上的所有像素点会被展开成一个1维向量输入网络,如 图1 所示,28 x 28的输入数据被展开成为784 x 1 的数据作为输入。

深度学习基础入门篇[9.1]:卷积之标准卷积:卷积核/特征图/卷积计算、填充、感受视野、多通道输入输出、卷积优势和应用案例讲解

图1 全连接网络图

这样往往会存在如下两个问题:

1. 输入数据的空间信息被丢失。 空间上相邻的像素点往往具有相似的RGB值,RGB的各个通道之间的数据通常密切相关,但是转化成1维向量时,这些信息被丢失。如 图2 所示,空间位置相邻的两个点A和B,转化成1维向量后并没有体现出他们之间的空间关联性。

深度学习基础入门篇[9.1]:卷积之标准卷积:卷积核/特征图/卷积计算、填充、感受视野、多通道输入输出、卷积优势和应用案例讲解

图2 图片转换为1维向量

2. 模型参数过多,容易发生过拟合。 由于每个像素点都要跟所有输出的神经元相连接。当图片尺寸变大时,输入神经元的个数会按图片尺寸的平方增大,导致模型参数过多,容易发生过拟合。例如:对于一幅1000×10001000times 1000 的输入图像而言,如果下一个隐含层的神经元数目为10610^6 个,那么将会有1000×1000×106=10121000times 1000times 10^6=10^{12} 个权重参数,可以想象,如此大规模的参数量使得网络很难训练。

为了解决上述问题,引入卷积(Convolution)来对输入的图像进行特征提取。卷积的计算范围是在像素点的空间邻域内进行的,因此可以利用输入图像的空间信息;此外,由于卷积具有局部连接、权重共享等特性,卷积核参数的数目也远小于全连接层。

2.卷积核 / 特征图 / 卷积计算

卷积核(kernel):也被叫做滤波器(filter),假设卷积核的高和宽分别为khk_hkwk_w,则将称为kh×kwk_htimes k_w卷积,比如3×53times5卷积,就是指卷积核的高为3, 宽为5。卷积核中数值为对图像中与卷积核同样大小的子块像素点进行卷积计算时所采用的权重。

卷积计算(convolution):图像中像素点具有很强的空间依赖性,卷积(convolution)就是针对像素点的空间依赖性来对图像进行处理的一种技术。

特征图(feature map):卷积滤波结果在卷积神经网络中被称为特征图(feature map)。

2.1 卷积计算应用示例

在卷积神经网络中,卷积层的实现方式实际上是数学中定义的互相关 (cross-correlation)运算,具体的计算过程如 图3 所示,每张图的左图表示输入数据是一个维度为3 x 3的二维数组;中间的图表示卷积核是一个维度为2 x 2的二维数组。

深度学习基础入门篇[9.1]:卷积之标准卷积:卷积核/特征图/卷积计算、填充、感受视野、多通道输入输出、卷积优势和应用案例讲解

图3 卷积计算过程

  • 如图3(a)所示:左边的图大小是3×33times3,表示输入数据是一个维度为3×33times3的二维数组;中间的图大小是2×22times2,表示一个维度为2×22times2的二维数组,我们将这个二维数组称为卷积核。先将卷积核的左上角与输入数据的左上角(即:输入数据的(0, 0)位置)对齐,把卷积核的每个元素跟其位置对应的输入数据中的元素相乘,再把所有乘积相加,得到卷积输出的第一个结果:

0×1+1×2+2×4+3×5=25       (a)0times1 + 1times2 + 2times4 + 3times5 = 25 (a)

  • 如图3(b)所示:将卷积核向右滑动,让卷积核左上角与输入数据中的(0,1)位置对齐,同样将卷积核的每个元素跟其位置对应的输入数据中的元素相乘,再把这4个乘积相加,得到卷积输出的第二个结果:

0×2+1×3+2×5+3×6=31       (b)0times2 + 1times3 + 2times5 + 3times6 = 31 (b)

  • 如图3(c)所示:将卷积核向下滑动,让卷积核左上角与输入数据中的(1, 0)位置对齐,可以计算得到卷积输出的第三个结果:

0×4+1×5+2×7+3×8=43       (c)0times4 + 1times5 + 2times7 + 3times8 = 43 (c)

  • 如图3(d)所示:将卷积核向右滑动,让卷积核左上角与输入数据中的(1, 1)位置对齐,可以计算得到卷积输出的第四个结果:

0×5+1×6+2×8+3×9=49       (d)0times5 + 1times6 + 2times8 + 3times9 = 49 (d)

最终可以得到图3(d)右侧所示的特征图。

卷积核的计算过程可以用下面的数学公式表示,其中 aa 代表输入图片, bb 代表输出特征图,ww 是卷积核参数,它们都是二维数组, ∑u,v sum{u,v}{ } 表示对卷积核参数进行遍历并求和。

b[i,j]=∑u,va[i+u,j+v]⋅w[u,v]b[i, j] = sum_{u,v}{a[i+u, j+v]cdot w[u, v]}

举例说明,假如上图中卷积核大小是2×22times 2,则uu可以取0和1,vv也可以取0和1,也就是说:

b[i,j]=a[i+0,j+0]⋅w[0,0]+a[i+0,j+1]⋅w[0,1]+a[i+1,j+0]⋅w[1,0]+a[i+1,j+1]⋅w[1,1]b[i, j] = a[i+0, j+0]cdot w[0, 0] + a[i+0, j+1]cdot w[0, 1] + a[i+1, j+0]cdot w[1, 0] + a[i+1, j+1]cdot w[1, 1]

读者可以自行验证,当[i,j][i, j]取不同值时,根据此公式计算的结果与上图中的例子是否一致。

思考:

为了能够更好地拟合数据,在卷积神经网络中,一个卷积算子除了上面描述的卷积过程之外,还包括加上偏置项的操作。例如假设偏置为1,则上面卷积计算的结果为:

0×1+1×2+2×4+3×5 +1=260times1 + 1times2 + 2times4 + 3times5 mathbf{ + 1} = 26

0×2+1×3+2×5+3×6 +1=320times2 + 1times3 + 2times5 + 3times6 mathbf{ + 1} = 32

0×4+1×5+2×7+3×8 +1=440times4 + 1times5 + 2times7 + 3times8 mathbf{ + 1} = 44

0×5+1×6+2×8+3×9 +1=500times5 + 1times6 + 2times8 + 3times9 mathbf{ + 1} = 50

说明:

  1. 输入图像的边缘像素因其处于边缘位置,因此无法参与卷积计算;

  2. 图像卷积计算实质上是对图像进行了下采样 (down sampling)操作。对卷积得到的图像结果不断卷积滤波,则原始图像就会被“层层抽象、层层约减”,从而使得蕴涵在图像中的重要信息“显山露水”;

  3. 卷积核中的权重系数wiw_i是通过数据驱动机制学习得到,其用来捕获图像中某像素点及其邻域像素点所构成的特有空间模式。一旦从数据中学习得到权重系数,这些权重系数就刻画了图像中像素点构成的空间分布不同模式。

3.填充(Padding)

输入图像边缘位置的像素点无法进行卷积滤波,为了使边缘像素也参与卷积滤波,填充技术应运而生。填充是指在边缘像素点周围填充“0”(即0填充),使得输入图像的边缘像素也可以参与卷积计算。注意,在这种填充机制下,卷积后的图像分辨率将与卷积前图像分辨率一致,不存在下采样。

3.1填充应用示例

在上面的例子中,输入图片尺寸为3×33times3,输出图片尺寸为2×22times2,经过一次卷积之后,图片尺寸变小。卷积输出特征图的尺寸计算方法如下(卷积核的高和宽分别为khk_hkwk_w):

Hout=H−kh+1H_{out} = H – k_h + 1

Wout=W−kw+1W_{out} = W – k_w + 1

如果输入尺寸为4,卷积核大小为3时,输出尺寸为4−3+1=24-3+1=2。读者可以自行检查当输入图片和卷积核为其他尺寸时,上述计算式是否成立。当卷积核尺寸大于1时,输出特征图的尺寸会小于输入图片尺寸。如果经过多次卷积,输出图片尺寸会不断减小。为了避免卷积之后图片尺寸变小,通常会在图片的外围进行填充(padding),如 图4 所示。

深度学习基础入门篇[9.1]:卷积之标准卷积:卷积核/特征图/卷积计算、填充、感受视野、多通道输入输出、卷积优势和应用案例讲解

图4 图形填充

  • 如图4(a)所示:填充的大小为1,填充值为0。填充之后,输入图片尺寸从4×44times4变成了6×66times6,使用3×33times3的卷积核,输出图片尺寸为4×44times4

  • 如图4(b)所示:填充的大小为2,填充值为0。填充之后,输入图片尺寸从4×44times4变成了8×88times8,使用3×33times3的卷积核,输出图片尺寸为6×66times6

如果在输入图片第一行之前填充ph1p_{h1}行,在最后一行之后填充ph2p_{h2}行;在图片第1列之前填充pw1p_{w1}列,在最后1列之后填充pw2p_{w2}列;则填充之后的图片尺寸为(H+ph1+ph2)×(W+pw1+pw2)(H + p_{h1} + p_{h2})times(W + p_{w1} + p_{w2})。经过大小为kh×kwk_htimes k_w的卷积核操作之后,输出图片的尺寸为:

Hout=H+ph1+ph2−kh+1H_{out} = H + p_{h1} + p_{h2} – k_h + 1

Wout=W+pw1+pw2−kw+1W_{out} = W + p_{w1} + p_{w2} – k_w + 1

在卷积计算过程中,通常会在高度或者宽度的两侧采取等量填充,即ph1=ph2=ph,  pw1=pw2=pwp_{h1} = p_{h2} = p_h, p_{w1} = p_{w2} = p_w,上面计算公式也就变为:

Hout=H+2ph−kh+1H_{out} = H + 2p_h – k_h + 1

Wout=W+2pw−kw+1W_{out} = W + 2p_w – k_w + 1

为了便于padding,卷积核大小通常使用1,3,5,7这样的奇数,这样如果使用的填充大小为ph=(kh−1)/2,pw=(kw−1)/2p_h=(k_h-1)/2 ,p_w=(k_w-1)/2,则可以使得卷积之后图像尺寸不变。例如当卷积核大小为3时,padding大小为1,卷积之后图像尺寸不变;同理,如果卷积核大小为5,padding大小为2,也能保持图像尺寸不变。

4.步长(Stride)

在卷积操作时,通常希望输出图像分辨率与输入图像分辨率相比会逐渐减少,即图像被约减。因此,可以通过改变卷积核在输入图像中移动步长大小来跳过一些像素,进行卷积滤波。当Stride=1时,卷积核滑动跳过1个像素,这是最基本的单步滑动,也是标准的卷积模式。Stride=k表示卷积核移动跳过的步长是k。

  • 应用示例

图3 中卷积核每次滑动一个像素点,这是步长为1的情况。图5 是步长为2的卷积过程,卷积核在图片上移动时,每次移动大小为2个像素点。

深度学习基础入门篇[9.1]:卷积之标准卷积:卷积核/特征图/卷积计算、填充、感受视野、多通道输入输出、卷积优势和应用案例讲解

图5 步幅为2的卷积过程

当高和宽方向的步幅分别为shs_hsws_w时,输出特征图尺寸的计算公式是:

Hout=H+2ph−khsh+1H_{out} = frac{H + 2p_h – k_h}{s_h} + 1

Wout=W+2pw−kwsw+1W_{out} = frac{W + 2p_w – k_w}{s_w} + 1

思考:

假设输入图片尺寸是H×W=100×100Htimes W = 100 times 100,卷积核大小kh×kw=3×3k_h times k_w = 3 times 3,填充ph=pw=1p_h = p_w = 1,步长为sh=sw=2s_h = s_w = 2,则输出特征图的尺寸为:

Hout=100+2−32+1=50H_{out} = frac{100 + 2 – 3}{2} + 1 = 50

Wout=100+2−32+1=50W_{out} = frac{100 + 2 – 3}{2} + 1 = 50

5.感受野(Receptive Field)

卷积所得结果中,每个特征图像素点取值依赖于输入图像中的某个区域,该区域被称为感受野(receptive field),正所谓“管中窥豹、见微知著”。那么这个区域在哪呢,在卷积神经网络中,感受野是特征图(feature map)上的点对应输入图像上的区域。感受野内每个元素数值的变动,都会影响输出点的数值变化。

应用示例

比如3×33times3卷积对应的感受野大小就是3×33times3,如 图6 所示。

深度学习基础入门篇[9.1]:卷积之标准卷积:卷积核/特征图/卷积计算、填充、感受视野、多通道输入输出、卷积优势和应用案例讲解

图6 感受野为3×3的卷积

而当通过两层3×33times3的卷积之后,感受野的大小将会增加到5×55times5,如 图7 所示。

深度学习基础入门篇[9.1]:卷积之标准卷积:卷积核/特征图/卷积计算、填充、感受视野、多通道输入输出、卷积优势和应用案例讲解

图7 感受野为5×5的卷积

因此,当增加卷积网络深度的同时,感受野将会增大,输出特征图中的一个像素点将会包含更多的图像语义信息。

6.多输入通道、多输出通道和批量操作

前面介绍的卷积计算过程比较简单,实际应用时,处理的问题要复杂的多。例如:对于彩色图片有RGB三个通道,需要处理多输入通道的场景,相应的输出特征图往往也会具有多个通道。而且在神经网络的计算中常常是把一个批次的样本放在一起计算,所以卷积算子需要具有批量处理多输入和多输出通道数据的功能。

6.1多输入通道场景

当输入含有多个通道时,对应的卷积核也应该有相同的通道数。假设输入图片的通道数为CinC_{in},输入数据的形状是Cin×Hin×WinC_{in}times{H_{in}}times{W_{in}}

  1. 对每个通道分别设计一个2维数组作为卷积核,卷积核数组的形状是Cin×kh×kwC_{in}times{k_h}times{k_w}

  2. 对任一通道Cin∈[0,Cin)C_{in} in [0, C_{in}),分别用大小为kh×kwk_htimes{k_w}的卷积核在大小为Hin×WinH_{in}times{W_{in}}的二维数组上做卷积。

  3. 将这CinC_{in}个通道的计算结果相加,得到的是一个形状为Hout×WoutH_{out}times{W_{out}}的二维数组。

上面的例子中,卷积层的数据是一个2维数组,但实际上一张图片往往含有RGB三个通道,要计算卷积的输出结果,卷积核的形式也会发生变化。假设输入图片的通道数为33,输入数据的形状是3×Hin×Win3times{H_{in}}times{W_{in}},计算过程如 图8 所示。

  1. 对每个通道分别设计一个2维数组作为卷积核,卷积核数组的形状是3×kh×kw3times{k_h}times{k_w}

  2. 对任一通道cin∈[0,3)c_{in} in [0, 3),分别用大小为kh×kwk_htimes{k_w}的卷积核在大小为Hin×WinH_{in}times{W_{in}}的二维数组上做卷积。

  3. 将这33个通道的计算结果相加,得到的是一个形状为Hout×WoutH_{out}times{W_{out}}的二维数组。

深度学习基础入门篇[9.1]:卷积之标准卷积:卷积核/特征图/卷积计算、填充、感受视野、多通道输入输出、卷积优势和应用案例讲解

图8 多输入通道计算过程

6.2 多输出通道场景

如果我们希望检测多种类型的特征,实际上我们可以使用多个卷积核进行计算。所以一般来说,卷积操作的输出特征图也会具有多个通道CoutC_{out},这时我们需要设计CoutC_{out}个维度为Cin×kh×kwC_{in}times{k_h}times{k_w}的卷积核,卷积核数组的维度是Cout×Cin×kh×kwC_{out}times C_{in}times{k_h}times{k_w}

  1. 对任一输出通道cout∈[0,Cout)c_{out} in [0, C_{out}),分别使用上面描述的形状为Cin×kh×kwC_{in}times{k_h}times{k_w}的卷积核对输入图片做卷积。

  2. 将这CoutC_{out}个形状为Hout×WoutH_{out}times{W_{out}}的二维数组拼接在一起,形成维度为Cout×Hout×WoutC_{out}times{H_{out}}times{W_{out}}的三维数组。

应用示例Visualizing and Understanding Convolutional Networks

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

如何利用人工智能技术提升网站用户体验

2023-12-8 8:51:00

AI教程

飞桨PaddleDepth:低成本深度信息搜集方案

2023-12-8 9:00:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索