简介:VGG模型是2014年ILSVRC竞赛的第二名,第一名是GoogLeNet。但是VGG模型在多个迁移学习任务中的表现要优于GoogLeNet。
结构如下图所示:
ABSTRACT:
作者研究了网络深度对模型性能的影响,主要是采用很小的(3x3)卷积核对不断增加深度的网络进行了评估,发现将深度增加到16-19能够实现对现有技术配置的显著改进。
1 INTRODUCTION
没啥好讲的
2 CONVNET CONFIGURATIONS
2.1.ARCHITECTURE
输入224x224的RGB图像来进行训练。做的唯一预处理是将每个像素减去从训练集上计算得到的RGB均值。这个图像会通过五个vgg块(从上图可以看出,一共有6列,即6个不同深度的vgg网络,它们都包含五个vgg块,每个vgg块都包含至少一个卷积层),使用的卷积核都是很小的3x3的(这是最小的能捕捉上、下、左、右、中位置的特征的卷积核),但在C这个16层深度的配置中也用到了1x1的卷积核,可以看作是输入通道的线性变换。卷积核的步幅(stride)为1,并使用了填充(padding)1,所以经过卷积后数据的分辨率任保持不变。在每个vgg块后都有一层最大池化层(max-pooling),它的窗口为2x2,步幅为2。五个vgg块后就是三层全连接层和一层softmax,图中很容易看出来。
另外在每个隐藏层后都配置了ReLU激活函数。图中可以看出除了A-LRN,其余几个都没有使用LRN(局部响应归一化),作者说是因为LRN不能提高模型在ILSVRC数据集上的性能,而且会增加内存消耗和计算时间,实验数据也可以看到A-LRN并没有比A好,所以BCDE均没有使用LRN。
2.2.CONFIGURATIONS
VGG配置表即为上面那张图,一共六列,即6个不同深度的vgg网络,名字分别为A(11层),A-LRN(11层),B(13层),C(16层),D(16层),E(19层),层数为卷积层和全连接层的总和。
2.3 DISCUSSION
VGG使用的卷积核不像之前比赛中表现最好的作品一样使用大的卷积核,比如11x11,7x7的。VGG使用的是小的3x3的卷积核(步幅为1)对每个像素的输入进行卷积运算。并且两层3x3的卷积层的有效感受野就是5x5,三层3x3的卷积层的有效感受野就是7x7。为什么可以这样替代呢?
以上图来讲,5x5的区域使用3x3的卷积核进行卷积后,得到3x3的输出,再用一层3x3的卷积进行卷积,最终得到1x1的输出,所以对5x5的区域进行两次3x3卷积后,得到的结果与一次5x5卷积后的结果都是1x1的。然后2次3x3卷积所需的参数为233=18,而一次5x5需要55=25的参数。相同3次3x3需要333-27的参数,而一次7x7则需要77=49的参数。所以使用3x3的卷积来替代还达到了减少参数数量的作用。
最后讲一下1x1卷积核的作用:
1.升维和降维,1x1卷积核可以使网络更深。如果在进行3x3或5x5卷积前先用1x1卷积进行降维,可以达到减少参数数量的效果,并且模型性能不会降低。如果进行升维,可以在不改变特征图尺寸的情况下,增加通道数量。
2.跨通道信息交互,用1x1卷积可以在不改变特征图尺寸的情况下实现各个通道之间的线性组合,也就是每个通道相同位置像素之间的线性组合。
3,增加非线性特征,在使用1x1卷积后,再加上非线性的激活函数,就大幅增加了非线性特征。
所以用1x1卷积实现降维可以减少参数数量,如果升维可以拓展特征图通道数,并且在不改变特征图尺寸的情况下,实现各通道之间的线性组合(即各通道对应相同位置像素的线性组合),然后经过激活函数,增加非线性特征。