阿里云天池零基础入门CV赛事(5)——卷积神经网络

task3 — 卷积神经网络(CNN)
卷积神经网络(简称CNN)是一类特殊的人工神经网络,是深度学习中重要的一个分支。CNN在很多领域都表现优异,精度和速度比传统计算学习算法高很多。特别是在计算机视觉领域,CNN是解决图像分类、图像检索、物体检测和语义分割的主流模型。

1 卷积层

在二维卷积层中,一个二维输入数组和一个二维核(kernel)数组通过互相关运算输出一个二维数组。
阿里云天池零基础入门CV赛事(5)——卷积神经网络_第1张图片
卷积窗从输⼊数组的最左上开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。当卷积窗滑动到某一置时,窗口中的输入子数组与核数组按元素相乘并求和,得到输出数组中相应位置的元素。上图的运算:
阿里云天池零基础入门CV赛事(5)——卷积神经网络_第2张图片
2 池化层

池化层直接计算池化窗⼝内元素的最⼤值或者平均值。
阿里云天池零基础入门CV赛事(5)——卷积神经网络_第3张图片
在二维最大池化中,池化窗口从输入数组的最左上方开始,按从左往右、从上往下的顺序,依次在输入数组上滑动。当池化窗口滑动到某一位置时,窗口中的输入子数组的最大值即输出数组中相应位置的元素。上图的运算:
阿里云天池零基础入门CV赛事(5)——卷积神经网络_第4张图片
3 LeNet
阿里云天池零基础入门CV赛事(5)——卷积神经网络_第5张图片
LeNet分为卷积层和全连接层块两部分,下面介绍这两个模块。
卷积层块里的最基本单元是卷积层后接最大池化层:卷积层用来识别图像里的空间模式,如线条和物体局部,之后的最大池化层则用来降低卷积层对位置的敏感性。卷积层块由两个这样的基本单元重复堆叠构成。在卷积层块中,每个卷积层都使用5 X 5 的窗口,并在输出上使用sigmoid激活函数。第一个卷积层输出通道数为6,第二个卷积层输出通道数则增加到16。这是因为第二个卷积层比第一个卷积层输入的高和宽要小,所以增加输出通道使两个卷积层的参数尺寸类似。卷积层块的两个最大池化层的窗口形状为2 X 2,且步幅为2。由于池化窗口与步幅形状相同,池化窗口在输入上每次滑动所覆盖的区域互不重叠。
卷积层块的输出形状为(批量大小,通道,高,宽)。当卷积层块的输出传入全连接层块时,全连接层块会将小批量中每个样本变平(flatten)。也就是说,全连接层的输入形状将变为二维,其中第一维是小批量中的样本,第二维是每个样本变平后的向量表示,且向量长度为通道、高和宽的乘积。全连接层块含三个全连接层。它们的输出个数分别为120、84和10,其中10为输出的类别个数。

