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

🌲🌲🌲前言

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

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

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

1⃣️Mixup

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

即输入为:

x 猫狗混合 = λ x 猫 + ( 1 − λ ) x 狗 x_{猫狗混合} = \lambda x_猫 + (1-\lambda) x_狗 x猫狗混合=λx猫+(1−λ)x狗

输出标签为:

y 猫狗混合 = λ y 猫 + ( 1 − λ ) y 狗 y_{猫狗混合} = \lambda y_猫 + (1-\lambda) y_狗 y猫狗混合=λy猫+(1−λ)y狗

这就构成了一个新的输入和标签样本: ( x 猫狗混合 , y 猫狗混合 ) (x_{猫狗混合},y_{猫狗混合}) (x猫狗混合,y猫狗混合)。

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

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

I ( f ( x ) , y ) I(f(x),y) I(f(x),y)为模型输出的损失, P ( x , y ) P(x,y) P(x,y)为样本的联合概率分布。

而经验风险就是平时我们常用的损失函数,即给定有限的训练集( x i , y i x_i,y_i xi,yi),求出在这个训练集上的平均损失作为参考:

深度学习模型学到的内容强依赖于训练集,在跟训练集同分布的测试集上效果可能很好,但只要让测试集的分布跟训练集稍有差异,性能就会下降,所以模型泛化能力不足的体现。让模型对自己的输出结果少一些"自信",可以缓解模型在训练集上过拟合,这里将 x x x和 y y 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倍

将两个实例融合粘贴到一起,增强后的图片 I n I_n In为:

I n = I 1 × a + I 2 × ( 1 − a ) I_n =I_1 × a + I_2 × (1-a) In=I1×a+I2×(1−a)

I 1 I_1 I1为从原图抠下来要被粘贴的实例, I 2 I_2 I2为主图片。为了平滑两张图片的边缘,这里使用了高斯平滑方法,实验结果表明,不要融合方法也对结果没有任何影响。

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

3⃣️Mosaic

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

相关推荐
Zik----3 分钟前
CCswitch-code
人工智能
至乐活着1 小时前
深入解析跳表SkipList:原理、实现与性能优化实战
数据结构·算法·跳表·skiplist·java实现
AI科技星1 小时前
全域谱分析:无穷维超复数信息场分形统一场论 ——自然、量子、金融多重分形第一性原理完整体系(中英双语终稿)
人工智能·机器学习·金融·乖乖数学·全域数学
stormzhangV1 小时前
为什么你的 AI 像智障
人工智能
Jerry2 小时前
LeetCode 383. 赎金信
算法
ai产品老杨2 小时前
H264 H265视频分析常见问题和排查清单
人工智能·算法·音视频
项目经理老王2 小时前
OpenClaw无捆绑安装包,安全纯净版AI助手部署
人工智能·安全
Jerry2 小时前
LeetCode 454. 四数相加 II
算法
梦帮科技2 小时前
GRAVIS v4.0:基于Web的极速套利架构设计与实时数据流实现
前端·人工智能·rust·自动化·区块链·智能合约·数字货币
“码”力全开2 小时前
AI视频分析API性能优化指南
人工智能·性能优化·音视频