VGGNet网络结构 论文地址:https://arxiv.org/pdf/1409.1556.pdf
VGGNet获得2014年ImageNet亚军,VGG是牛津大学 Visual Geometry Group(视觉几何组)的缩写,以研究机构命名。VGG在AlexNet基础上做了改进,整个网络都使用了同样大小的3*3卷积核尺寸和2*2最大池化尺寸,网络结果简洁。
整个网络的网络结构如图所示:
训练时,输入是大小为224*224的RGB图像,预处理只有在训练集中的每个像素上减去RGB的均值。
VGGNet成功地构筑了16~19层深的卷积神经网络。VGGNet相比之前state-of-the-art的网络结构,错误率大幅下降,并取得了ILSVRC 2014比赛分类项目的第2名和定位项目的第1名。同时VGGNet的拓展性很强,迁移到其他图片数据上的泛化性非常好。到目前为止,VGGNet依然经常被用来提取图像特征。VGGNet训练后的模型参数在其官方网站上开源了,可用来在特定的图像分类任务上进行再训练(相当于提供了非常好的初始化权重),因此被用在了很多地方。
下图表一所示为VGGNet各级别的网络结构图,表二所示为每一级别的参数量,从11层的网络一直到19层的网络都有详尽的性能测试。虽然从A到E每一级网络逐渐变深,但是网络的参数量并没有增长很多,这是因为参数量主要都消耗在最后3个全连接层。前面的卷积部分虽然很深,但是消耗的参数量不大,不过训练比较耗时的部分依然是卷积,因其计算量比较大。这其中的D、E也就是我们常说的VGGNet-16和VGGNet-19。C很有意思,相比B多了几个1*1的卷积层,1*1卷积的意义主要在于线性变换,而输入通道数和输出通道数不变,没有发生降维。
(表二中的单位为百万)
VGGNet拥有5段卷积,每一段内有2~3个卷积层,同时每段尾部会连接一个最大池化层用来缩小图片尺寸。每段内的卷积核数量一样,越靠后的段的卷积核数量越多:64-128-256-512-512。其中经常出现多个完全一样的3*3的卷积层堆叠在一起的情况,这其实是非常有用的设计。两个3*3的卷积层串联相当于1个5*5的卷积层,即一个像素会跟周围5*5的像素产生关联,可以说感受野大小为5*5。而3个3*3的卷积层串联的效果则相当于1个7*7的卷积层。除此之外,3个串联的3*3的卷积层,拥有比1个7*7的卷积层更少的参数量,只有后者的(3*3*3)/(7*7)=55%。最重要的是,3个3*3的卷积层拥有比1个7*7的卷积层更多的非线性变换(前者可以使用三次ReLU激活函数,而后者只有一次),使得CNN对特征的学习能力更强。
VGGNet-16网络结构
6个部分,前5段卷积网络,最后一段全连接网络。定义创建VGGNet网络结构函数inference_op。输入input_op、keep_prob(控制dropout比率,placeholder)。先初始化参数列表p。
创建第一段卷积网络,两个卷积层(conv_op),一个最大池化层(mpool_op)。卷积核大小3x3,卷积核数量(输出通道数) 64,步长1x1,全像素扫描。第一卷积层输入input_op尺寸224x224x3,输出尺寸224x224x64。第二卷积层输入输出尺寸224x224x64。最大池化层2x2,输出112x112x64。
第二段卷积网络,2个卷积层,1个最大池化层。卷积输出通道数128。输出尺寸56x56x128。
第三段卷积网络,3个卷积层,1个最大池化层。卷积输出通道数256。输出尺寸28x28x256。
第四段卷积网络,3个卷积层,1个最大池化层。卷积输出通道数512。输出尺寸14x14x512。
第五段卷积网络,3个卷积层,1个最大池化层。卷积输出通道数512。输出尺寸7x7x512。输出结果每个样本,tf.reshape 扁平化为长度7x7x512=25088一维向量。
连接4096隐含点全连接层,激活函数ReLU。连接Dropout层,训练节点保留率0.5,预测1.0。
全连接层,Dropout层。
最后连接1000隐含点全连接层,Softmax 分类输出概率。tf.argmax 输出概率最大类别。返回fc8、softmax、predictions、参数列表p。
VGGNet-16网络结构构建完成。
具体的卷积实现过程可以参考这篇文章:https://blog.csdn.net/Errors_In_Life/article/details/65950699
VGGNet还使用了Multi-Scale的方法做数据增强,将原始图像缩放到不同尺寸S,然后再随机裁切224´224的图片,这样能增加很多数据量,对于防止模型过拟合有很不错的效果。
优化方法(optimizer)是含有动量的随机梯度下降SGD+momentum(0.9)(解析:https://blog.csdn.net/qq_28266311/article/details/89439744)。
批尺寸(batch size)是256.
正则化(regularization):采用L2正则化,weight decay是5e-4。dropout在前两个全连接层后,p=0.5。
参数初始化:对于较浅的A网络,参数进行随机初始化,权重w从N(0,0.01)中采样,偏差bias初始化为0。然后,对于较深的网络,先用A网络的参数初始化前四个卷积层和三个全连接层。但是后来发现,不用预训练的参数而直接随机初始化也可以。
为了获得224*224的输入图像,要在每个sgd迭代中对每张重新缩放(rescale)的图像随机裁剪。为了增强数据集,裁剪的图像还要随机水平翻转和RGB色彩偏移。
VGG采用Multi-Scale的方法,将图像scale到一个尺寸Q,并将图片输入卷积网络计算。然后在最后一个卷积层使用滑窗的方式进行分类预测,将不同窗口的分类结果平均,再将不同尺寸Q的结果平均得到最后结果,这样可提高图片数据的利用率并提升预测准确率。
1,对输入图像各向同性地重缩放到一个预定义的最小图像边的尺寸Q;
2. 网络密集地应用在重缩放后的测试图像上。也就是说全连接层转化为卷积层(第一个全连接层转化为7*7的卷积层,后两个全连接层转化为1*1的卷积层) ,然后将转化后的全连接层应用在整张图像上。结果就是一个类别分数图(class score map),其通道数等于类别数量,依赖于图像尺寸,具有不同的空间分辨率。
3. 为了获得固定尺寸的类别分数向量(class score vector),对class score map进行空间平均化处理(sum-pooled)。
https://blog.csdn.net/marsjhao/article/details/72955935 深度学习经典卷积神经网络之VGGNet
https://blog.csdn.net/dcrmg/article/details/79254654 VGGNet网络结构
https://www.cnblogs.com/ranjiewen/p/7501536.html CNN网络--VGGNet
https://blog.csdn.net/Errors_In_Life/article/details/65950699 深度学习、图像分类入门,从VGG16卷积神经网络开始