VGGNet图像识别与tensorflow实现

1. 引言

    随着卷积神经网络CNN在图像任务上不断取得的进展,很多学者对CNN的各个因素进行了探讨和改进,以进一步提高CNN在计算机视觉中的任务,比如CNN的卷积核大小、步伐等,在本文,我们将介绍一个非常经典的CNN模型——VGGNet,这个模型是在2014年由Karen Simonyan等人提出来的,在论文中,作者主要研究的是在控制其他变量不变的情况下,逐渐增加CNN的层数,是否可以对CNN的效果带来显著影响。下面我们具体对该模型进行介绍,论文地址如下:

2. VGG模型介绍

2.1 VGG模型的结构

    为了控制变量,VGG模型将每张输入图像的尺寸控制在 224 × 224 × 3 224 \times 224 \times 3 224×224×3的大小,对于图像的预处理,VGG对每张图像减去像素的均值,即中心化处理。在每一个卷积层,采用的卷积核大小都是 3 × 3 3 \times 3 3×3,步伐是1,在部分卷积层会加一层max-pooling层,max-pooling层的窗口大小设置的是 2 × 2 2 \times 2 2×2,步伐是2。另外,全连接层采用的是三层全连接层,前两层的隐藏单元数是4096,最后一层带有softmax,其隐藏单元数是1000。所有的隐藏层都带有RELU激活函数。
    为了研究CNN层数对模型效果的影响,作者设置了不同深度的VGG模型进行对比,如下图A-E所示,其中模型A和模型A-LRN都是11层的网络,两个的区别是A-LRN加了一层Normalization层,但是作者发现加了该层后对结果并没有什么影响,反而提高了模型的复杂度,所以后面的模型中都不加Normalization层,模型B采用的是13层,模型C和模型D采用的是16层,两者的区别主要是模型C在模型B的基础上加了两层conv1层,而模型D在模型B的基础上加了两层conv3层,作者之所以这样操作是为了证明非线性变换对模型的效果确实有显著的提升,因为conv1只是一层线性变换。模型E采用的则是19层的结构。各个模型的通道数由最开始的64逐渐递增到512后保持不变,每经过一层max-pooling层通道数翻一倍。
图1 VGG模型结构
    虽然VGG增加了CNN的层数,但是其卷积核的尺寸都是 3 × 3 3 \times 3 3×3,因此,在模型的参数量方面要比那些浅层但是采用大尺寸卷积核的CNN网络少,并且在达到同样大小的感受野下,VGG虽然可能需要堆叠多层,但是由于每层都加入了RELU激活函数,因此,其模型的表达能力要比使用单层大尺寸卷积核的模型强。
    在训练时,作者对图像的预处理除了中心化外,还做了一个裁剪处理,只不过在裁剪之前,作者对图像会先进行放缩,放缩到图像的最小边大于224的一个尺寸,然后再对图像进行随机裁剪。作者在放缩时选择了两种方法,一种是single_scale方法:即将图像放缩为两个尺寸,分别为256、384,然后先训练256的模型,然后将该模型的参数作为384模型的初始化再进行训练。另一种是jittered_scale方法:即选择一个放缩的范围,如[256,512],然后每张图像放缩时会从该范围随机选择一个放缩尺寸进行放缩,然后再裁剪到 224 × 224 224 \times 224 224×224大小。
    在测试时,对于一张新的图像,同样需要进行放缩,作者同样采用了两种方法,一种是single_scale方法:即只设置一种尺度进行放缩,对于训练中的single_scale方法,直接设置测试的放缩尺度与训练时的放缩尺度相同,对于训练中的jittered_scale方法,则直接设置测试的放缩尺度为训练时放缩范围的平均值。另一种是multi_scale方法:即测试时设置多种放缩尺度,对于训练中的single_scale方法,设置三种放缩尺度分别为 Q = { S − 32 , S , S + 32 } Q=\{S-32, S, S+32\} Q={ S32,S,S+32},其中 S S S为训练时的放缩尺度,下同。对于训练中的jittered_scale方法,则设置三种放缩尺度为 Q = { S min ⁡ , 0.5 ( S min ⁡ + S max ⁡ ) , S max ⁡ } Q=\left\{S_{\min }, 0.5\left(S_{\min }+S_{\max }\right), S_{\max }\right\} Q={ Smin,0.5(Smin+Smax

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值