4 AlexNet
2012年,AlexNet横空出世。这个模型的名字来源于论文第一作者的姓名Alex Krizhevsky。AlexNet使用了8层卷积神经网络,并以很大的优势赢得了ImageNet2012图像识别挑战赛。它首次证明了学习到的特征可以超越手工设计的特征,从而一举打破计算机视觉的研究前状。
阿里云天池零基础入门CV赛事(5)——卷积神经网络_第6张图片
AlexNet与LeNet的设计理念非常相似,但也有显著的区别。
第一,与相对较小的LeNet相比,AlexNet包含8层变换,其中5层卷积和2层全连接隐藏层,以及1个全连接输出层。
AlexNet第一层中的卷积窗口形状是11 X 11。因为ImageNet中绝大多数图像的高和宽均比MNIST图像的高和宽大10倍以上,ImageNet图像的物体占用更多的像素,所以需要更大的卷积窗口来捕捉物体。第二层中的卷积层窗口减小到5 X 5,之后全采用3 X 3。此外,第一、第二和第五层卷积层之后都使用了窗口形状为3 X 3、步幅为2的最大池化层。而且,AlexNet使用的卷积层通道数也大于LeNet中的卷积通道数数十倍。
紧接着最后一个卷积层的两个输出个数为4096的全连接层。这两个巨大的全连接层带来将近1GB的模型参数。由于早期显著的限制,最早的AlexNet使用双数据流的设计使用一个GPU只需要处理一般的模型。幸运的是,显存在过去几年得到了长足的发展,因此通常我们不在这样特别设计了。
第二、AlexNet将sigmoid激活函数改成了更加简单的ReLU激活函数。一方面,ReLU激活函数的计算更简单,例如它并没有sigmoid激活函数中的求幂运算。另一方面,ReLU激活函数在不同的参数初始化方法下使模型更容易训练。这是由于当sigmoid激活函数输出极接近0或1时,这些区域的梯度几乎为0,从而造成反向传播无法继续更新部分模型参数:而ReLU激活函数在正区间的梯度恒为1。因此,若模型参数初始化不当,sigmoid函数可能在正区间几乎为0的梯度,从而令模型无法得到有效的训练。
第三、AlexNet通过丢弃法来控制全连接层的模型复杂度。而LeNet并没有使用丢弃法。
第四、AlexNet引入了大量的图像增广,如翻转、裁剪和颜色变化,从而进一步扩大数据集来缓解过拟合。

5 GoogleNet
GoogLeNet中的基础卷积块叫作Inception块。
阿里云天池零基础入门CV赛事(5)——卷积神经网络_第7张图片
由图可以看出,Inception块里有4条并行的线路。前3条线路使用窗口大小分别是 1 X 1、3 X 3 和 5 X 5的卷积层来抽取不同空间尺寸下的信息,其中中间2个线路会对输入先做1 X 1卷积来减少输入通道数,以降低模型复杂度。第四条线路则使用3 X 3最大池化层,后接1 X 1卷积层来改变通道数。4条线路都使用了合适的填充来使输入与输出的高和宽一致。最后我们将每条线路的输出在通道维上连结,并输入接下来的层中去。

GoogleNet模型

第一模块使一个个64通道的7 X 7卷积层。
第二模块使用2个卷积层:首先是64通道的1 X 1卷积层,然后是将通道增大3倍的3 X 3卷积层。它对应Inception块中的第二条线路。
第三模块串联 2 个完整的 Inception 块。第一个 Inception 块的输出通道数为64+128+32+32=256,其中4条线路的输出通道数比例为64:128:32:32 = 2:4:1:1 。其中第二、第三条线路先分别将输入通道数减小至96/192=1/2和16/192=1/12 后,再接上第二层卷积层。第二个Inception块输出通道数增至128+192+96+64=480,每条线路的输出通道数之比为128:192:96:64=4:6:3:2 。 其 中 第 二、 第 三 条 线 路 先 分 别 将 输 入 通 道 数 减 小至128/256=1/2和32/256=1/8 。
第四模块更加复杂。它串联了5个Inception块,其输出通道数分别是 192+208+48+64=512、160+224+64+64=512、128+256+64+64=512 、122+288+64+64=528、256+320+128+128=832。这些线路的通道数分配和第三模块中的类似,首先含3 X 3卷积层的第二条线路输出最多通道,其次是仅含1 X 1卷积层的第一条线路,之后是含5 X 5卷积层的第三条线路和含3 X 3最大池化层的第四条线路。其中第二、第三条线路都会先按比例减小通道数。这些比例在各个Inception块中都略有不同。
第五模块有输出通道数为256+320+128+128=832和384+384+128+128=1024的两个Inception块。其中每条线路的通道数的分配思路和第三、第四模块中的一致,只是在具体数值上有所不同。需要注意的是,第五模块的后面紧跟输出层,该模块同NiN一样使用全局平均池化层来将每个通道的高和宽变成1。最后我们将输出变成二维数组后接上一个输出个数为标签类别数的全连接层。

总有一个遗忘的过程,记录一下为以后查找方便。

你可能感兴趣的:(神经网络,计算机视觉)