VGG16论文链接: https://arxiv.org/abs/1409.1556 收录于ICLR2015
网络结构和配置:
作者在这篇论文中主要探讨的是使用非常小的卷积核(3*3)来增加卷积神经网络的深度对于性能有很大的提升。如Table 1所示,作者设置了A-E五种卷积神经网络配置来探讨深度对于性能的影响。结构D和E就是我们熟知的VGG16(13个卷积层+3个全连接层)和VGG19(16个卷积层+3个全连接层)。PS:层数是没有包含maxpool的
这些网络都遵循一种通用的设计,输入到网络的是一个固定大小的224*224的RGB图像,所做的唯一预处理是从每个像素减去基于训练集的平均RGB值。图像通过一系列的卷积层时,全部使用3*3大小的卷积核。只有在配置C中,作者使用了1*1的卷积核,这可以被看作是输入通道的线性映射(接着是非线性)。卷积的步长均为1,padding也为1。每个网络配置都是5个最大池化层,最大池化的窗口大小为2*2,步长为2。
卷积层之后是三个完全连接(FC)层:前两层有4096个通道,第三个层执行的是1000路ILSVRC分类,因此包含1000个通道(每个类一个)。最后一层是softmax层。在A-E所有网络中,全连接层的配置是相同的。
所有的隐藏层都用Relu方法进行校正,只有结构A-LRN包含Local Response Normalisation(LRN)。这种规范化不会提高ILSVRC数据集的性能,但会增加内存消耗和计算时间。
卷积层的宽度(即每一层的通道数)的设置是很小的,从第一层64开始,按照每过一个最大池化层进行翻倍,直到到达512。在Table 1中,conv(感受野的大小)-(通道的数量),如conv3-64指的是卷积核大小为3*3,通道数量为64。
讨论:
与此前的AlexNet第一层卷积核11*11步长为4,ZF-net中卷积核7*7步长为2相比,作者在整个网络中都使用了很小的卷积核3*3步长为1。实际上两个3*3的卷积层(中间不含池化)的堆叠相当于拥有5*5大小的感受野,三个这样的层堆叠相当于拥有7*7大小的感受野,如图2所示。那为什么要用三个3*3的卷积层代替一个7*7的卷积层呢?首先,采用三个非线性校正层(Relu)代替一个校正层,可以使决策函数更具有判别性。其次,可以减少参数的数量:假设三层3*3卷积核堆叠的输入输出是C个通道,那么权重的参数为3x(3^2C^2)=27C^2,而如果是一个7*7的卷积层,那么参数量是7^2C^2=49C^2,因此参数量减少了。
VGG16参数量计算:
下面这张图大致画了一下输入,第一个卷积层,到第一个卷积层输出的特征图:
下面这张图是根据CS231n的课程我进行的手动计算。计算内存参数量时考虑的是特征图的大小(宽*高*通道数),计算权重参数量时考虑的是卷积核的参数(卷积核的size*输入通道数*输出通道数),其中输出通道数其实就是卷积核的个数。
在计算全连接层的参数量时,可以去看看下面这两篇对于全连接层的讲解:
对全连接层(fully connected layer)的通俗理解:https://blog.csdn.net/qq_39521554/article/details/81385159
CNN 入门讲解:什么是全连接层(Fully Connected Layer)?https://zhuanlan.zhihu.com/p/33841176
对前层是全连接的全连接层可以转化为卷积核为1x1的卷积;而前层是卷积层的全连接层可以转化为卷积核为hxw的全局卷积,h和w分别为前层卷积结果的高和宽。
来源:CSDN
作者:luolan9611
链接:https://blog.csdn.net/luolan9611/article/details/104799515