VGG模型解析

举报
黄生 发表于 2025/02/07 16:49:55 2025/02/07
418 0 0
【摘要】 VGG是牛津大学的Karen Simonyan和Andrew Zisserman在挑战2014年的ILSVRC时提出的系列模型。基于模型研究和比赛结果,两人发表了论文《Very Deep Convolutional Networks For Large-Scale Image Recognition》。VGG的重要意义在于,其研究结果表明增加深度能够提高卷积神经网络的性能。在VGG之后,人们...

VGG是牛津大学的Karen Simonyan和Andrew Zisserman在挑战2014年的ILSVRC时提出的系列模型。基于模型研究和比赛结果,两人发表了论文《Very Deep Convolutional Networks For Large-Scale Image Recognition》。VGG的重要意义在于,其研究结果表明增加深度能够提高卷积神经网络的性能。在VGG之后,人们沿着更深层的网络这个方向,取得了一系列新的进展。本文结合原作者的论文,解析VGG模型的结构和基本原理。过程中会简单介绍卷积神经网络的一些基本要点。

ILSVRC是ImageNet Large-Scale Visual Recognition Challenge的缩写,即ImageNet大规模视觉识别挑战赛

ILSVRC是计算机视觉领域的一项重要国际竞赛,由李飞飞教授主导的ImageNet团队发起。该比赛从2010年开始举办,到2017年是最后一届。比赛使用的数据集是ImageNet数据集的一个子集,包含约1000个类别,每个类别约有1000张图像。ILSVRC的举办极大地推动了深度学习在图像识别领域的发展,许多经典的深度学习模型,如AlexNet、VGG、GoogLeNet和ResNet等,都是在该比赛中提出的。

卷积神经网络

卷积和池化是卷积神经网络(以下简称CNN)中的核心。我们使用CNN处理图像时,通过设置卷积核的尺寸和深度,以及池化层的大小,完成图像的特征提取。一般而言,计算机中的图像按照RGB颜色模式存储,本质上是一个(width, height, channels)的三维数组,其中channels为3,代表RGB三个颜色通道,每个通道是一个(width, height)的二维数组,我们通过一个n*n的参数矩阵(下图中使用的是非常小的卷积核(3×3)),对二维数组进行矩阵点乘(每个元素对应相乘),然后将结果矩阵的值相加,计为输出矩阵中的一个单位值。这个过程如下图所示:

卷积核还有一个参数深度,表示输出多少个新的矩阵,因此,直观的理解,通过卷积操作之后,图像的尺寸下降而深度增加,我们得到的是更为抽象的信息,例如颜色、轮廓等。

在卷积神经网络(ConvNets)中,每个卷积核(或称为滤波器)都是独立的,它们会学习到不同的特征。

  • 权重不同:每个卷积核的权重是通过训练学习得到的。不同的卷积核会学习到不同的权重矩阵,这些权重矩阵决定了它们在输入图像上滑动时提取的特征类型。
  • 提取的特征不同:每个卷积核可以学习到不同的特征,例如:
    一些卷积核可能对垂直边缘敏感。
    另一些卷积核可能对水平边缘敏感。
    有些卷积核可能对纹理、颜色变化或其他更复杂的模式敏感。

卷积核的学习过程

  • 随机初始化:在训练开始时,所有卷积核的权重都是随机初始化的。
  • 训练过程:在训练过程中,网络根据任务(如分类、检测等)的损失函数来调整每个卷积核的权重。通过反向传播算法,网络会优化每个卷积核的权重,以使网络的整体性能(如分类准确率)最大化。
  • 多样性:由于每个卷积核的权重是独立更新的,因此它们最终会学习到不同的特征,从而增加特征的多样性。

卷积之后的矩阵中,相邻元素表示的是相似的信息,我们通过池化将所有信息进行合并。池化也是一个类似卷积的过程,我们通过一个矩阵对二维数组进行扫描,只是该矩阵不带参数,扫描的区域的值简单的进行取最大值或者平均值的操作,将相似信息进行提取。池化的过程如下图所示:

VGG模型基本结构

通过前面的描述,我们知道卷积核的大小是非常重要的,VGG模型的研究表明,较深的层+较小的卷积核,在特征提取上可以取得更好的效果。VGG是一系列模型,有不同的配置,编号从A到E,深度不断增加,如下表所示:

image.png

由于VGG最初用于ImageNet数据集的分类任务,所以输入图片统一尺寸为(224, 224)。整个网络中都用了3x3大小的卷积核,并配合1x1的卷积核进行简单的线型转变(不改变图片大小)。卷积核名字中-之后的数值表示卷积核输出的深度,随着网络深度的增加,卷积核输出深度从64逐步增加到256,而网络深度也从11层增加到19层,这其中包括了最后的3个全连接层。这就是VGG模型的基本结构,非常简单,但取得了非常好的效果,同时也非常易于扩展。

