vgg

718 阅读11分钟

VGG网络

设计思想

1 更深的网络有助于性能的提升,11层、13层、16层、19层

2 更深的网络不好训练,容易过拟合,所以他采用小卷积核

3 拓展性又很强,迁移到其它图片数据上的泛化性也非常好

核心结构

    • preview
    • 022939_Pl12_876354.png

VGG11、VGG13、VGG16(常用)、VGG19(常用),如D的模型,卷积核变小了,保证网络足够深,3个全连接,softmax损失函数,每个卷积以及前两个全连接层之后配一个ReLU激活函数。

1 训练输入是大小为224*224的RGB图像

2 输入图像预处理时只做了减均值操作,一般经验来说训练网络时减个128的值,或者减去所有像素点算的均值,这样收敛会快一点,性能不会差太多,偶尔会有一点提升。模型定点化时,网络参数一般是浮点数,浮点运算计算量会大一点,所以跑到芯片上时会把模型做定点化,把参数变成定点数,做顶点运算,要对输入的RGB数据(0~255)减去128操作,变成一个8位的有符号整型数uint_8,有利于模型的压缩和运算。

3 所有隐藏层都使用ReLu(只取0或1,效率高),而不是LRN层(Local Response Normalization 做局部归一化,浪费了更多的内存资源和时间,性能没有太大提升),以后发展也大多用ReLU

4 使用3x3和1x1的卷积核,非常小的感受野,这样可以把网络加深,使用多个小卷积核的总参数也变少了,降低计算量。一是可以减少参数,二是相当于进行了更多的非线性映射,可以增加网络的拟合/表达能力。

5 1x1卷积层增加决策函数的非线性,1x1的卷积核相当于全连接,一般做通道的降维或升维,而不直接给一个高通道数,是因为分开来做时,就会多出一层,也就多个一层ReLU,非线性就加强了,增强网络表达能力。1x1的卷积神经网络还可以用来替代全连接层。

6 两个连续的3x3的卷积相当于5x5的感受野,三个相当于7x7。

6.1网络结构加深了,就包含3个ReLu层而不是1个,使模型更有判别性、非线性

6.2减少了参数

6.2.1 比如输入输出都是C个通道,使用3x3的卷积层即便是3个才需要 3x(3x3xCxC)=2x7xCxC,而使用7x7的1个卷积层就需要7x7xCxC=4x9xCxC。

6.2.2 相当于对7x7卷积施加一种正则化(防止过拟合),使它分解为3个3x3的卷积,机器学习主要就是学习拟合样本的分布,结构越简单参数越少性能越好,泛化能力越强。

训练时,先训练级别简单(层数较浅)的VGGNet的A级网络,然后使用A网络的权重来初始化后面的复杂模型,加快训练的收敛速度。

7 通道数多

VGG网络第一层的通道数为64,后面每层都进行了翻倍,最多到512个通道,通道数的增加,使得更多的信息可以被提取出来

8 层数更深、特征图更宽

由于卷积核专注于扩大通道数、池化(池化的本质是降维,减少信息冗余)专注于缩小宽和高,使得模型架构上更深更宽的同时,控制了计算量的增加规模。

9 全连接转卷积(测试阶段)

这也是VGG的一个特点,在网络测试阶段将训练阶段的三个全连接替换为三个卷积,使得测试得到的全卷积网络因为没有全连接的限制,因而可以接收任意宽或高为的输入,这在测试阶段很重要。

023015_rDZR_876354.png

023026_99ma_876354.png

例如7x7x512的层要跟4096个神经元的层做全连接,则替换为对7x7x512的层作通道数为4096、卷积核为1x1的卷积。 全连接转卷积的思路是参考了OverFeat的工作思路,如下图所示,对14x14的图像进行卷积操作,在得到5x5的feature map后的这一步,如果使用全连接,就会把它压平再全连接,这样就破坏了feature map的图像位置关系,直接转为一列特征。但是如果使用的是全卷积,最后会得到1x1xC的feature map,C是channel数,也是类别的大小。这个时候如果来了一张16x16的图像,经过全卷积后就会得到2x2xC的feature map,这个时候可以对这个2x2的4个值做一个取最大或平均,就会变成一个值了,以此类推,来了更大的图像,最后得到的feature map就是3x3xC,4x4xC,5x5xC的大小,输出的大小和输入的大小相关,但总是可以对这个输出map池化(取最大)来得到这个类别的值。

训练方法

  • 优化方法是含有动量的随机梯度下降,SGD+momentum(0.9),模拟惯性,可关联历史梯度。
  • 批尺寸(batch size)是256,根据显卡能力看
  • 正则化(regularization):采用L2正则化,weight decay是5e-4
  • dropout在前两个全连接层后,p=0.5,具体还要调,现在一般不会太用这个层了。
  • 权重的初始化很重要,初始化不好会导致学习的停滞。这里初始化的方法是:首先训练网络A,网络A足够浅以至于可以随机初始化权重。训练好A之后,其它更深的网络的前四层和后两个全连接层使用A的权重进行初始化,其它层的权重随机初始化,且随机初始化的参数为:高斯分布,均值为0,标准差为0.01,偏置权重为0。批处理大小设为256,动量为0.9。训练通过权重衰减(L2惩罚乘子设定为5⋅10^−4)进行正则化 ,前两个全连接层采取dropout正则化(dropout比率设定为0.5)。 学习率初始设定为10^−2,然后当验证集准确率停止改善时,学习率以10倍的比率进行减小。学习率总共降低3次,学习在37万次迭代后停止(74个epochs)

