轻量级网络模型优化进化史总结——Inception V1-4,ResNet,Xception,ResNeXt,MobileNe,,ShuffleNet,DenseNet

摘要
网络从轻量级的LeNet到更深层结构的经典AlexNet、VGG等网络结构,对于无论是recognition还是classification的精确度都有了一个很好的提升,但随之而来也带来了许多问题。例如在训练中常常会遇到的梯度弥散/爆炸、过拟合、欠拟合、泛华性能差、准确度退化等等,以及随着网络变深带来的运算时间、空间的代价剧增。尽管显卡的运算性能也在不断提升,但是从根本算法上解决才是最为行之有效的办法;并且现在的一个研究方向是将深度学习的算法应用于移动端,这就需要学界从网络block结构入手发生改变。网络压缩优化的两个方向主要是迁移学习(例如MobileID)和网络稀疏,事实上也创造出来了更多的优秀的网络,如ResNet、InceptionV2-4、Xception、ResNext、MobileNet、ShuffleNet、DenseNet,在正文中会对这些网络做一个中心思想的介绍。

关键词:Inception V1-4,ResNet,Xception,ResNeXt,MobileNe,,ShuffleNet,DenseNet

一、引言
LeNet5 诞生于 1994 年,是最早的卷积神经网络之一,并且推动了深度学习领域的发展。现在更多的网络结构从简单的层堆砌更多的从根本结构上发生变化,模型简化思路总体来说是基于Conv层内部的有大量冗余而进行的模型压缩,目前学界里常用的方法主要是:参数稀疏、矩阵分解、Depthwise卷积、分组卷积等等。从ResNet开始,InceptionV4、Xception、ResNext、MobileNet、ShuffleNet,以及2017CVPR的best paper的DenseNet都是借用了ResNet的思想,是被称之为“神来之笔”的一种思想。本篇文献综述即以ResNet为入手点,着手阅读了一系列最近的关于网络结构优化的优秀论文,在正文部分对这些网络的主要贡献、核心思路、体现在网络结构的变化这三个方面进行较为详细的叙述,并且对它们的进化史做一个梳理。

二、优化模型进化史介绍:
(1)Inception V1:
即是我们熟知的GoogleNet,它的核心思想在于增加网络深度和宽度,来提高CNN网络性能,而这也就意味着巨量的参数容易产生过拟合也会大大增加计算量。
GoogleNet认为解决上述两个缺点的根本方法就是将全连接甚至一般的卷积都转化为稀疏连接。一方面现实生物神经系统的连接也是稀疏的,另一方面有文献表明:对于大规模稀疏的神经网络,可以通过分析激活值的统计特性和对高度相关的输出进行聚类来逐层构建出一个最优网络。这点表明臃肿的稀疏网络可能被不失性能地简化。 虽然数学证明有着严格的条件限制,但Hebbian准则有力地支持了这一点:fire together,wire together。
早些的时候,为了打破网络对称性和提高学习能力,传统的网络都使用了随机稀疏连接。但是,计算机软硬件对非均匀稀疏数据的计算效率很差,所以在AlexNet中又重新启用了全连接层,目的是为了更好地优化并行运算。GoogleNet就是为了找到一种能保持网络结构的稀疏性,又能利用密集矩阵的高计算性能的方法。
Inception module的中心思想,就是把稀疏结构近似成几个密集的子矩阵,从而在减少参数的同时,更加有效地利用计算资源。
同一层网络结构里面,有1*1,3*3,5*5不同的卷积模板,可以在不同size的感受野做卷积特征提取,整个网络的计算量变大,但是层次又没有变深。
具体操作是,在3*3、5*5卷积前面先做1*1的卷积,来降低input的channel的数量,,1*1的卷积核起到的就是降维的作用;并且由于网络到后面所提取的特征变得更加抽象,所涉及的感受野也变得更大,kernel为3*3、5*5的卷积比例也要增加。
网络核心结构如下图所示:
这里写图片描述
最终Google的参数相比于AlexNet少了12倍,相对于VGG-16少了3倍,在当时已经是非常优秀的网络了,但是研究远不仅如此。

