1.4 经典网络
受到ILSVRC(ImageNet Large-Scale Visual Recognition Challenge)比赛(ImageNet比赛)的促进,自2012年的比赛之后诞生了一系列的经典网络,这些经典网络被广泛用于计算机视觉任务的开发。本节将对常用的经典网络AlexNet、VGG、GoogLeNet、ResNet和MobileNet进行介绍。
1.4.1 AlexNet
2012年,对ILSVRC比赛来说是不平凡的一年,在这一年的比赛中AlexNet凭借深度学习的方法将top-5的分类误差记录降到了15.3%,第二名的成绩为26.2%,自此掀起了深度学习研究的热潮。
AlexNet的网络结构如图1.11所示。
图1.11
AlexNet的网络结构分为上下两个部分,原因是当时使用两个GPU(图形处理器)进行训练,两个GPU上的训练只在特定的节点上有连接。该网络输入图像的大小为224×224×3,包含8个层,其中5个卷积层和3个全连接层。
AlexNet网络的深入研究可以参考论文ImageNet Classification with Deep Convolutional Neural Networks。
在上述论文中还使用了很多的算法技巧,这些技巧在后来的算法研究中有着重要的作用,如ReLU激活函数、数据增强、Dropout等。另外,局部响应归一化(Local Response Normalization,LRN)和重叠池化(Overlapping Pooling)也是该论文的创新点,这些在后续的算法研究中用得较少。
1.4.2 VGG
VGG是由牛津大学Visual Geometry Group组在2014年提出的,算法的名字也由此而来。VGG的提出证明了网络深度的增加可以提升网络的性能。VGG常用的网络结构有两种:VGG-16和VGG-19,网络结构在本质上没有差异,只是网络的深度不一样。
VGG相比以前的网络有一个重要的改进,使用连续的小的卷积核代替较大的卷积核,如使用两个3×3的卷积核代替一个5×5的卷积核。这种替换不仅可以增加网络的深度,还可以显著地减少网络的计算量,对性能的提升有较大作用。
VGG的网络结构如图1.12所示。图1.12中D列所示为VGG-16,该网络包含16个隐藏层,其中13个卷积层和3个全连接层;E列所示为VGG-19,该网络包含19个隐藏层,其中16个卷积层和3个全连接层。VGG中的卷积都是采用3×3的卷积核,池化使用的是kernel大小为2×2的最大池化操作。
图1.12
VGG 网络是很多算法中特征提取的主干网络(backbone),具有重要的意义,但是 VGG 的显著缺点是参数量很大,需要耗费较大的计算资源,参数量很大部分来源于3个全连接层,所以将VGG作为特征提取网络时,常用的做法是只使用网络的卷积部分。
VGG网络的深入研究可以参考论文Very Deep Convolutional Networks for Large-Scale Image Recognition。
1.4.3 GoogLeNet
GoogLeNet是2014年ILSVRC比赛的冠军,由Google团队提出。GoogLeNet的命名方式也是对LeNet-5网络的致敬。GoogLeNet网络有22层,采用模块化设计,引入Inception结构,如图1.13所示。用户可以参考论文Going Deeper with Convolutions深入了解GoogLeNet的结构。
图1.13
图1.13(a)所示为原生的 Inception 结构,为了得到不同的感受野,使用不同的卷积核;通过将不同的卷积核的结果进行拼接来使用不同尺度的特征;因为增加池化有助于提升模型效果,所以增加池化后再进行特征的拼接。
图1.13(b)所示为降维的Inception结构,使用卷积核大小为1×1的卷积进行降维,减少参数量,Inception结构的使用使GoogLeNet的参数量相对于VGG的参数量显著减少。
上面介绍的Inception结构被称为Inception-v1,Google团队后面陆续推出了Inception-v2、Inception-v3和Inception-v4。
Inception-v2 和 Inception-v3 可以参考论文 Rethinking the Inception Architecture for Computer Vision进行了解,该论文将5×5的卷积核用两个3×3的卷积核替换,n×n的卷积核用1×n和n×1的卷积核替换。Inception-v4可以参考论文Inception-v4, Inception-ResNet and the Impact of Residual Connectionson Learning进行了解,该论文对Inception-v4引入了残差连接。
1.4.4 ResNet
在深度学习算法的研究过程中发现增加模型的深度和宽度可以有效地提升其精度。但是当模型深度增加到一定的程度后,训练过程中的loss不会继续下降,而且继续增加深度,训练的loss反而会上升,这种现象称为网络退化。如图1.14所示,56层的网络的训练误差和测试误差比20层的网络的训练误差和测试误差更大。
图1.14
这种网络退化并不是过拟合导致的,因为在过拟合时网络的训练loss会一直下降,而测试loss则没有同步下降。残差网络就是为了解决网络退化现象而研究出来的。图1.15所示为残差块的基本结构。
图1.15
如图1.15所示,残差块是在网络结构的基础上增加了残差连接,将低层特征引入高层,这样可以有效地解决网络退化的问题。图1.16所示是论文作者在 ImageNet 上训练的模型结果对比,左图是普通网络的训练结果,右图是残差网络的训练结果。
图1.16
由图1.16的对比可以看到,普通网络出现了网络退化现象,而残差网络则有效解决了这个问题。
通过使用残差块,论文作者设计了ResNet-50、ResNet-101和ResNet-152,增加了网络的深度,从而提升了精度,而且152层的残差网络的参数量比VGG-16和VGG-19小很多。
ResNet的深入研究可以参考论文Deep Residual Learning for Image Recognition。
1.4.5 MobileNet
MobileNet为Google推出的轻量级算法网络,目的是将深度学习应用于移动端和嵌入式端,该算法包括3个版本:MobileNet-v1、MobileNet-v2和MobileNet-v3。
1.MobileNet-v1
MobileNet-v1的最大亮点在于使用深度可分离卷积代替了普通卷积,大幅减少了参数计算量。图1.17所示为普通卷积和深度可分离卷积的结构对比。
图1.17
图1.17中左图为普通卷积单元,包括一个3×3卷积、BN(BatchNorm)、ReLU;右图为深度可分离卷积单元,包括 Depthwise 卷积(3×3 卷积、BN、ReLU)和 Pointwise 卷积(1×1卷积、BN、ReLU)两个部分。两个部分的详细计算如图1.18所示。
图1.18
输入特征图的尺寸为DF×DF×M(如512×512×3),卷积核的尺寸为DK×DK×N(如3×3×32)。普通卷积计算是将N个卷积核中的每个卷积核与M个输入特征图卷积后的结果相加得到N个特征图,计算量为DF×DF×M×DK×DK×N(即512×512×3×3×3×32),DF为特征尺寸。
图1.18中Depthwise卷积计算为卷积核对输入特征图做卷积,并不将其连接起来(特征图相加)产生新的特征图,因此计算量为DF×DF×M×DK×DK。图1.18中Pointwise卷积使用1×1的卷积核产生新的卷积核,改变卷积的通道数,计算量为DF×DF×M×N。
因此深度可分离卷积的计算量为DF×DF×M×DK×DK+DF×DF×M×N,计算量大约为普通卷积的1/8~1/9,精度只有较小的损失。
MobileNet-v1的网络基于深度可分离卷积单元搭建,结构设计没有特别之处,用户若想深入研究该算法,可以参考论文MobileNets:Efficient Convolutional Neural Networks for Mobile Vision Applications。
2.MobileNet-v2
MobileNet-v2网络也是由Google提出的,该算法的创新之处在于引入了Linear Bottleneck和Inverted Residuals。
在MobileNet-v2中引入Linear Bottleneck,作用是减少使用ReLU非线性激活导致有用信息被破坏的情况的发生,对提升模型效果有一定的帮助。
MobileNet-v2中引入的Inverted Residuals也属于残差连接,和普通残差连接相比,Inverted Residuals 采用的残差单元结构为两边窄、中间宽,并且使用深度可分离卷积代替普通卷积,两者的比较如图1.19所示。图1.19(a)图为残差模块(Residual Block),图1.19(b)图为逆残差模块(Inverted Residual Block),块的厚度代表通道数量的多少。
图1.19
MobileNet-v2网络的深入研究可以参考论文MobileNetv2:Inverted Residuals and Linear Bottlenecks。
3.MobileNet-v3
MobileNet-v3较前两个版本做了一系列的改进,在精度上有了较大的提升,而且较大幅度地降低了耗时,该算法的主要创新包括以下几点。
(1)引入SE(Sequeeze and Excite)模块。SE模块是一种轻量级的通道注意力模块,结构如图1.20所示。
图1.20
该设计是在Depthwise卷积之后,接入池化层,然后经过第一个全连接层,将通道数缩减为原来的1/4,又经过第二个全连接层,将通道数扩张4倍变为和原来一样,然后计算Pointwise卷积。该设计不会增加耗时,却可以提升精度。
(2)引入网络结构搜索(Network Architecture Search,NAS),搜索网络的配置和参数。
(3)修改网络的尾部结构,修改后减少了3个耗时的层,却没有降低模型的精度。修改前后的尾部结构对比如图1.21所示,上图为原来的尾部结构,下图为新的尾部结构。
图1.21
(4)引入H-Swish激活函数替代Swish激活函数,可以有效地减少耗时。
论文作者在提出 MobileNet-v3 时,根据可用资源的情况设计了两种 MobileNet-v3 结构:MobileNetV3-Large和MobileNetV3-Small,两种结构在耗时和精度上均优于MobileNet-v2。
如果想进一步了解MobileNet-v3的细节,可以参考论文Searching for MobileNetV3。