训练图像尺寸选择

S是训练图像的最小边,训练尺度。 Q是测试图像的最小边,测试尺度。 对原始图片进行等比例缩放,使得S大于224,然后在图片上随机提取224x224窗口,进行训练。 单一尺度训练: 固定 S 的大小,对应了单一尺度的训练,训练多个分类器。训练S=256和S=384两个分类器,其中S=384的分类器用S=256的权重进行初始化; 多尺度(Multi-scale)训练(尺度抖动): 直接训练一个分类器,每次数据输入的时候,每张图片被重新缩放,缩放的短边S随机从[256,512]中选择一个,也可以认为通过尺度抖动(scale jittering)进行训练集增强。图像中的目标可能具有不同的大小,所以训练时认为这是有用的。

模型评估

VGG在test的时候提出了输入图像Q未必要等于S,并且之后更是率先提出了全卷积网络来实现dense评估。

**单一尺度评估(single scale) **即测试图像大小Q固定,若S固定,则Q=S;若S抖动,则Q=0.5(Smin+Smax)

image-20220402171657454

从表中可以看出:

  • LRN层无性能增益(A-LRN) VGG作者通过网络A-LRN发现,AlexNet曾经用到的LRN层(local response normalization,局部响应归一化)并没有带来性能的提升,而且还浪费了内存计算损耗。 因此在其它组的网络中均没再出现LRN层。
  • 随着深度增加,分类性能逐渐提高(A、B、C、D、E) 从11层的A到19层的E,网络深度增加对top1和top5的错误率下降很明显。
  • 多个小卷积核比单个大卷积核性能好(B) VGG作者做了实验用B和自己一个不在实验组里的较浅网络比较,较浅网络用conv5x5来代替B的两个conv3x3,结果显示多个小卷积核比单个大卷积核效果要好。
  • 训练时的尺度抖动(S∈[256;512])得到了与固定最小边(S=256或S=384)的图像训练相比更好的结果。这证实了通过尺度抖动进行的训练集增强确实有助于捕获多尺度图像统计。

多尺度评估(multi-scale) 即评估图像大小Q不固定,Q = {S{min}, 0.5(S{min} + S{max}), S{max}

image-20220402171757447

作者通过试验发现当使用固定值S训练时,Q的范围在[S−32,S,S+32]之间时,测试的结果与训练结果最接近,否则可能由于训练和测试尺度之间的巨大差异导致性能下降。 实验结果表明测试时的尺度抖动与在单一尺度上相同模型的评估相比性能更优,并且尺度抖动优于使用固定最小边S的训练。

多裁剪评估(multi-crop)

image-20220402171823043

Dense(密集评估): 即指全连接层替换为卷积层(第一FC层转换到7×7卷积层,最后两个FC层转换到1×1卷积层),最后得出一个预测的score map,再对结果求平均。 multi-crop(多裁剪评估): 即对图像进行多样本的随机裁剪。对三个尺度上每个尺度进行50次裁剪(5x5大小的正常网格,并进行两次翻转)即总共150次裁剪的效果图,然后通过网络预测每一个样本的结构,最终对所有结果平均。 多剪裁表现要略好于密集评估,并且这两种方法是互补的,因为它们的结合优于它们中的每一种。 多裁剪图像评估是密集评估的补充:当将ConvNet应用于裁剪图像时,卷积特征图用零填充,而在密集评估的情况下,相同裁剪图像的填充自然会来自于图像的相邻部分(由于卷积和空间池化),这大大增加了整个网络的感受野,因此捕获了更多的上下文。 由于全卷积网络被应用在整个图像上,所以不需要在测试时对采样多个裁剪图像,因为它需要网络重新计算每个裁剪图像,这样效率较低。使用大量的裁剪图像可以提高准确度,因为与全卷积网络相比,它使输入图像的采样更精细。

实验结论

  • local response normalization(A-LRN) 局部归一化并不能改善A网络性能
  • 分类误差随着深度增加而降低,越深的特征收敛越快,受样本变化的影响越小,越鲁棒
  • 数据增强:图像尺度抖动、多尺度评估。我们训练时也会加尺度变化、加抖动、在不同颜色通道上做一些变化、加遮挡、加裁剪、扣图等操作,以便增强模型的鲁棒性。
  • 多裁剪(multi-crop)评估比密集(dense)评估,效果更好。
  • 采用了Multi-Scale的方法来训练和预测。可以增加训练的数据量,防止模型过拟合,提升预测准确率
  • 多个小卷积核比单个大卷积核性能好

小结

1、通过增加深度能有效地提升性能; 2、最佳模型:VGG16,从头到尾只有3x3卷积与2x2池化,简洁优美; 3、卷积可代替全连接,可适应各种尺寸的图片

\