(2)Inception V2:
Inception V2最主要的贡献就是提出了batch normalization,目的主要在于加快训练速度。网络训练过程中参数不断改变导致后续每一层输入的分布也发生变化,而学习的过程又要使每一层适应输入的分布,因此我们不得不降低学习率、小心地初始化。作者将分布发生变化称之为internal covariate shift。
网络结构也发生了变化,用两层堆叠3*3或者5*5,比起V1来说参数量少了,计算量少了,但层数增加,效果更好,如下:
这里写图片描述

(3)Inception V3:
Inception V3的目的是研究如何在增加网络规模的同时保证计算高效率,这篇论文中还提出了一些CNN调参的经验型规则。
1、避免特征表征的瓶颈,特征表征就是指图像在CNN某层的激活值,特征表征的大小在CNN中应该是缓慢的减小的。
2、高维的特征更容易处理,在高维特征上训练更快,更容易收敛
3、低维嵌入空间上进行空间汇聚,损失并不是很大。这个的解释是相邻的神经单元之间具有很强的相关性,信息具有冗余。
4、平衡的网络的深度和宽度。宽度和深度适宜的话可以让网络应用到分布式上时具有比较平衡的computational budget。
网络结构最大的变化则是用了1*n结合n*1来代替n*n的卷积,结构如下:
这里写图片描述

(4)ResNet:
ResNet主要解决的问题,就是在深度网络中的退化的问题。作者在论文中明确表明,在深度学习的领域中,常规网络的堆叠并不会是越深效果则越好,在超过一定深度以后,准确度开始下降,并且由于训练集的准确度也在降低,证明了不是由于过拟合的原因。
在ResNet中增加一个identity mapping(恒等映射),将原始所需要学的函数H(x)转换成F(x)+x,而作者认为这两种表达的效果相同,但是优化的难度却并不相同,作者假设F(x)的优化 会比H(x)简单的多。这一想法也是源于图像处理中的残差向量编码,通过一个reformulation,将一个问题分解成多个尺度直接的残差问题,能够很好的起到优化训练的效果。具体论文笔记在此博客论文笔记中有详细解释。
核心block结构如下:
这里写图片描述

(5)Inception V4:
Inception V4主要利用残差连接(Residual Connection),也就是ResNet的核心思想来改进V3结构。证明了Inception模块结合Residual Connection可以极大地加速训练,同时性能也有提升,得到一个Inception-ResNet V2网络,同时还设计了一个更深更优化的Inception v4模型,能达到与Inception-ResNet V2相媲美的性能。

(6)ResNeXt:
ResNeXt是ResNet的极限版本,代表着the next dimension。ResNeXt的论文证明了增大Cardinality(即ResNeXt中module个数)比增大模型的width或者depth效果更好,与ResNet相比参数更少,效果也更好,结构简单方便设计。
这里写图片描述

(7)Xception:
Xception是Inception系列网络的极限版本,作者提出来一个最为重要的方法是Depthwise Separable Convlution,这在后面的MobileNet中也有体现,核心思想在于空间变换、通道变换。和Inception V3不同是先做1*1的卷积,再做3*3的卷积,这样就先将通道进行了合并,即通道卷积,然后再进行空间卷积,而Xception则正好相反,先进行空间的3*3卷积,再进行通道的1*1卷积,区别如下:
这里写图片描述

(8)MobileNet:
MobileNets其实就是Xception思想的应用。区别就是Exception文章重点在提高精度,而MobileNets重点在压缩模型,同时保证精度。Depthwiseseparable convolutions的思想就是,分解一个标准的卷积为一个depthwise convolutions和一个pointwise convolution。简单理解就是矩阵的因式分解,具体步骤如下图左所示。
与传统卷积的深度分离卷积的结构block的区别如下图右所示:
这里写图片描述

