VGGNet总结及启发-2014

    技术2022-07-12  77

    声明:文章仅作知识整理、分享,如有侵权请联系作者删除博文,谢谢!

    经典分类网络(传送门):目录索引、LeNet、AlexNet、VGG、ResNet、Inception、DenseNet、SeNet。

    相关文章:VGG论文翻译

    VGG全文翻译移步:https://blog.csdn.net/weixin_34910922/article/details/107050556

    2014年提出VGG-Net网络。研究了卷积网络深度对大尺度图像识别精度的影响,更深的网络能提高性能。之前的改进:更小的接受窗口、较小的步幅。ImageNet Challenge 2014定位和分类过程中分别获得了第一名和第二名。

    1、特性/贡献

    1、相比AlexNet及13年方法,使用了更小的感受窗口尺寸和更小的第一卷积层步长,将深度推到16-19加权层可以实现对现有技术配置的显著改进;

    2、相比AlexNet及13年方法,在整个图像和多个尺度上对网络进行密集地训练和测试(之前是单个尺度剪裁);

    3、最早的一批,给出不同深度卷积网络结构性能对比实验方式,卷积网络结构设计优化方式(之后的sequenet、mobilenet、efiicent等,都对设计方式进行进一步的研究);

    4、最早的一批,使用1*1卷积,same padiing、卷积分解,并为其为网络带来的内在影响进行了分析;

    5、改变了在第一卷积层中使用相对较大的感受野的常规操作,开始在第一层使用小卷积核;

    6、小卷积核、模型finetune训练更有利于网络提前收敛;

    7、继承、验证了之前结论,深度有利于指标提升。

    2、网络配置

    2.1、网络结构

    1、VGG网络设计原则:主要优势包括:网络更深,使用更多的层,通常有16-19层;所有卷积层用同样大小(3 x 3)的 卷积核或1x1卷积核(输入的线性变化;)Max-poling执行在一个2x2窗口,2步长 。

    2、两层3*3卷积核组成感受野与7*7感受野相当。

    1)64个3*3*3的核, 得到 224*224*64特征图;

    2层64个3*3*64的核,得到224*224*64特征图,池化,步长2->112*112*64

    2)128个3*3*64的核,得到112*112*128特征图,

    2 层128个3*3*128的核,得到112*112*128特征图,池化,步长2,->56*56*128

    3)256个3*3*128的核,得到56*56*256特征图;

    2层,256个3*3*256的核,得到56*56*256特征图;

    3层,256个3*3*256的核,得到56*56*256特征图,池化,步长2->28*28*256

    4)512个3*3*256的核,得到28*28*512特征图;

    2层,512个3*3*512的核,得到28*28*512特征图;

    3层,12个3*3*512的核,得到28*28*512特征图;池化,步长2,-> 14*14*512

    5)512个3*3*512的核,得到14*14*512特征图;

    2层,512个3*3*512的核,得到14*14*512特征图;

    3层,512个3*3*512的核,得到14*14*512特征图;池化,步长2;-> 7*7*512

    6)4096个7*7*512的核,得到4069维向量为输入层;

    构成4096*4096*1000的全连接层

    2.2、网络结构

    VGG16的网络结构非常规整,修改起来相对容易,遵循所有的ConvNet层配置都使用相同的规则,并且仅是深度不同的通用设计规则,选择最优网络结构(这里主要是深度)

    这张图在介绍VGG16时是用的,这张图蕴含的信息非常多:

    1、6个网络的对比图。从A到E,网络越来越深。其中加入了一些层用来验证效果;

    2、每一列详细讲解了每个网络的结构;

    3、一种正确做实验的方式,控制变量,逐步优化;

    网络设计过程:

    网络A:先提一个比较浅的网络,这个网络很容易就在ImageNet上收敛了;

    网络A-LRN:加一些AlexNet已经实验说有效的东西(LRN),但好像没用;

    网络B:加2层试试(A基础上,仅增加深度),效果更好了;

    网络C:再加两层1*1卷积(B基础上,仅增加非线性),效果更好了;

    网络D:把1*1卷积核改成3*3(B基础上,仅增加感受野),试一试。效果又变好了。好像是目前最好的了(2014年);

    网络E:再往上加了,又变好了!

    可能作者也试验了,不过效果可能就会出现深度网络出现的一系列问题,梯度消失。再深可能效果更差了。ResNet将这一现象称为退化问题,并解决。

    3、文章中的一些讨论/结论

    3.1、三个3×3卷积的堆叠替换单个7×7层,获得了什么?(感受野、卷积分解)

    1、感受野不变。在整个网络使用非常小的3×3感受野,与输入的每个像素(步长为1)进行卷积。两个3×3卷积层堆叠(没有空间池化)有5×5的有效感受野;三个这样的层具有7×7的有效感受野。

    2、结合了三个非线性修正层、增加了非线性,而不是单一的,这使得决策函数更具判别性;

    3、减少参数的数量。假设三层3×3卷积堆叠的输入和输出有C个通道,堆叠卷积层的参数为3*(3^2C^2)=27C^2个权重;

    4、起到正则化作用。单个7×7卷积层将需要7^2C^2=49C^2个参数,即参数多81%。这可以看作是对7×7卷积滤波器进行正则化,迫使它们通过3×3滤波器(在它们之间注入非线性)进行分解。

    3.2、1*1卷积核的使用

    结合1×1卷积层(配置C,表1)是增加决策函数非线性而不影响卷积层感受野的一种方式。

    3.3、开始输入层的小卷积核的使用

    ILSVRC-2013比赛时,在第一卷积层中使用相对较大的感受野(ResNet也沿用了这种结构)。本文整个网络都使用3*3Conv,15年之后第一层大卷积就很少见了。

    4、训练技巧

    4.1、多尺度训练方式

    相比AlexNet的随机剪裁、随机颜色增广外,开启了进行了多尺度训练图像中对输入。这样的对比试验,在19年,mmdetection发表的论文中,仍进行了更深层次的实验对比。

    训练图像大小:S为训练尺度,原图按最小边等比例缩放(AlexNet中使用的方式)。之后采用下面两种方式训练:

    第一种是修正对应单尺度训练的S。用两个固定尺度训练的模型:S=256和S=384。给定ConvNet配置,先使用S=256来训练网络,之后用S=256预训练的权重来进行初始化,加速S=384网络的训练,学习率使用10−3。

    第二种是多尺度训练。其中每个训练图像通过从一定范围[Smin,Smax](使用Smin=256和Smax=512)随机采样S来单独进行归一化。由于图像中的目标可能具有不同的大小,因此在训练期间考虑到这一点是有益的。这也可以看作是通过尺度抖动进行训练集增强,其中单个模型被训练在一定尺度范围内识别对象。为了速度的原因,我们通过对具有相同配置的单尺度模型的所有层进行微调,训练了多尺度模型,并用固定的S=384进行预训练。

    4.2、训练技巧-加速收敛

    参数相比AlexNet更多,网络的深度更大,但网络需要更小的epoch就可以收敛,原因:

    1、更大的深度和更小的卷积滤波器尺寸引起的隐式正则化。统统使用了3*3的卷积核,相比AlexNet的5*5,7*7,11*11卷积小了很多;

    2、某些层的初始化。作者首先训练了网络A,因为A比较小,所以更容易收敛。训练好A后,得到model去finetune 网络C,可以一次类推进而得到网络E。使用这种训练方法,显然可以加快收敛。

    4.3、常规设置

    目前仍在使用的一些设置:

    批量大小设为256,动量为0.9。训练通过权重衰减(L2惩罚乘子设定为5⋅10−4)进行正则化,前两个全连接层执行丢弃正则化(丢弃率设定为0.5)。学习率初始设定为10−2,然后当验证集准确率停止改善时,减少10倍。学习率总共降低3次。

    数据扩充,与AlexNet一致。水平翻转、随机剪裁和随机RGB颜色偏移。

    5、多种评价方式性能对比

    5.1、单尺度评估

    我们首先评估单个ConvNet模型在单尺度上的性能,其层结构配置如2.2节中描述。测试图像大小设置如下:对于固定S的Q=S,对于抖动S∈[Smin,Smax],Q=0.5(Smin+Smax)。结果如表3所示。

    表3:在单测试尺度的ConvNet性能

    1、使用局部响应归一化(A-LRN网络)在没有任何归一化层的情况下,对模型A没有改善。因此,我们在较深的架构(B-E)中不采用归一化。

    2、观察到分类误差随着ConvNet深度的增加而减小:从A中的11层到E中的19层。值得注意的是,尽管深度相同,配置C(包含三个1×1卷积层)比在整个网络层中使用3×3卷积的配置D更差。这表明,虽然额外的非线性确实有帮助(C优于B),但也可以通过使用具有非线性感受野(D比C好)的卷积滤波器来捕获空间上下文。

    当深度达到19层时,我们架构的错误率饱和,但更深的模型可能有益于较大的数据集。我们还将网络B与具有5×5卷积层的浅层网络进行了比较,浅层网络可以通过用单个5×5卷积层替换B中每对3×3卷积层得到(其具有相同的感受野如第2.3节所述)。测量的浅层网络top-1错误率比网络B的top-1错误率(在中心裁剪图像上)高7%,这证实了具有小滤波器的深层网络优于具有较大滤波器的浅层网络。

    最后,训练时的尺度抖动(S∈[256;512])得到了与固定最小边(S=256或S=384)的图像训练相比更好的结果,即使在测试时使用单尺度。这证实了通过尺度抖动进行的训练集增强确实有助于捕获多尺度图像统计。

    5.2、多尺度评估

    考虑到训练和测试尺度之间的巨大差异会导致性能下降,用固定S训练的模型在三个测试图像尺度上进行了评估,接近于训练一次:Q=S−32,S,S+32。同时,训练时的尺度抖动允许网络在测试时应用于更广的尺度范围,所以用变量S∈[Smin;Smax]训练的模型在更大的尺寸范围Q = {S_{min}, 0.5(S_{min} + S_{max}), S_{max}上进行评估。

    表4中给出的结果表明,测试时的尺度抖动导致了更好的性能(与在单一尺度上相同模型的评估相比,如表3所示)。

    表4:在多个测试尺度上的ConvNet性能

    5.3、多裁剪图像评估

    在表5中,我们将稠密ConvNet评估与多裁剪图像评估进行比较(细节参见第3.2节)。我们还通过平均其soft-max输出来评估两种评估技术的互补性。可以看出,使用多裁剪图像表现比密集评估略好,而且这两种方法确实是互补的,因为它们的组合优于其中的每一种。如上所述,我们假设这是由于卷积边界条件的不同处理。

    表5:ConvNet评估技术比较。在所有的实验中训练尺度S从[256;512]采样,三个测试适度Q考虑:{256, 384, 512}。

    5.4、卷积网络融合

    结果如表6所示。在ILSVRC提交的时候,我们只训练了单规模网络,以及一个多尺度模型D(仅在全连接层进行微调而不是所有层)。由此产生的7个网络组合具有7.3%的ILSVRC测试误差。在提交之后,我们考虑了只有两个表现最好的多尺度模型(配置D和E)的组合,它使用密集评估将测试误差降低到7.0%,使用密集评估和多裁剪图像评估将测试误差降低到6.8%。作为参考,我们表现最佳的单模型达到7.1%的误差(模型E,表5)。

    表6:多个卷积网络融合结果:

    代码实现:https://github.com/alexzhang19/pytorch-classify/blob/master/models/vggnet.py

    上一篇:VGG论文翻译,下一篇:ResNet论文翻译,传送门:分类网络目录索引。

    Processed: 0.013, SQL: 9