1. VGG-Net网络的特点
自从AlexNet在ILSVRC2012上面大放光芒之后,接下参加ImageNet竞赛的所有top模型基本上都采用了CNN网络架构。CNN网络架构在2013年没有很大的进展,其中相对引人注目的一个模型被称为ZF-Net,来自下面这篇论文:
这篇论文的亮点是做了一些CNN网络中各个卷积层feature map的可视化工作,试图解释不同深度/level的卷积层到底学习到了图像内容的哪些特征,探究CNN从低层到高层是如何一步步先提取图像的低级特征,然后对低级特征进行组合,进而得到更加抽象的高级语义特征的。
但从网络结构上来说,ZF-Net没什么亮点,只是对AlexNet进行了小修小补(比如把AlexNet第一个卷积层kernel=11x11/s=4改为kernel=7x7/s=2),最终在ImageNet分类竞赛上面的top-5准确率,也只从AlexNet的16.4%提升到ZF-Net的14.8%。
而在接下来的2014年,CNN网络架构设计迎来了第二次爆发,代表性的两个模型是VGG-Net和GoogleNet。这一节介绍VGG-Net。
VGG-Net这篇论文的主要亮点有:
- 通过详细的对比试验,探究了在统一的CNN网络架构下,不同深度的卷积层对CNN网络性能的影响;
- 卷积层全部使用了3X3的卷积核,组成了一个相当优雅的网络结构,并指出了小的卷积核的优势;
- 从CNN分类网络构成思想来看,VGG-Net延续了包括LeNet-5、AlexNet以及ZF-Net在内的一贯作风,即卷积层+全连接层的网络组成,一系列卷积层用于提取图像特征,最后使用3个全连接层/MLP用作分类器,并且将这一构成模式发挥到了极致,通过后面我们对NIN/Inception/ResNet的分析中将会看到,全连接层的使用会大大增加CNN分类模型的空间复杂度(正比于模型参数数量,也可以从模型文件的大小来理解),对于分类网络来说,使用全局平均池化(global average pooling)层代替全连接层是更优的选择。
VGG-Net总共包含了5个版本ABCDE,每个版本的网络结构如下表所示:
VGG-Net网络设计的特点如下:
所有VGG-Net版本在全连接层部分完全相同,所有卷积层完全相同:kernel=3x3,padding=1,stride=1,这样造成的结果是,卷积前后图像/feature map的尺寸保持不变。通过5个kernel=2x2,stride=2的最大池化层来逐渐减小feature map的分辨率;
5个VGG-Net版本,从A-E,通过逐渐增加卷积层,使得模型的性能逐渐提升,很好地验证了CNN网络的深度/depth对网络性能的影响,网络越深,模型性能越好;
-
全程使用3x3的小卷积核,是VGG-Net的另一大特点,我们知道,对于感受野来讲,2个3x3卷积相当于1个5x5卷积操作,3个3x3卷积相当于1个7x7卷积,那3个3x3卷积相比于1个7x7卷积有什么优势呢?具体包含两个优点:
- 第一点,3个3x3卷积包含了3个Relu非线性层,1个7x7卷积只有一个Relu非线性层,显然3个Relu层能使得学习到的决策函数的识别能力更强;
- 第二点,3个3x3卷积相比于1个7x7卷积,包含了更少的模型参数。假设输入层和输出层的通道数都为C,3个3x3卷积总共包含3x3x3xCxC=27C2个权重参数,而1个7x7卷积包含7x7xCxC=49C2个权重参数,多了81%,更少的权重参数,使得模型更不容易过拟合(over-fitting)。
VGG-Net也有一个缺点,就是网络的模型参数很多,下图是VGG-Net的5个版本的模型参数量:
其中用的最多的是VGG-Net的D版本,习惯上称为VGG16,因为它包含16个权重层。后面我们会知道,VGG-Net的空间复杂度基本上是主流的CNN分类模型中最大的之一。
- 另外,关于VGG-Net的模型的数据增强,训练策略,以及测试时的多尺度/裁剪策略等,不是这一系列文章的重点,感兴趣可以看论文中的细节,我们重点是学习总结每个经典CNN网络的架构设计特点。
2. 总结
VGG-Net延续了分类网络中,卷积层+全连接层的设计特点,全程采用了非常小的3x3卷积核,通过实验,不断加深卷积层的数目,得到了一个结构优雅,同时性能强大的经典CNN模型(唯一的缺点是模型复杂度很大),值得一提的是,虽然VGG16在2014年的ImageNet分类竞赛中不敌GoogleNet只得了亚军,但那是多个模型融合后的结果,单个模型的性能的话,VGG16是比GoogleNet强的。这也侧面地证明了VGG卷积架构的优异性。
因此在随后几年,其他领域比如目标检测、场景文本检测以及风格迁移,很多经典模型都使用了VGG16的卷积部分作为特征提取主干网络。