假设,输入的feature map大小为DF * DF,维度为M,滤波器的大小为DK * DK,维度为N,并且假设padding为1,stride为1。则,原始的卷积操作,需要进行的矩阵运算次数为DK*DK*M*N*DF*DF,卷积核参数为DK *DK *N。
Depthwise separable convolutions需要进行的矩阵运算次数为DK*DK*M*DF*DF + M *N *DF*DF,卷积核参数为DK *DK *M+N。
由于卷积的过程,主要是一个spatial dimensions减少,channel dimension增加的过程,即N>M,所以,DK *DK *N> DK *DK *M+N。
因此,depthwiseseparable convolutions在模型大小上和模型计算量上都进行了大量的压缩,使得模型速度快,计算开销少,准确性好。

(9)ShuffleNet:
这篇文章在mobileNet的基础上主要做了1点改进:mobileNet只做了3*3卷积的deepwiseconvolution,而1*1的卷积还是传统的卷积方式,还存在大量冗余,ShuffleNet则在此基础上,将1*1卷积做了shuffle和group操作,实现了channel shuffle 和pointwise group convolution操作,最终使得速度和精度都比mobileNet有提升。
具体结构如下图所示:
这里写图片描述

(a)是原始的mobileNet的框架,各个group之间相互没有信息的交流。
(b)将feature map做了shuffle操作
(c)是经过channel shuffle之后的结果。
shufflenet中也采用了分组卷积的思想,效果非常显著,间接说明了,实际上一种高效的神经网络结构设计就是应该是分组的,而不是和一般的Conv或者InnerProduct那样全部连接在一起——类似信息应该被共享,不需要重复提取;不同的分组会承担不同的功能,并且这些功能是可以被训练的。这能够告诉我们,信息是需要浓缩的。

(10)DenseNet:
DenseNet是最近的2017CVPR的best paper,尽管是基于ResNet,但是不同的是为了最大化网络中所有层之间的信息流,作者将网络中的所有层两两都进行了连接,使得网络中每一层都接受它前面所有层的特征作为输入。由于网络中存在着大量密集的连接,作者将这种网络结构称为 DenseNet,结构如下图左所示:
这里写图片描述

它主要拥有以下两个特性:
1、一定程度上减轻在训练过程中梯度消散的问题。因为从上左图我们可以看出,在反传时每一层都会接受其后所有层的梯度信号,所以不会随着网络深度的增加,靠近输入层的梯度会变得越来越小。
2、由于大量的特征被复用,使得使用少量的卷积核就可以生成大量的特征,最终模型的尺寸也比较小。
一个完整的DesNet结构如下图:
这里写图片描述
论文对网络进行设计的几个要点也进行了说明如下:
1、为了进行特征复用,在跨层连接时使用的是在特征维度上的 Concatenate 操作,而不是 Element-wise Addition操作。
2、由于不需要进行 Elewise-wise 操作,所以在每个单元模块的最后不需要一个 1X1 的卷积来将特征层数升维到和输入的特征维度一致。
3、采用 Pre-activation 的策略来设计单元,将 BN 操作从主支上移到分支之前。(BN->ReLU->1x1Conv->BN->ReLU->3x3Conv)。
4、由于网络中每层都接受前面所有层的特征作为输入,为了避免随着网络层数的增加,后面层的特征维度增长过快,在每个阶段之后进行下采样的时候,首先通过一个卷积层将特征维度压缩至当前输入的一半,然后再进行 Pooling 的操作。
5、增长率的设置。增长率指的是每个单元模块最后那个 3x3 的卷积核的数量,记为 k。由于每个单元模块最后是以 Concatenate 的方式来进行连接的,所以每经过一个单元模块,下一层的特征维度就会增长 k。它的值越大意味着在网络中流通的信息也越大,相应地网络的能力也越强,但是整个模型的尺寸和计算量也会变大。作者在本文中使用了 k=32 和 k=48 两种设置。

