VGG:VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION论文笔记

论文地址:Very Deep Convolutional Networks for Large-Scale Image Recognition

前言

VGG模型在ILSVRC2014上大放异彩,虽然从VGG的诞生到现在已经2年多,但是它依然是目前最热门的模型网络之一。它最大的贡献是,将深度学习从AlexNet的时代推入到deeper model的时代,第一次将模型深度提高到16层以上(当然还有同年的GoogLeNet),也使得在识别和定位等任务上的性能得到大幅度的提高,今天我们就来看看它到底是如何实现的吧。

思想

思想核心——模型深度。作者希望通过堆叠更多的卷积层来增加网络的深度,以提高模型的性能。但是如果只在原始的较浅层模型上简单的通过复制权重层来堆叠,势必会出现参数量过大,模型过复杂,模型的优化求解更难。因此,必须要改进。

改进

既然增加了模型的深度而又不想过分的增加计算复杂度,那就只有以平衡的角度,从模型的宽度着手。作者提出两个 3×3 卷积层的堆叠与一个 5×5 的卷积层具有相同的reception field,三个 3×3 卷积层的堆叠与一个 7×7 的卷积层具有相同的reception field。这样的话,就可以将原始网络中的 7×7 5×5 换成多个 3×3 的堆叠就可以达到同样的效果,并且模型的深度也加深了。

而且换成多个 3×3 的好处就是,参数量大大减少了,例如:假设三个 3×3 卷积层堆叠的输入和输出都有 C 个通道,因此这个堆叠含有 3(32C2)=27C2 个权重;而一个单一的 7×7 卷积层却需要 72C2=49C2 个参数。还有另外一个好处就是,每一个卷积层后都跟有一个非线性修正层(ReLU),因此随着卷积层数的增加,模型的判别性也增加了。

其实同年的GoogLeNet使用了类似的思想和改进,它也是使用了更深的层次和更小的卷积层,只不过具体的实现方式有所不同,之后我们会专门对GoogLeNet进行一个学习。

模型结构

VGG:VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION论文笔记_第1张图片
作者提出了6中模型配置,深度逐渐增加。

模型训练

作者通过实验发现,虽然VGG模型具有更多的参数,和更深的层次,但是模型的训练只花费了较少的epoch。作者认为,这是因为:(a) 更深的深度和更小的卷积滤波器尺寸隐式的增强了正则化;(b) 某些层执行了预初始化。

作者的预初始化方式为:先从训练配置A开始(上图),它足够浅以致于能够使用随机初始化进行训练。然后在训练更深的结构时,对前四个卷积层和最后三个全连接层使用网络A来初始化,而中间层使用随机初始化。

作者在模型训练时,使用了Multi-scale的训练:把原始图像缩放到最小边S不小于224,然后在整幅图像上提取224*224片段来进行训练。两种方案:
方案1:所有图像上固定S,分别设置S=256,和S=384,然后进行裁切来训练两个模型,使用两种模型来评估。
方案2:对于每一幅图像,在[Smin,Smax]中随机选取一个S,然后在进行裁切来训练模型,这种训练方式相当于使用了尺寸抖动(scale jittering)的数据增强,可以使用一个单一的模型来对多尺寸图像进行识别。

模型测试

在测试阶段,作者将最后三个全连接层换成了一个 7×7 和两个 1×1 的卷积层(dense)。因为卷积层时slide window,因此无需对图像进行裁切。但是参考GoogLeNet使用的多裁切,作者认为多裁切和dense是互补的。因此作者依然使用了3中尺寸的裁切,每种尺寸50张图像的评估方式。

实验结果

VGG:VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION论文笔记_第2张图片
VGG:VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION论文笔记_第3张图片
从单一测试尺寸和多种测试尺寸上来看,模型D、E使用第二种multi-scale training的效果更好。

VGG:VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION论文笔记_第4张图片
而在评估时也发现,multi-crop与dense确实能起到互补的效果。

在使用convnet fusion的essemble模型时,确实能够和GoogLeNet达到旗鼓相当的水平。

总结

作者通过使用非常深的模型在分类任务和定位任务上取得了非常好的效果,证明了模型深度对模型性能的重要性,使得深度成为了后续更优秀模型的目标,也是非常值得我们去学习和研究的内容。

你可能感兴趣的:(deeplearning,论文,论文笔记)