4.1卷积神经网络

4.1卷积神经网络

百度AI Studio课程_学习成就梦想,AI遇见未来_AI课程 - 飞桨AI Studio星河社区-人工智能学习与实训社区 (baidu.com)

卷积神经网络是目前计算机视觉中使用最普遍的模型结构。本章节主要向读者介绍卷积神经网络的一些基础模块,包括:

  • 卷积(Convolution)
  • 池化(Pooling)
  • ReLU激活函数
  • 批归一化(Batch Normalization)
  • 丢弃法(Dropout)

回顾一下,在上一章"一个案例带你吃透深度学习"中,我们介绍了手写数字识别任务,应用的是全连接网络进行特征提取,即将一张图片上的所有像素点展开成一个1维向量输入网络,存在如下两个问题:

1. 输入数据的 空间信息被 丢失****。****空间上相邻的像素点往往具有相似的RGB值,RGB的各个通道之间的数据通常密切相关,但是转化成1维向量时,这些信息被丢失。同时,图像数据的形状信息中,可能隐藏着某种本质的模式,但是转变成1维向量输入全连接神经网络时,这些模式也会被忽略。

2. 模型 参数过多****,容易发生**** 过拟合****。****在手写数字识别案例中,每个像素点都要跟所有输出的神经元相连接。当图片尺寸变大时,输入神经元的个数会按图片尺寸的平方增大,导致模型参数过多,容易发生过拟合。

为了解决上述问题,我们引入卷积神经网络进行特征提取,既能提取到相邻像素点之间的特征模式,又能保证参数的个数不随图片尺寸变化。图6是一个典型的卷积神经网络结构,多层卷积和池化层组合作用在输入图片上,在网络的最后通常会加入一系列全连接层,ReLU激活函数一般加在卷积或者全连接层的输出上,网络中通常还会加入Dropout来防止过拟合。

图6:卷积神经网络经典结构


说明:

在卷积神经网络中,计算范围是在像素点的空间邻域内进行的,卷积核参数的数目也远小于全连接层。卷积核本身与输入图片大小无关,它代表了对空间邻域内某种特征模式的提取。比如,有些卷积核提取物体边缘特征,有些卷积核提取物体拐角处的特征,图像上不同区域共享同一个卷积核。当输入图片大小不一样时,仍然可以使用同一个卷积核进行操作。

卷积(Convolution)

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

  • 卷积计算
  • 填充(padding)
  • 步幅(stride)
  • 感受野(Receptive Field)
  • 多输入通道、多输出通道和批量操作
  • 飞桨卷积API介绍
  • 卷积算子应用举例

卷积计算

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

图7:卷积计算过程

说明:

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


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

0×1+1×2+2×4+3×5=25(a)

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

0×2+1×3+2×5+3×6=31(b)

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

0×4+1×5+2×7+3×8=43(c)

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

0×5+1×6+2×8+3×9=49(d)

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

bi,j=∑u,vai+u,j+v⋅wu,v

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

bi,j=ai+0,j+0⋅w0,0+ai+0,j+1⋅w0,1+ai+1,j+0⋅w1,0+ai+1,j+1⋅w1,1

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

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

其它说明:

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

0×1+1×2+2×4+3×5+1=26

0×2+1×3+2×5+3×6+1=32

0×4+1×5+2×7+3×8+1=44

0×5+1×6+2×8+3×9+1=50

填充(padding)

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

H_{out} = H - k_h + 1

W_{out} = W - k_w + 1

如果输入尺寸为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 。

如果在图片高度方向,在第一行之前填充p_{h1}行,在最后一行之后填充p_{h2}行;在图片的宽度方向,在第1列之前填充p_{w1}列,在最后1列之后填充p_{w2}列;则填充之后的图片尺寸为(H+ph1+ph2)×(W+pw1+pw2)。

经过大小为kh×kw的卷积核操作之后,输出图片的尺寸为:

Hout=H+ph1+ph2−kh+1 、Wout=W+pw1+pw2−kw+1

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

H_{out} = H + 2p_h - k_h + 1 、W_{out} = W + 2p_w - k_w + 1

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