三、总结与展望:
本文基于ResNet入手,将ResNet前后优秀的网络结构设计进行了梳理和核心点的概括。总的来看,近年来在会议上有越来越多的手工设计网络的出现,一步步取代传统的网络单纯变深的思路,学界也越来越关注于寻找模型压缩和优化的方法用于处理recognition与classification这两个计算机视觉方面最为重要的问题。不要是要让accuracy更小、mAP更高、收敛曲线更好,同时还要减少计算的空间和成本。从MobileNet我们也可以看出,由于更多框架的搭建,更少的减少卷积层的内部冗余,提高运算性能和网络性能,在业界这也为深度学习向移动端发展提供了可能。
手动设计网络结构的不断演进,喷井式的网络结构优化论文的发辫,我们目前谈论的手工设计的神经网络结构将会被很快淘汰。但从前人的论文中我们应该吸收他们的创意和思路,并且寻找到新的方法。对未来的设想是随着网络的不断进化,以后甚至可以自动根据训练数据学习得到的“更适合”的网络结构所代替,只是固定网络的基本结构,而整个神经网络的拓扑结构可以在训练中被自动发现、设计,而不再是手动设计,这样的网络可以不断在场景中升级演化。

四、参考文献(对应正文第二部分的顺序):
[1] Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2015:1-9.
[2] Ioffe S, Szegedy C. Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift[J]. 2015:448-456.
[3] Szegedy C, Vanhoucke V, Ioffe S, et al. Rethinking the Inception Architecture for Computer Vision[J]. 2015:2818-2826.
[4] He K, Zhang X, Ren S, et al. Deep Residual Learning for Image Recognition[J]. 2015:770-778.
[5] Szegedy C, Ioffe S, Vanhoucke V, et al. Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning[J]. 2016.
[6] Xie S, Girshick R, Dollar P, et al. Aggregated Residual Transformations for Deep Neural Networks[J]. 2016.
[7] Chollet F. Xception: Deep Learning with Depthwise Separable Convolutions[C]// IEEE Conference on Computer Vision and Pattern Recognition. IEEE Computer Society, 2017:1800-1807.
[8] Howard A G, Zhu M, Chen B, et al. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications[J]. 2017.
[9] Zhang X, Zhou X, Lin M, et al. ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices[J]. 2017.
[10] Huang G, Liu Z, Maaten L V D, et al. Densely Connected Convolutional Networks[J]. 2016.

