
细粒度图像分类的黄金训练方案大揭秘 原创
本文提出一种优化的细粒度图像分类训练方案。通过整合大批量训练、学习率预热、TrivialAugment增强、余弦退火、标签平滑、随机擦除及EMA等现代训练技术,显著提升了ResNet-50等通用骨干网络在斯坦福汽车数据集上的性能,证明了高效训练流程的关键作用,无需依赖特定架构改进。
简介
在过去一年里,我在Multitel的研究主要集中在细粒度视觉分类(FGVC)上。具体来说,我致力于构建一个可在边缘设备上实时运行的鲁棒性强的汽车分类器。
我希望本文能让大家了解我们在Multitel所做的高水平工程和应用研究,我们将学术严谨性与现实世界的约束相结合。无论你是同行研究员、充满好奇心的工程师,还是正在考虑加入我们团队的人士,我都希望这篇文章能够为你提供见解和灵感。
1.问题
我们需要一个能够识别特定车型的系统,而不仅仅是“这是宝马”,而是识别宝马的具体型号和年份。并且,它需要在资源受限的边缘设备上与其他车型一起实时运行。这类任务属于所谓的细粒度视觉分类(FGVC)问题。
两个模型及其判别部分的示例(【引文1】)
FGVC旨在识别属于某个超类别的多个下属类别的图像(例如,动物/植物类别、汽车模型等)。其难点在于理解细粒度的视觉差异,以充分区分整体外观高度相似但细粒度特征不同的物体(【引文2】)。
细粒度分类与一般图像分类(【引文3】)
那么,是什么使得FGVC变得特别棘手呢?
- 类别间差异小:类别之间的视觉差异可能非常微妙。
- 类别内差异大:同时,同一类别内的实例可能会因光照、姿势、背景或其他环境因素的变化而发生很大差异。
- 细微的视觉差异很容易被姿势和观点等其他因素所掩盖。
- 长尾分布:数据集通常包含少量样本,而许多类别的样本却很少。例如,你可能只有几张在偏远地区发现的稀有蜘蛛物种的图像,而常见物种的图像却有数千张。这种不平衡使得模型难以在所有类别中都获得同等的学习效果。
CUB200数据集中的两种海鸥说明了细粒度物体分类的难度(【引文4】)
2.整体分析
当我们最初开始着手解决这个问题时,我们自然而然地转向了文献参考方面。我们深入研究了有关学术论文,考察了基准数据集,并探索了最先进的FGVC方法。起初,这个问题看起来比实际情况要复杂得多,至少在我们特定的环境下是如此。
多年来,FGVC一直受到广泛研究,其中不乏引入日益复杂的架构和流程的方法。例如,许多早期研究提出了两阶段模型:首先,定位子网络识别具有判别性的物体部分,然后第二个网络基于这些部分进行分类。其他研究则侧重于自定义损失函数、高阶特征交叉项或使用分层结构的标签依赖关系建模。
所有这些方法都是为了解决细微的视觉差异而设计的,而正是这些差异使得FGVC如此具有挑战性。如果你对这些方法的演变感兴趣,Wei等人(【引文2】)提供了一篇详尽的综述,深入探讨了其中的许多方法。
基于深度学习的细粒度图像分析(FGIA)领域概述(【引文2】)
当我们仔细研究最近的基准测试结果(存档自Papers with Code)时,我们发现许多性能最佳的解决方案都基于Transformer架构。这些模型通常达到了最佳准确率,但很少或根本没有讨论推理时间或部署限制。考虑到我们的要求,我们相当肯定这些模型无法在已经并行运行多个模型的边缘设备上实时运行。
在进行此项研究时,斯坦福汽车上报告的最佳结果是由CMAL-Net实现的97.1%的准确率。
3. 我们的方法
我们没有从最复杂或最专业的解决方案入手,而是采取了相反的方法:一个我们已经知道能够满足实时性和部署约束的模型,能否在任务中表现得足够好?具体来说,我们思考的是,一个可靠的通用架构,如果经过适当的训练,能否让我们接近更新、更强大的模型的性能。
这种思路引导我们阅读了RossWightman等人的论文《ResNet反击:Timm中的一种改进训练程序》。在此论文中,Wightman提出了一个令人信服的论点:大多数新架构都使用最新的进展和技术进行训练,但随后会与使用过时方法训练的旧基线进行比较。Wightman认为,经常用作基准的ResNet-50往往未能从这些现代改进中获益。他的论文提出了一种改进的训练程序,并表明,即使是原始的ResNet-50,只要训练得当,也能取得令人惊讶的强劲结果,包括在多个FGVC基准测试中。
考虑到这些限制和目标,我们着手构建自己的强大、可复用的训练程序,使其能够在FGVC任务上实现高性能,而无需依赖特定于架构的技巧。我们的想法很简单:从ResNet-50等已知高效的骨干网络入手,专注于改进训练流程,而不是修改模型本身。这样,相同的方案以后只需进行少量调整即可应用于其他架构。
我们开始从多个来源收集想法、技术和训练改进,将最佳实践整合成一个统一、有凝聚力的流程。具体来说,我们借鉴了四个关键资源:
- 使用卷积神经网络进行图像分类的技巧(He等人)
- 卷积神经网络中组合技术性能的复合改进(Lee等人)
- ResNet反击:Timm中改进的训练程序(Wightman等人)
- 如何使用TorchVision的最新基元(Vryniotis)训练最先进的模型我们的目标是创建一个强大的训练流程,不依赖于特定于模型的调整。这意味着,我们要专注于广泛适用于各种架构的技术。
为了测试和验证我们的训练流程,我们使用了斯坦福汽车数据集(【引文9】),这是一个广泛使用的细粒度分类基准,与我们的实际用例高度契合。该数据集包含196个汽车类别和16,185张图片,所有图片均从车尾拍摄,以突出类别间的细微差异。数据几乎均匀地分为8,144张训练图像和8,041张测试图像。为了模拟我们的部署场景,即分类模型在目标检测系统的下游运行,我们在训练和评估之前将每张图像裁剪到其带注释的边界框中。
虽然该数据集的原始托管网站已不再可用,但仍可通过Kaggle和Huggingface等精选存储库访问。该数据集根据BSD-3-Clause许可证分发,允许商业和非商业用途。在本研究中,该数据集仅用于研究,以产生本文中所示的结果。
斯坦福汽车数据集(【引文9】)中裁剪图像的示例
制作方案
接下来是我们经过实验、迭代以及对上述研究成果的精心汇总而得出的精炼训练方案。其目的是表明,只需应用现代训练最佳实践,无需任何特定于架构的技巧,我们就能使像ResNet-50这样的通用模型在细粒度基准测试中表现出色。
我们将从使用基本设置训练的原始ResNet-50开始,逐步引入改进。
对于每种技术,我们将报告:
- 个人绩效增益
- 添加到管道时的累积增益虽然我们所使用的许多技术可能都很熟悉,但我们的目的是强调,如果将这些技术巧妙地组合起来,就能发挥出多么强大的威力。基准测试通常会将使用最新进展训练的新架构与使用过时方法训练的旧基线进行比较,从而掩盖这一点。在这里,我们想颠覆这种现状,展示将精心调整的方法应用于广泛使用的高效主干网络,能够带来怎样的潜力。
我们也意识到这些技术中有很多是相互影响的。因此,在实践中,我们通过贪婪搜索或网格搜索调整了一些组合,以考虑协同效应和相互依赖性。
基本方案
在深入优化之前,我们先从一个干净、简单的基线开始。
我们使用斯坦福汽车数据集,在ImageNet上训练一个预训练好的ResNet-50模型。每个模型在单个RTX4090 GPU上训练600个epoch,并根据验证集准确率提前停止训练,训练周期为200个epoch。
我们使用:
- Nesterov加速梯度(NAG)优化
- 学习率:0.01
- 批次大小:32
- 动量:0.9
- 损失函数:交叉熵所有训练和验证图像均裁剪至其边界框,并调整为224×224像素。我们采用与引文5中相同的标准增强策略。
以下是基础训练配置及其性能的摘要:
我们在每次运行中固定随机种子,以确保可重复性并减少实验之间的差异。为了评估方案变化的真实效果,我们遵循最佳实践,并对多次运行(通常为3到5次)的结果进行平均。
现在,我们将在此基础上逐步构建,每次介绍一种技术,并追踪其对准确率的影响。目标是分离出每个组成部分的贡献,以及它们组合应用时如何产生协同效应。
大批量训练
在小批量随机梯度下降(SGD)中,梯度下降是一个随机过程,因为每个批次中的样本都是随机选择的。增加批次大小不会改变随机梯度的期望,但会降低其方差。然而,使用较大的批次大小可能会减慢训练进度。对于相同的迭代次数,使用较大的批次大小进行训练会导致模型的验证准确率低于使用较小批次大小进行训练的模型。
He等人(【引文5】)认为,随着批量大小的增加,学习率呈线性增加,对于ResNet-50训练来说,具有经验有效性。
为了提高训练的准确性和速度,我们将批次大小更改为128,学习率更改为0.1。我们添加了一个StepLR调度程序,每30个epoch将每个参数组的学习率衰减0.1。
学习率预热
由于在训练开始时所有参数通常都是随机值,使用过大的学习率可能会导致数值不稳定。
在预热启发式方法中,我们一开始使用较小的学习率,然后在训练过程稳定后切换回初始学习率。我们采用渐进式预热策略,将学习率从0线性增加到初始学习率。
我们添加了5个时期的线性预热策略。
学习率曲线(作者本人提供图片)
琐碎增强算法
为了探索更强大的数据增强效果,我们用TrivialAugment替换了基准增强。TrivialAugment的工作原理如下:它以图像x和一组增强项A作为输入。然后,它简单地从A中均匀随机地采样一个增强项,并将此增强项应用于给定图像x,强度为m(从可能的强度集合{0,...,30}中均匀随机采样),并返回增强后的图像。
TrivialAugment特别吸引人的地方在于它完全不需要参数,不需要搜索或调整,使其成为一种简单而有效的替代品,可以降低实验的复杂性。
虽然这种通用且随机的策略会优于专门针对数据集进行的数据增强或更复杂的自动增强方法,这似乎违反直觉,但我们尝试了多种替代方案,TrivialAugment在多次运行中始终表现出色。它的简单性、稳定性以及出人意料的高效性使其成为一个引人注目的默认选择。
TrivialAugment的可视化(【引文10】)
余弦学习率衰减
接下来,我们探索了修改学习率方案。我们改用了余弦退火策略,该策略遵循余弦函数将学习率从初始值降低到0。余弦函数的一大优势在于无需优化超参数,这进一步缩小了我们的搜索空间。
更新的学习率曲线(作者本人提供图片)
标签平滑
减少过拟合的一个好方法是阻止模型变得过于自信。这可以通过使用标签平滑来软化基本事实来实现。其思路是将真实标签的构造更改为:
我们需要指定一个参数来控制平滑程度(越高越强)。我们使用的平滑因子为ε=0.1,这是原始论文中提出的标准值,并在文献中被广泛采用。
有趣的是,我们通过经验发现,添加标签平滑功能可以降低训练过程中的梯度方差。这使我们能够安全地提高学习率,而不会破坏训练的稳定性。因此,我们将初始学习率从0.1提高到了0.4。
随机擦除
作为正则化的附加形式,我们在训练流程中引入了随机擦除。该技术会在图像中随机选择一个矩形区域,并以固定概率用随机值替换其像素。
它通常与自动增强方法结合使用,由于其正则化效果,通常会在准确性方面产生额外的提高。我们添加了概率为0.1的随机擦除。
随机擦除的示例(【引文11】)
指数移动平均线(EMA)
使用小批量训练神经网络时,梯度下降法会在批次间更新模型参数,从而引入噪声并降低梯度的准确性。指数移动平均法用于训练深度神经网络,以提高其稳定性和泛化能力。
EMA不仅仅使用在训练期间直接学习的原始权重,还维护模型权重的运行平均值,然后在每个训练步骤中使用当前权重和先前EMA值的加权平均值进行更新。
具体来说,在每个训练步骤中,EMA权重使用以下方法更新:
其中,θ是当前模型权重,α是控制赋予过去多少权重的衰减因子。
通过在测试时评估EMA权重而不是原始权重,我们发现运行过程中的性能一致性有所提高,尤其是在训练的后期阶段。
我们单独测试了EMA,发现它在训练稳定性和验证性能方面都取得了显著提升。但当我们将EMA与其他技术整合到整个方案中时,它并没有带来进一步的提升。结果似乎停滞不前,这表明大部分提升已经被其他组件吸收了。
由于我们的目标是开发通用的训练方案,而不是过度针对单个数据集的方案,因此我们选择在最终设置中保留EMA。它的优势在其他条件下可能更为明显,而且其低开销使其成为安全的选择。
我们测试过但未采用的优化
我们还探索了一系列在其他图像分类任务中通常有效的附加技术,但发现它们要么没有带来显著的改进,要么在某些情况下在斯坦福汽车数据集上的性能略有下降:
- 权重衰减:添加L2正则化,以抑制训练过程中的过大权重。我们在用例中对权重衰减进行了广泛的实验,但它始终会导致性能下降。
- Cutmix/Mixup:Cutmix会替换图像之间的随机图块,并混合相应的标签。Mixup则通过线性组合图像和标签对来创建新的训练样本。我们尝试在训练过程中以相同的概率随机应用CutMix或MixUp,但这种方法会导致结果回归。
- AutoAugment算法:AutoAugment算法取得了优异的结果和颇具竞争力的准确率,但我们发现TrivialAugment算法的表现更佳。更重要的是,TrivialAugment算法完全无需参数,这缩小了我们的搜索空间并简化了调优过程。
- 备选优化器和调度器:我们尝试了多种优化器和学习速率调度方案。Nesterov加速梯度(NAG)在所有优化器中始终表现最佳,而余弦退火则脱颖而出,成为最佳调度器,无需额外调整超参数即可获得优异的结果。
4.结论
下图总结了我们逐步建立训练方案时所取得的改进:
模型改进带来的累积准确率提升(图片由作者本人提供)
仅使用标准ResNet-50,我们就能够在斯坦福汽车数据集上取得出色的性能,这表明仔细调整一些简单的技术可以在细粒度分类中发挥很大作用。
然而,务必正确看待这一点。这些结果主要表明,我们可以训练一个模型,在干净、精选的数据集中区分细粒度、代表性良好的类别。斯坦福汽车数据集几乎是类别平衡的,包含高质量图像,大部分为正面图像,并且没有严重的遮挡或现实世界噪声。但它并未解决诸如长尾分布、领域转移或未知类别识别等挑战。
实际上,你永远不可能拥有一个涵盖所有车型的数据集——尤其是随着新车型的出现而每天更新的数据集。现实世界的系统需要处理分布偏移、开放集识别和不完美的输入。
因此,虽然这可以作为强有力的基础和概念证明,但要构建强大且可投入生产的产品,仍有大量工作要做。
参考文献
【1】Krause, Deng等人,《收集大规模细粒度汽车数据集》
【2】Wei等,《基于深度学习的细粒度图像分析:一项综述》
【3】Reslan和Farou,《利用深度学习对鸟类物种进行自动细粒度分类》
【4】赵某等,《基于深度学习的细粒度对象分类与语义分割综述》
【5】何等人,《利用卷积神经网络进行图像分类的技巧包》
【6】Lee等人,《复合卷积神经网络中组装技术的性能改进》
【7】Wightman等人,《ResNet反击:Timm中改进的训练程序》
【8】Vryniotis,《如何使用TorchVision的最新基元训练最先进的模型》
【9】Krause等人,《用于细粒度分类的3D对象表示》
【10】Müller与Hutter,《TrivialAugment:无需调优但最先进的数据增强方法》
【11】Zhong等,《随机擦除数据增强》
译者介绍
朱先忠,51CTO社区编辑,51CTO专家博客、讲师,潍坊一所高校计算机教师,自由编程界老兵一枚。
原文标题:A Refined Training Recipe for Fine-Grained Visual Classification,作者:Ahmed Belgacem