步幅(stride)

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

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

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

感受野(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×Hin×Win,计算过程如图12所示。

  1. 对每个通道分别设计一个2维数组作为卷积核,卷积核数组的形状是 C i n × k h × k w 。
  2. 对任一通道 C i n ∈ [ 0 , C i n ) ,分别用大小为 k h × k w的卷积核在大小为 H i n × W i n 的二维数组上做卷积。
  3. 将这 C i n个通道的计算结果相加,得到的是一个形状为 H o u t × W o u t 的二维数组。

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

  • 多 输出通道场景

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

  1. 对任一输出通道 c o u t ∈ [ 0 , C o u t ) ,分别使用上面描述的形状为 C i n × k h × k w 的卷积核对输入图片做卷积。
  2. 将这 C o u t 个形状为 H o u t × W o u t的二维数组拼接在一起,形成维度为 C o u t × H o u t × W o u t的三维数组。

说明:

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

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

  • 批量操作

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

图14:批量操作

飞桨卷积API介绍

飞桨卷积算子对应的API是paddle.nn.Conv2D,用户可以直接调用API进行计算,也可以在此基础上修改。Conv2D名称中的"2D"表明卷积核是二维的,多用于处理图像数据。类似的,也有Conv3D可以用于处理视频数据(图像的序列)。

class paddle.nn.Conv2D ( in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, padding_mode='zeros', weight_attr=None, bias_attr=None, data_format='NCHW')

常用的参数如下:

  • in_channels(int) - 输入图像的通道数。
  • out_channels(int) - 卷积核的个数,和输出特征图通道数相同,相当于上文中的 C o u t C_{out} 。
  • kernel_size(int|list|tuple) - 卷积核大小,可以是整数,比如3,表示卷积核的高和宽均为3 ;或者是两个整数的list,例如3,2,表示卷积核的高为3,宽为2。
  • stride(int|list|tuple,可选) - 步长大小,可以是整数,默认值为1,表示垂直和水平滑动步幅均为1;或者是两个整数的list,例如3,2,表示垂直滑动步幅为3,水平滑动步幅为2。
  • padding(int|list|tuple|str,可选) - 填充大小,可以是整数,比如1,表示竖直和水平边界填充大小均为1;或者是两个整数的list,例如2,1,表示竖直边界填充大小为2,水平边界填充大小为1。

输入数据维度N,Cin,Hin,Win,输出数据维度N,out_channels,Hout,Wout,权重参数ww的维度out_channels,Cin,filter_size_h,filter_size_w,偏置参数b的维度是out_channels。注意,即使输入只有一张灰度图片Hin,Win,也需要处理成四个维度的输入向量1,1,Hin,Win。

相关推荐
嘉行文几秒前
传统机器学习与深度学习的特点与选择
人工智能·深度学习·机器学习
咕泡科技1 分钟前
深度学习碾压机器学习?经典机器学习是否真的无用了?从LLM底层逻辑到工业落地全景解析
人工智能·深度学习·机器学习·llm·nlp
饼饼学习空间智能8 分钟前
机器人规模化部署平台怎么选?Fleet、VDA 5050、多机器人调度与运营闭环解析
大数据·深度学习·机器学习
HealthScience9 分钟前
彻底禁止 WSL 启动(可恢复)
深度学习
腾讯云大数据10 分钟前
腾讯云AI Native数据平台功能发布合集【9月】
人工智能·腾讯云
谢客诚科技16 分钟前
镀膜脆性薄片,不能接触镀膜面,脆性薄片搬运选伯努利还是边缘承靠式末端模组?
人工智能·机器人
我喜欢就喜欢17 分钟前
纳米 AI 搜索实战应用场景指南
人工智能
GlobalInfo22 分钟前
上新 | 全球及中国反无人机综合防御系统行业研究报告(2026版):市场现状、行业前景与占有率分析
人工智能·无人机
9i编程23 分钟前
6. 带 AI 从零搭低代码平台·踩坑实录:实测与大回归,实操又跑偏逐条清零
人工智能·openai·ai编程