VGG 论文笔记

VGGVery Deep Convollutional Networks for Large-Scale Image Recognition

摘要: 本文研究了卷积网络的深度对于图像识别任务的准确率的影响。本文的主要贡献:通过堆叠3x3卷积层增加网络深度,系统地研究了网络深度增加到16-19层的过程中性能的提升。上面的研究基于14年ImageNet比赛提交的模型(分类第一名,定位第二名)。另外,我们的模型泛化能力很好,在其它数据集上也取得了state of art。我们开源了两个性能最好的网络,以方便大家在计算机视觉上的进一步研究。
关键点:网络深度,性能

文章总结
系统研究了网络深度对性能的影响。顺便研究了LRN层对性能的影响。另外,VGG大量使用了3x3小卷积。

1. 简介

VGG为了研究了网络深度对性能的影响,在固定架构的其它参数的情况下,通过增加卷积层来逐渐增加网络的深度(整个网络使用的都是3x3卷积核)。作者也提到了,提取到的高层特征也可以使用SVM分类

2. 卷积网络配置

为了衡量深度带来的性能提升,所有的卷积网络层的配置完全一致。

输入:224x224x3
预处理:减去mean RGB值
网络可用组件:3x3卷积层;1x1卷积层;卷积的stride为1;卷积的padding为same以保证conv后分辨率不变;卷积的channel以2的倍数增加(从64开始,最高512);池化选择ksize为2x2stride为2的max-pooling。卷积后接一个三层FC:4096-4096-1000+softmax。整个网络使用ReLU激活函数。有一个网络版本含有LRN层。

下图是本文使用的网络的配置:
网络配置图
网 络 配 置 图 网络配置图
本文一共构建了6个模型(A-E):
A:(11层)8层conv,3层FC
A-LRN:(11层)在A上,增加1个LRN(放在第一个conv后)。
B:(13层)在B上,增加2层3x3 conv
C:(16层)在C上,增加3层1x1 conv
D:(16层)在B上,增加3层3x3 conv
E:(19层)在C上,增加3层3x3 conv

讨论
VGG在更深的情况下,以较少的参数量取得了比大卷积核浅层网络更好的性能。VGG的第一层不同于AlexNet和ZFNet(AlexNet:11x11 stride 2)(ZFNet:7x7 stride 2),VGG整个网络采用3x3 stride 1卷积。在没有池化时,两个3x3 filter的感受野等效于一个5x5 filter的感受野,3个3x3 filter可以等效1个7x7 filter的感受野。用小卷积核代替大卷积核有两个作用:1.增加了ReLU的个数,从而增加了模型非线性能力;2.减少了参数量;作者认为用3个3x3 conv代替1个7x7 conv,可以看做是对7x7 conv进行了正则。
在模型C中,使用了1x1卷积,它在不改变感受野大小的情况下,增加了模型的非线性。

3.网络在分类任务上的配置

训练
优化算法:mini-batch GD with momentum(0.9)
损失函数:Multinomial Logistic Regression损失函数推荐阅读内容
batch size:256
weight decay rate:5x 1 0 − 4 10^{-4} 104
FC前两层的dropout rate:0.5
学习速率:开始设置为 1 0 − 2 10^{-2} 102,当验证集上的误差停止下降时将学习速率降低为当前的十分之一。

在ImageNet上,训练过程中学习速率下降了3次,迭代了370k次(74epochs)

模型参数的初始化很重要,VGG使用训练好浅层网络的参数初始化更深网络部分层的参数,当然也可以使用Glorot & Bengio (2010)提出的Xavier参数初始化方法。

模型输入的224x224图像从rescaled的图像随机裁剪而来,并进行随机的水平翻转和随机RGB颜色变化。

rescale就是将图像重新调整大小

VGG的TensorFlow实现
#coding:utf-8
'''
下面对VGG文章中的A,A-LRN,B,C,D,E模型进行了实现。

通过更改inference的version参数就可以得到文中的不同深度及配置的模型。
'''
import tensorflow as tf
relu = tf.nn.relu


def print_activation(x):
  print(x.op.name, x.get_shape().as_list())

def inference(inputs,
              num_classes=1000,
              is_training=True,
              dropout_keep_prob=0.5,
              version='A'):
  '''
  inputs: a tensor of images
  num_classes: the num of category.
  is_training: set ture when it used for training
  dropout_keep_prob: the rate of dropout during training
  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值