1. 简介
2014年,Karen Simonyan, Andrew Zisserman在《Very Deep Convolutional Networks For Large-Scale Image Recognition》提出VGG-16,夺得ILSVRC 2014的亚军。VGG代表了牛津大学的Oxford Visual Geometry Group,该小组隶属于1985年成立的Robotics Research Group,该Group研究范围包括了机器学习到移动机器人。
VGGNet的两个特点:层数更深更宽、卷积核更小。
各个级别VGG的模型结构如下表所示,其下方为不同模型的参数数量。可以看到,虽然从A到E每一级网络逐渐变深,但是网络的参数量并没有增长很多,这是因为参数量主要都消耗在最后3个全连接层了。不过训练耗时的依然是卷积层,因为这部分计算量比较大。其中D,E分别为VGG16和VGG19。
VGGNet使用的全部都是3 × 3 的小卷积核和2 × 2 的池化核,通过不断加深网络来提升性能。其中经常出现多个完全一样的3 × 3 卷积层堆叠在一起的情况。两层3 × 3 的串联卷积结果相当于一个5 × 5的卷积,即最后一个像素会与周围5 × 5 个像素产生关联,可以说感受野大小为5 × 5 。而3层3 × 3 ×3的卷积核的串联结果则相当于1个7 × 7的卷积层。
除此之外,3个串联的3 × 3 卷积层的参数数量要比一个7x7卷积层的参数数量小得多,更少的参数意味着减少过拟合,而且更重要的是3个3 × 3 卷积层拥有比1个7 × 7 的卷积层更多的非线性变换,使得CNN对特征的学习能力更强。
2. 网络结构
VGG拥有5个卷积段,每一个卷积段有2-3个卷积层,同时每段的结尾都会连接一个最大池化层,来缩小图片尺寸。每段内的卷积核数量都一样,越靠后的段的卷积核数量越多:64 − 128 − 256 − 512 − 512
Layer Conv1-1:
输入:224 × 224 × 3
卷积核:3 × 3 ,步长1 1,padding1 ,深度64
输出:224 × 224 × 64
Layer Conv1-2:
输入:224 × 224 × 64
卷积核:3 × 3,步长1 ,padding1,深度64
输出:224 × 224 × 64
Layer POOL-1:
输入:224 × 224 × 64
卷积核:2 × 2 ,步长2,padding0,深度64
输出:112 × 112 × 64
Layer Conv2-1:
输入:112 × 112 × 64
卷积核:3 × 3 ,步长1 ,padding1 ,深度64
输出:112 × 112 × 128
Layer Conv2-2:
输入:112 × 112 × 128
卷积核:3 × 3 ,步长1,padding1 ,深度128
输出:112 × 112 × 128
Layer POOL-2:
输入:112 × 112 × 128
卷积核:2 × 2 ,步长2,padding0 ,深度128
输出:56 × 56 × 128
Layer Conv3-1:
输入:56 × 56 × 128
卷积核:3 × 3 ,步长1 ,padding1 ,深度256
输出:56 × 56 × 256
Layer Conv3-2:
输入:56 × 56 × 256
卷积核:3 × 3 ,步长1 ,padding1 ,深度256
输出:56 × 56 × 256
Layer Conv3-3:
输入:56 × 56 × 256
卷积核:3 × 3 ,步长1,padding1,深度256
输出:56 × 56 × 256
Layer POOL-3:
输入:56 × 56 × 256
卷积核:2 × 2 ,步长2 ,padding0 ,深度256
输出:28 × 28 × 256
Layer Conv4-1:
输入:28 × 28 × 256
卷积核:3 × 3 ,步长1,padding1 ,深度512
输出:28 × 28 × 512
Layer Conv4-2:
输入:28 × 28 × 512
卷积核:3 × 3,步长1,padding1 ,深度512
输出:28 × 28 × 512
Layer Conv4-3:
输入:28 × 28 × 512
卷积核:3 × 3 ,步长1 ,padding1 ,深度512
输出:28 × 28 × 512
Layer POOL-4:
输入:28 × 28 × 512
卷积核:2 × 2 ,步长2 ,padding0 ,深度512
输出:14 × 14 × 512
Layer Conv5-1:
输入:14 × 14 × 512
卷积核:3 × 3 3,步长1 ,padding1,深度512
输出:14 × 14 × 512
Layer Conv5-2:
输入:14 × 14 × 512
卷积核:3 × 3 ,步长1 ,padding1 ,深度512
输出:14 × 14 × 512
Layer Conv5-3:
输入:14 × 14 × 512
卷积核:3 × 3 ,步长1 ,padding1 ,深度512
输出:14 × 14 × 512
Layer POOL-5:
输入:14 × 14 × 512
卷积核:2 × 2 ,步长2 ,padding0,深度512
输出:7 × 7 × 512