CNN经典算法VGGNet介绍
本文是深度学习经典算法解读的一部分:https://www.datalearner.com/blog/1051558603213207
VGGNet(Visual Geometry Group)是2014年又一个经典的卷积神经网络。VGGNet最主要的目标是试图回答“如何设计网络结构”的问题。随着AlexNet提出,很多人开始利用卷积神经网络来解决图像识别的问题。一般的做法都是重复几层卷积网络,每个卷积网络之后接一些池化层,最后再加上几个全连接层。而VGGNet的提出,给这些结构设计带来了一些标准参考。
一、VGGNet的出发点
在VGGNet的论文中,作者主要探究了卷积网络深度的影响。其最主要的贡献是使用较小的卷积核,但较深的网络层次来提升深度学习的效果。在此之前,有很多研究者利用如较小的receptive window size和步长等技巧来提升网络效果。而在这边文章中,作者的主要目标是探索深度学习深度的影响。作者固定了网络中其他的参数,通过缓慢的增加网络的深度来探索网络的效果。
先前的网络使用的接受野都是较大的。例如AlexNet的第一层使用的是11x11、步长为4的卷积核扫描。而VGGNet全部使用很小的3x3、步长为1的卷积核来扫描输入。可以看到,如果将两个这样的卷积核堆起来,和5x5的卷积核效果一样,如果是三个堆叠,其效果等同于7x7。
这里解释一下,“堆叠”的意思是先用3x3扫描一次,再用3x3对结果继续扫描一次。所以,加入输入的长为n,那么3x3扫描一次的结果是(n-3)/1+1 = n-2,再扫描一次就是(n-2-3)/1+1=n-4。如果卷积核是5x5,那么扫描一次n的输入就是(n-5)/1+1 = n-4。其结果是一样的。VGGNet思想就是用更小更深的卷积核代替大的卷积核。
关于卷积核维度计算参考:深度学习卷积操作的维度计算
作者是这样解释为什么使用3个3x3卷积核堆叠代替一个7x7的卷积核的:首先,使用更深的层可以使得函数具有更好的分辨能力;其次,通过这样做也可以减少参数。例如,假设输入是C个通道的3x3的矩阵,那么堆叠3次3x3的卷积网络的参数是3(3^2C^2)=27C^2,而使用一个7x7的卷积核的参数是7^2C^2=49C^2。
在之前的论文中,也有人使用了较小的卷积核,但是他们的网络都比VGGNet的网络深度浅。
二、VGGNet的网络结构
VGGNet的网络结构如下:

从上图可以看到,A-E的网络深度都是越来越深的,其主要的区别在于网络深度。卷积层参数的含义是”conv(receptive filed size)-(number of channels)”。作者使用的激活函数是ReLU,表中为了简洁没有列出来了。表2列出了所有网络的参数数量。
三、VGGNet的特点
相比较而言,VGGNet的参数数量还是太多了,所以比较难以处理。但是,VGGNet提供了简单统一的网络结构标准,即所有的卷积核大小都是3x3的。而且manxpooling都是每2(也有3次的)次卷积之后进行一次,卷积核的数量在每次maxpooling之后都翻一倍。此外,VGGNet最重要的贡献是证明了分类任务可以通过使用小的卷积核增加CNN的深度来提高精度。。同时,作者公开了VGGNet的权重配置,它的预训练结果被用来处理很多任务。也作为特征抽取的基准被很多研究对比使用。
四、VGGNet预训练模型及代码资源
VGGNet被用来作为预训练也是广为人知的,下面列举几个预训练的模型。
Keras:https://gist.github.com/baraldilorenzo/07d7802847aaad0a35d3
Tensorflow: http://download.tensorflow.org/models/vgg_19_2016_08_28.tar.gz
PyTorch各种版本:https://chsasank.github.io/vision/_modules/torchvision/models/vgg.html
VGGNet代码:https://gist.github.com/baraldilorenzo/07d7802847aaad0a35d3
欢迎大家关注DataLearner官方微信,接受最新的AI技术推送
