3.2 CNN卷积神经网络基础知识-卷积操作(百度架构师手把手带你零基础实践深度学习原版笔记系列)

3.2 CNN卷积神经网络基础知识-卷积操作(百度架构师手把手带你零基础实践深度学习原版笔记系列)

这一小节将为读者介绍卷积算法的原理和实现方案,并通过具体的案例展示如何使用卷积对图片进行操作,主要涵盖如下内容:

目录

3.2 CNN卷积神经网络基础知识(百度架构师手把手带你零基础实践深度学习原版笔记系列)

卷积计算

填充(padding)

步幅(stride)

感受野(Receptive Field)

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


卷积计算

卷积是数学分析中的一种积分变换的方法,在图像处理中采用的是卷积的离散形式。这里需要说明的是,在卷积神经网络中,卷积层的实现方式实际上是数学中定义的互相关 (cross-correlation)运算,与数学分析中的卷积定义有所不同,这里跟其他框架和卷积神经网络的教程保持一致,都使用互相关运算作为卷积的定义,具体的计算过程如 图7 所示。


 


图7:卷积计算过程


 


说明:

卷积核(kernel)也被叫做滤波器(filter),假设卷积核的高和宽分别为kh​和kw​,则将称为kh×kw卷积,比如3×5卷积,就是指卷积核的高为3, 宽为5。


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

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

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

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

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

(公式看起来很复杂,但计算方式很简单啦,就是对应位置相乘最后相加)

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

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

  • 【思考】 当卷积核大小为3×3时,b和a之间的对应关系应该是怎样的?

其它说明:

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


填充(padding)

在上面的例子中,输入图片尺寸为3×3,输出图片尺寸为2×2,经过一次卷积之后,图片尺寸变小。卷积输出特征图的尺寸计算方法如下:

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


 


图8:图形填充


 

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

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

如果在图片高度方向,在第一行之前填充ph1行,在最后一行之后填充ph2​行;在图片的宽度方向,在第1列之前填充pw1​列,在最后1列之后填充pw2列;则填充之后的图片尺寸为(H+ph1+ph2)×(W+pw1+pw2)。经过大小为kh×kw的卷积核操作之后,输出图片的尺寸为:

在卷积计算过程中,通常会在高度或者宽度的两侧采取等量填充,即ph1=ph2=ph,  pw1=pw2=pw,上面计算公式也就变为:

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

步幅(stride)

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


图9:步幅为2的卷积过程


 

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

(有个细节,可能存在不能整除的情况,这里我们根据原理显然知道应该进行向下取整就好啦,代码上Floor)

假设输入图片尺寸是H×W=100×100,卷积核大小kh×kw=3×3,填充ph=pw=1,步幅为sh=sw=2,则输出特征图的尺寸为:

感受野(Receptive Field)

输出特征图上每个点的数值,是由输入图片上大小为kh×kw​的区域的元素与卷积核每个元素相乘再相加得到的,所以输入图像上kh×kw​区域内每个元素数值的改变,都会影响输出点的像素值。我们将这个区域叫做输出特征图上对应点的感受野。感受野内每个元素数值的变动,都会影响输出点的数值变化。比如3×3卷积对应的感受野大小就是3×3,如 图10 所示。


 


图10:感受野为3×3的卷积


 

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


 


图11:感受野为5×5的卷积


 

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

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

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

  • 多输入通道场景

上面的例子中,卷积层的数据是一个2维数组,但实际上一张图片往往含有RGB三个通道,要计算卷积的输出结果,卷积核的形式也会发生变化。假设输入图片的通道数为Cin,输入数据的形状是Cin​,计算过程如 图12 所示。

  1. 对每个通道分别设计一个2维数组作为卷积核,卷积核数组的形状是Cin×kh×kw。

  2. 对任一通道cin∈[0,Cin),分别用大小为kh×kw​的卷积核在大小为Hin×Win​的二维数组上做卷积。

  3. 将这Cin个通道的计算结果相加,得到的是一个形状为Hout×Wout的二维数组。
     


图12:多输入通道计算过程


 

  • 多输出通道场景

一般来说,卷积操作的输出特征图也会具有多个通道Cout,这时我们需要设计Cout个维度为Cin×kh×kw的卷积核,卷积核数组的维度是Cout×Cin×kh×kw​,如 图13 所示。

  1. 对任一输出通道cout∈[0,Cout),分别使用上面描述的形状为Cin×kh×kw的卷积核对输入图片做卷积。
  2. 将这Cout个形状为Hout×Wout​的二维数组拼接在一起,形成维度为Cout×Hout×Wout的三维数组。

说明:

通常将卷积核的输出通道数叫做卷积核的个数。



图13:多输出通道计算过程


 

  • 批量操作

在卷积神经网络的计算中,通常将多个样本放在一起形成一个mini-batch进行批量操作,即输入数据的维度是N×Cin×Hin×Win​。由于会对每张图片使用同样的卷积核进行卷积操作,卷积核的维度与上面多输出通道的情况一样,仍然是Cout×Cin×kh×kw​,输出特征图的维度是N×Cout×Hout×Wout,如 图14 所示。


 


图14:批量操作

猜你喜欢

转载自blog.csdn.net/coolyoung520/article/details/109073711
今日推荐