VGGNet由牛津大学的视觉几何组(Visual Geometry Group)提出,并在2014年举办的ILSVRC(ImageNet 2014比赛)中获得了定位任务第1名和分类任务第2名的好成绩,(GoogleNet 是2014 年的分类任务第1 名)。虽然VGGNet在性能上不及GoogleNet,但因为VGG结构简单,应用性强,所以很多技术人员都喜欢使用基于VGG 的网络。VGG论文Very deep convolutional networks for large-scale image recognition,有兴趣的同学可以看下。
VGG 最大的特点就是通过比较彻底地采用 3x3 尺寸的卷积核来堆叠神经网络,这样也加深整个神经网络的深度。这两个重要的改变对于人们重新定义卷积神经网络模型架构也有不小的帮助,至少证明使用更小的卷积核并且增加卷积神经网络的深度,可以更有效地提升模型的性能。
VGG 选择的是在 AlexNet 的基础上加深它的层数,但是它有个很显著的特征就是持续性的添加 3x3 的卷积核。而AlexNet 有 5 层卷积层,从下面的网络结构图我们可以看出来,VGG 就是针对这 5 层卷积层进行改造,共进行了 6 种配置。
这六种配置的参数量:
这六种配置的效果展示图:
从上面的效果图中,我们发现VGG19是最好的。但是,VGG-19 的参数比 VGG-16 的参数多了好多。由于VGG-19需要消耗更大的资源,因此实际中VGG-16使用得更多。而且VGG-16网络结构十分简单,并且很适合迁移学习,因此至今VGG-16仍在广泛使用,下面我们主要来讨论一下VGG16的网络结构,也就是图中的类型D。(VGG19即上面的E类型)
VGG16相比AlexNet的一个改进是采用连续的3x3的卷积核代替AlexNet中的较大卷积核(11x11,7x7,5x5),如下图中所示,共有13个卷积层,3个全连接层。其全部采用3*3卷积核,步长统一为1,Padding统一为1,和2*2最大池化核,步长为2,Padding统一为0。
那么,就让我们一层一层来分析吧!
(1)INPUT层:VGG16卷积神经网络默认的输入数据必须是维度为224×224×3的图像,和 AlexNet一样,其输入图像的高度和宽度均为224,而且拥有的色彩通道是R、G、B这三个。
(2)CONV3-64:使用的卷积核为(3*3*3)*64
(卷积核大小为3*3,输入通道为3,输出通道为64),步长为1,Padding为1。通过套用卷积通用公式,可以得到最后输出的特征图的高度和宽度均为224,即 224 = 224 − 3 + 2 1 + 1 224=\frac{224-3+2}{1}+1 224=1224−3+2+1 ,最后输出的特征图的维度为224×224×64。卷积通用公式参考我的博客神经网络之多维卷积的那些事中卷积中的特征图大小计算方式。
(3)CONV3-64:使用的卷积核为(3*3*64)*64
,步长为1,Padding为1。通过套用卷积通用公式,可以得到最后输出的特征图的高度和宽度均为224,即 224 = 224 − 3 + 2 1 + 1 224=\frac{224-3+2}{1}+1 224=1224−3+2+1 ,最后输出的特征图的维度为224×224×64。
(4)Max pool:池化核大小为2×2,步长为2。通过套用池化通用公式,可以得到最后输出的特征图的高度和宽度均为112,即 112 = 224 − 2 2 + 1 112=\frac{224-2}{2}+1 112=2224−2+1 ,最后得到的输出的特征图的维度为112×112×64。
(5)CONV3-128:使用的卷积核为(3*3*64)*128
,步长为1,Padding为1。通过套用卷积通用公式,可以得到最后输出的特征图的高度和宽度均为112,即 112 = 112 − 3 + 2 1 + 1 112=\frac{112-3+2}{1}+1 112=1112−3+2+1 ,最后输出的特征图的维度为112×112×128。
(6)CONV3-128:使用的卷积核为(3*3*128)*128