常见用的深度学习框架 ----VGGnet

VGGNet网络

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卷积神经网络开始

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值