一.VGG原理
VGG16相比AlexNet的一个改进是采用连续的几个3x3的卷积核代替AlexNet中的较大卷积核(11x11,7x7,5x5)。对于给定的感受野(与输出有关的输入图片的局部大小),采用堆积的小卷积核是优于采用大的卷积核,因为多层非线性层可以增加网络深度来保证学习更复杂的模式,而且代价还比较小(参数更少)。
在VGG中使用了2个3x3卷积核来代替5x5卷积核,使用了3个3x3卷积核来代替7x7卷积核,这样在相同感受野的条件下,提升了网络的深度,同时也减少了参数。下面给出一幅图来加深理解:
这里为什么使用2个3x3卷积核可以代替5*5卷积核呢?我们结合上图右半部分理解
5x5卷积看做一个小的全连接网络在5x5区域滑动,我们可以先用一个3x3的卷积滤波器卷积,然后再用一个全连接层连接这个3x3卷积输出,这个全连接层我们也可以看做一个3x3卷积层。这样我们就可以用两个3x3卷积级联(叠加)起来代替一个 5x5卷积。
然后两个3x3相比于1个5x5多了一次非线性变换,所以说VGG在相同感受野的条件下提升了网络深度。
再解释一下这里参数为什么降低28%
假设我们输入和输出通道数都是一样的(方便约值)
对于5x5的卷积核来说,就有5x5=25,对于2个3x3的卷积核来说就有2x3x3=18,所以降低了的参数百分比就是7/25=28%
ps:这里仅以1个5x5=2个3x3为例
二.VGGNet结构
输入是大小为224x224的RGB图像,预处理(preprocession)时计算出三个通道的平均值,在每个像素上减去平均值(处理后迭代更少,更快收敛,加速网络训练)。
图像经过一系列卷积层处理,在卷积层中使用了非常小的3x3卷积核,在有些卷积层里则使用了1x1的卷积核(在全连接层之间用的是1x1的卷积操作)。
卷积层步长(stride)设置为1个像素,3x3卷积层的填充(padding)设置为1个像素。池化层采用max pooling,共有5层,在一部分卷积层后,max-pooling的窗口是2x2,步长设置为2。
卷积层之后是三个全连接层(fully-connected layers,FC)。前两个全连接层均有4096个通道,第三个全连接层有1000个通道,用来分类。所有网络的全连接层配置相同。
全连接层后是Softmax,用来分类。
所有隐藏层(每个conv层中间)都使用ReLU作为**函数。VGGNet不使用局部响应标准化(LRN),这种标准化并不能在ILSVRC数据集上提升性能,却导致更多的内存消耗和计算时间(LRN:Local Response Normalization,局部响应归一化,用于增强网络的泛化能力)。
三.VGG网络结构
VGG中较常用的是VGG16和VGG19
VGG16包含了16个隐藏层(13个卷积层和3个全连接层),如上图中的D列所示
VGG19包含了16个隐藏层(16个卷积层和3个全连接层),如上图中的E列所示
VGG网络的结构非常一致,从头到尾全部使用的是3x3的卷积和2x2的max pooling。
参考:
链接: 一文读懂VGG网络-知乎.
链接: VGG Net学习笔记.
链接: VGG Net学习总结.