<think>嗯,用户想提升YOLOv11模型的收敛速度。我得先回忆一下相关的知识。YOLO系列的模型训练通常涉及学习率调整、优化器选择、数据增强、预训练模型使用等方面。首先,根据引用[3],调整学习率和使用预训练模型是常见的方法。用户可能已经尝试过一些基础设置,但效果不佳,需要更具体的建议。 接下来,我需要考虑YOLOv11的具体结构。比如,它可能引入了新的模块或优化策略,比如不同的特征融合方式或更高效的网络设计。这时候,优化学习率调度器可能有效,比如使用余弦退火或预热策略,这有助于在训练初期稳定训练,后期加速收敛。 数据增强方面,引用[4]提到数据增强对泛化能力的重要性。但过强的增强可能增加训练难度,影响收敛速度。所以平衡增强强度和模型适应性是关键。也许建议用户适当减少增强的强度,或者采用动态增强策略,逐步增加难度。 优化器的选择也很重要。AdamW相比传统的SGD可能收敛更快,尤其是在结合权重衰减的情况下。引用[3]也提到了调整学习率和优化器的方法,所以这里需要具体到YOLOv11的实现细节,是否有推荐的优化器参数。 模型结构方面,如果用户有能力调整网络结构,比如减少某些冗余层或使用更高效的模块,可能提升训练速度。不过,这需要一定的模型设计经验,用户可能希望更简单的调整,比如调整宽度和深度因子,这通常在YOLO系列模型中存在相关参数。 另外,混合精度训练可以显著加速训练,同时节省显存。需要确保用户的硬件支持FP16,并且框架(如PyTorch)已正确配置。这几乎是现代训练中的标配,但用户可能没有启用,或者需要调整相关参数。 正则化策略如Dropout和权重衰减也需要调整。过强的正则化会抑制模型学习,延长收敛时间,而太弱则可能导致过拟合。引用[3]提到调整网络结构和参数数量,这可能与正则化有关联。 最后,分布式训练和多GPU支持可以缩短训练时间,但可能对资源有要求。用户是否具备这样的环境?如果有,建议开启分布式训练,并合理调整批次大小。 综合这些点,我需要将这些方法分门别类,逐步建议用户调整学习率、优化器、数据增强、预训练模型、混合精度等。同时,结合引用中的信息,确保建议有依据。还要注意用户可能遇到的问题,比如过拟合或欠拟合,以及如何平衡收敛速度和模型性能。</think>### 分步解决方案:加速 YOLOv11 模型训练收敛速度的方法 #### 1. **优化学习率设置** - **使用学习率预热(Warmup)**:在训练初期逐步增加学习率,避免梯度爆炸或不稳定。例如,前 500 步从 $0$ 线性增长到目标学习率[^3]。 - **动态调整学习率**:采用余弦退火(Cosine Annealing)或分段衰减策略,根据训练阶段调整学习率。例如: $$ \text{learning\_rate} = \text{base\_lr} \times \frac{1}{2}(1 + \cos(\frac{T_{\text{current}}}{T_{\text{max}}}\pi)) $$ - **引用实践**:通过调整学习率策略可显著加速收敛。 #### 2. **选择高效优化器** - **使用 AdamW 或 Lion 优化器**:AdamW 结合了自适应学习率和权重衰减,适用于复杂模型;Lion 优化器在部分任务中收敛更快[^3]。 - **配置权重衰减**:例如设置 `weight_decay=0.05`,防止过拟合并提升泛化能力。 #### 3. **数据增强与预处理** - **平衡数据增强强度**:过度增强(如大范围裁剪、旋转)会增加模型学习难度。建议采用轻量级增强(如 Mosaic、Mixup)并在后期训练逐步减弱。 - **启用缓存加载**:将预处理后的数据缓存到内存或高速存储,减少 I/O 延迟。例如在 YOLO 中设置 `cache=ram`。 #### 4. **利用预训练模型** - **加载预训练权重**:使用官方提供的 YOLOv11 预训练模型(如 `yolov11n.pt`)初始化参数,而非从头训练[^2]。 - **冻结部分层**:对底层特征提取层进行冻结,仅微调高层网络,减少计算量。 #### 5. **混合精度训练(AMP)** - **启用 FP16 模式**:通过降低计算精度(如 `amp=True`)加速训练,同时减少显存占用。需确保 GPU 支持 Tensor Core(如 NVIDIA Volta 及以上架构)。 - **梯度缩放**:在混合精度训练中自动缩放梯度,避免下溢。 #### 6. **调整模型结构参数** - **优化宽度与深度因子**:例如修改 YOLOv11 的 `width_factor` 和 `depth_factor`,降低模型复杂度(如从 1.0 调整为 0.75)。 - **简化检测头**:减少检测头的层数或通道数,降低计算量。 #### 7. **分布式训练与硬件优化** - **多 GPU 并行训练**:使用 `DP`(数据并行)或 `DDP`(分布式数据并行)模式,提升批量数据处理速度。 - **增大批次大小(Batch Size)**:在显存允许范围内增大 `batch_size`(如从 16 提升到 64),但需同步调整学习率。 #### 8. **监控与调试** - **可视化训练过程**:通过工具(如 TensorBoard)监控损失曲线,若损失震荡剧烈需降低学习率。 - **早停机制(Early Stopping)**:当验证集损失连续多个 epoch 不下降时提前终止训练。 --- ### 示例配置(YOLOv11 训练参数) ```yaml # YOLOv11n 加速收敛配置示例 hyperparams: lr0: 0.01 # 初始学习率 lrf: 0.2 # 最终学习率衰减比例(余弦退火) warmup_epochs: 5 # 学习率预热 optimizer: AdamW # 优化器 weight_decay: 0.05 amp: True # 启用混合精度 batch_size: 64 data_aug: mosaic=0.5, mixup=0.1 ``` --- ### 注意事项 1. 若训练早期损失下降缓慢,检查数据加载是否出现瓶颈(如磁盘读取速度)。 2. 收敛速度与模型最终精度需平衡,过度优化可能降低模型鲁棒性[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值