YOLO中的数据增强|Mixup、Copy-paste、Mosaic解释

🌲🌲🌲前言

从事算法的同学们都应该了解数据在模型效果上的重要性,海量的数据📊更是能"大力出奇迹",但现实中数据往往没有那么理想。在自然界中,有的类别能采集到的图片数量是十分稀少的,这种样本不均衡的问题会导致该类的精度较低;目标检测这种需要用矩形框、多边形框标注物体位置的任务,往往会消耗大量的人力物力和时间。

针对这个问题,研究者们🧑‍🎓提出了各种各样的解决方法和研究课题。一种方法是使用自监督学习,只需要收集大量的图片,并不需要额外给图片打标注,让模型自动化地学习数据内里的特征。一种方法是研究少样本学习方法,比如元学习等,这里就不展开了。还有一种方法是最简单的,就是对数据做各种各样的变换,让模型学到更多的特征。

YOLO中常用的随机翻转、旋转、HSV变换这里先不赘述了,这篇博客将重点介绍YOLO中常用的Mixup、Copy-Paste和Mosaic方法,这些方法都是将多张图片贴合在一起,作为一张图片喂进神经网络中。

1⃣️Mixup

Mixup指的是随机在训练集中抽取两类,用线性插值方法将他们混合在一起。如下图将猫狗🐱🐶按一定比例融合到一张图片中,这张图片的输出标签也按一定比例计算。

即输入为:

<math xmlns="http://www.w3.org/1998/Math/MathML"> x 猫狗混合 = λ x 猫 + ( 1 − λ ) x 狗 x_{猫狗混合} = \lambda x_猫 + (1-\lambda) x_狗 </math>x猫狗混合=λx猫+(1−λ)x狗

输出标签为:

<math xmlns="http://www.w3.org/1998/Math/MathML"> y 猫狗混合 = λ y 猫 + ( 1 − λ ) y 狗 y_{猫狗混合} = \lambda y_猫 + (1-\lambda) y_狗 </math>y猫狗混合=λy猫+(1−λ)y狗

这就构成了一个新的输入和标签样本: <math xmlns="http://www.w3.org/1998/Math/MathML"> ( x 猫狗混合 , y 猫狗混合 ) (x_{猫狗混合},y_{猫狗混合}) </math>(x猫狗混合,y猫狗混合)。

为什么这样做能让模型更鲁棒呢?论文 《mixup: Beyond Empirical Risk Minimization》解释了原理。

在机器学习中,模型的风险分为三种------经验风险、期望风险和结构风险。期望风险指的是理想情况下的模型损失,即对世界上所有存在的样本求损失,这当然是不可能实现的,期望损失为:

<math xmlns="http://www.w3.org/1998/Math/MathML"> I ( f ( x ) , y ) I(f(x),y) </math>I(f(x),y)为模型输出的损失, <math xmlns="http://www.w3.org/1998/Math/MathML"> P ( x , y ) P(x,y) </math>P(x,y)为样本的联合概率分布。

而经验风险就是平时我们常用的损失函数,即给定有限的训练集( <math xmlns="http://www.w3.org/1998/Math/MathML"> x i , y i x_i,y_i </math>xi,yi),求出在这个训练集上的平均损失作为参考:

深度学习模型学到的内容强依赖于训练集,在跟训练集同分布的测试集上效果可能很好,但只要让测试集的分布跟训练集稍有差异,性能就会下降,所以模型泛化能力不足的体现。让模型对自己的输出结果少一些"自信",可以缓解模型在训练集上过拟合,这里将 <math xmlns="http://www.w3.org/1998/Math/MathML"> x x </math>x和 <math xmlns="http://www.w3.org/1998/Math/MathML"> y y </math>y同时变成概率分布,让模型去学习概率分布,而不是一个确定的标签输出,本人觉得这个思路跟label smoothing有异曲同工之妙。

2⃣️copy-paste 方法

copy-paste方法是谷歌团队在2021年提出的一种简单有效的数据增强方法。它将位于不同图片中的实例类别,粘贴到同一张图片中。

先将实例随机翻转,按不同的尺度调整大小,论文中提到了Large Scale Jittering和Standard Scale Jittering,前者的调整幅度较大,后者的调整幅度较小。对实例进行尺度调整能让模型更好地学习大小目标的特征。

Large Scale Jittering: 将图片的尺寸调整到原图的0.1~2.0倍

Standard Scale Jittering: 将图片的尺寸调整到原图的0.8~1.25倍

将两个实例融合粘贴到一起,增强后的图片 <math xmlns="http://www.w3.org/1998/Math/MathML"> I n I_n </math>In为:

<math xmlns="http://www.w3.org/1998/Math/MathML"> I n = I 1 × a + I 2 × ( 1 − a ) I_n =I_1 × a + I_2 × (1-a) </math>In=I1×a+I2×(1−a)

<math xmlns="http://www.w3.org/1998/Math/MathML"> I 1 I_1 </math>I1为从原图抠下来要被粘贴的实例, <math xmlns="http://www.w3.org/1998/Math/MathML"> I 2 I_2 </math>I2为主图片。为了平滑两张图片的边缘,这里使用了高斯平滑方法,实验结果表明,不要融合方法也对结果没有任何影响。

作者比较了一下用coco数据集测试了copy-paste策略在 Mask R-CNN上的性能。可以看到copy-paste方法比mixup方法精度更高,Large Scale Jittering尺度调整方法比Standard Scale Jittering的更好,这里我觉得是因为物体尺寸之间的差别越大,网络能学习的尺寸变多了。

3⃣️Mosaic

比起copy paste方法要将实例从图片中抠出来,在YoloV4方法中提出的Mosaic数据增强更加简单,先将四张图片做各种变换(比如翻转、调整尺寸等),再将他们拼贴在一起,作为网络的输入。这种方法不仅能提升模型的鲁棒性,也能减少mini-batchsize,加快训练的速度。

相关推荐
luoganttcc5 小时前
Taalas 将人工智能模型蚀刻到晶体管上,以提升推理能力
人工智能·fpga开发
冬奇Lab5 小时前
一天一个开源项目(第33篇):MyCodeAgent - 面向学习的 Claude Code 风格代码代理框架
人工智能·开源·资讯
散峰而望6 小时前
C++ 启程:从历史到实战,揭开命名空间的神秘面纱
c语言·开发语言·数据结构·c++·算法·github·visual studio
deephub6 小时前
RAG 中分块重叠的 8 个隐性开销与权衡策略
人工智能·大语言模型·rag·检索
Ethan Hunt丶6 小时前
MSVTNet: 基于多尺度视觉Transformer的运动想象EEG分类模型
人工智能·深度学习·算法·transformer·脑机接口
康康的AI博客6 小时前
智能情感分析与品牌策略优化:如何通过AI洞察提升企业市场响应力
大数据·数据库·人工智能
仟濹6 小时前
【算法打卡day10(2026-02-24 周二)复习算法:DFS BFS 并查集】
算法·深度优先·图论·dfs·bfs·广度优先·宽度优先
亚古数据6 小时前
法国公司的类型:探索法国企业的多样形态
大数据·人工智能·亚古数据·法国公司
星爷AG I6 小时前
12-11 印象加工(AGI基础理论)
人工智能·agi
-海绵东东-7 小时前
哈希表······················
算法·leetcode·散列表