VGG模型的研究向我们揭示了什么

VGG模型本身非常简单,很容易理解,在VGG模型的实践中,作者通过实验和对比,发现了很多有趣的规律。例如上面提到的"较深的网络+较小的卷积核"可以取得更好的特征提取性能。下面,我们一一介绍作者的发现。

“深网络+小卷积核”

首先我们了解一下"感受野"的概念。简单的说,感受野就是通过卷积网络之后,输出矩阵的单位对应原矩阵区域的大小。例如,一个5x5的图像,经过3x3的卷积之后,尺寸变为3x3,新的矩阵中一个元素对应原始矩阵中的3x3区域。

作者提到,2个3x3的卷积层和1个5x5的卷积层,感受野(receptive field)是一致的,都是4x4,但是最终实验的结果却表明,前者的效果要优于后者。作者还对比了3x3卷积层和1个7x7卷积层,得到了相同的对比结果。

这里感受野都是4x4应该写错了,是5x5才对。举例理解:1个5x5的输入图像,经过1次3x3卷积核的卷积,输出特征图是3x3,再经过下一个3x3卷积核的卷积,输出特征图是1x1,回过头看,它的感受野就是5x5
归纳一下,输入图像尺寸是MxM,卷积核尺寸是NxN,那么卷积后输出的特征图尺寸是(M-N+1)x(M-N+1)

同时,使用深网络+小卷积核还有一个好处,那就是参数较少。假设一个卷积核的深度为C,那么3个3x3卷积核需要的参数为3^2 * C^2 * 3,即27 * C^2(C^2表示C的平方),而1个7x7的卷积核的参数个数为7^2 * C^2,即49 * C^2,后者多出了81%的参数。

pretrain与fine tune

作者在训练模型时,基本延续了2012年ILSVRC冠军模型AlexNet的训练参数配置,包括对AlexNet的LRN进行了对比(最后发现加入LRN并不会对VGG模型有明显的提升)。最终的训练结果显示,学习率下降了3倍,而且在370K个迭代(74 epochs)就结束了训练。作者认为有2个原因:1,"深度网络+小卷积核"隐含的实现了数据的正态化;2,作者使用了预训练与微调的训练方式。

前面我们提到,VGG系列模型从A到E,深度不断增加。作者在训练时,先使用随机初始化对模型A进行训练,然后将训练得到的权重来初始化模型B,模型B只比A多了两层卷积,这两层卷积依然采用随机初始化。这样,有效的降低了模型B的训练时间。不过,作者在提交比赛结果之后发现,使用论文《Understanding the difficulty of training deep feedforward neural networks》的方法,也可以直接使用随机初始化进行训练,不需要预训练参数。

图像多尺寸缩放

作者在训练模型时,对图像的尺寸进行了调整。ImageNet比赛中的图片尺寸都是224x224,因此,作者将输入图片进行了缩放,设缩放后的图片最小边长为S,然后使用224x224的尺寸对图片进行裁剪,缩放时保证S>=224。当:

S=224时,裁剪时可以覆盖全部图片

S>>224时,即S远大于224,这时裁剪的结果只能覆盖部分图片,覆盖的范围是图片中的一个物体或物体的一部分。

那么,如何缩放图片呢?作者提出了两种方法,一种是S取固定值,先将S固定为256(参考了AlexNet的训练参数)进行训练,然后再基于训练结果将S设置为384,继续训练。第二种方法则是多缩放值训练,在一个范围[S_min, S_max]内随机取值并赋给S(实践中取S_min=256, S_max=512),然后进行训练。因为现实中输入图片的尺寸可能各不相同,这种训练方式可以获得更好的泛化性。同时,作者仍然使用了预训练的思想,以S=384的固定值训练为基础,进行多缩放值的训练。

在验证阶段,作者也提出了图片缩放的思想。假设验证时,图片缩放后的最小值为Q,也使用了2种取值方法。第一种为Q取固定值,针对S不同的取值情况:

S取固定值时,Q=S
S在[S_min, S_max]范围时,Q=0.5(S_min + S_max)
第二种为Q取多种值:

S取固定值时,Q 从 集合{S-32, S, S+32}中取值

S在[S_min, S_max]范围时,Q从集合{ S_min, 0.5(S_min+S_max), S_max }中取值

在训练和验证阶段,作者发现对图片进行多值缩放,都可以取得更好的效果。

原文地址:https://github.com/huaweicloud/ModelArts-Lab/wiki/VGG模型解析
本文修改了错别字和添加注释

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。