本文档介绍了YOLOv5中用于提高模型泛化能力和性能的数据增强技术。数据增强通过创建训练图像的修改版本来人为地扩展数据集,使模型能够暴露于各种图像变化。有关数据加载的信息,请参阅数据加载。
YOLOv5实现了一个全面的数据增强流程,在训练期间对图像应用各种变换。这些增强通过使模型接触同一对象的不同变体,帮助模型学习鲁棒的特征并提高泛化能力。
增强流程旨在
来源: utils/dataloaders.py772-830 utils/augmentations.py2-3
YOLOv5的增强系统在加载训练数据时按特定顺序应用变换。该流程主要在 LoadImagesAndLabels.__getitem__ 方法中实现。
此流程与 LoadImagesAndLabels 类紧密集成,该类协调何时以及如何将增强应用于每个训练数据批次。
来源: utils/dataloaders.py772-846 utils/dataloaders.py879-936
Mosaic 增强将4张训练图像合并为一张图像,使模型能够学习在不同尺度和不同上下文中识别对象。
实现细节
来源: utils/dataloaders.py879-936
MixUp通过使用Beta分布混合两个图像及其标签来创建新的训练样本。
主要特性
img = img1 * r + img2 * (1-r)来源: utils/augmentations.py294-303
此技术对图像应用各种几何变换,同时正确调整边界框。
由超参数控制的参数
degrees:控制旋转范围(默认为±10°)translate:控制平移百分比(默认为0.1 = 10%)scale:控制缩放因子(默认为0.1 = ±10%)shear:控制剪切量(默认为±10°)perspective:控制透视失真(默认为0.0)来源: utils/augmentations.py155-234
在HSV(色调、饱和度、亮度)颜色空间中修改图像颜色。
实现细节
hsv_h、hsv_s 和 hsv_v来源: utils/augmentations.py74-87
简单但有效的增强,可以水平或垂直镜像图像。
fliplr):镜像图像左右翻转并调整边界框坐标flipud):镜像图像上下翻转并调整边界框坐标以超参数 fliplr 和 flipud 控制的概率应用
来源: utils/dataloaders.py823-833
此技术将图像的一部分复制并粘贴到其他位置,以增加对象的实例计数。
实现细节
p (默认为0.5)随机选择片段来源: utils/augmentations.py237-260
Cutout 随机遮盖图像中的矩形区域,迫使模型从部分信息中识别对象。
实现细节
来源: utils/augmentations.py263-291
YOLOv5 可选支持 Albumentations 库,用于额外的增强方法
可用变换(带默认概率)
来源: utils/augmentations.py20-55
YOLOv5 的增强功能通过 YAML 文件中定义的超参数进行控制。以下是关键参数的摘要
| 参数 | 描述 | 默认值 | 范围 |
|---|---|---|---|
mosaic | Mosaic 增强的概率 | 1.0 | 0.0-1.0 |
mixup | MixUp 增强的概率 | 0.0 | 0.0-1.0 |
degrees | 图像旋转(+/- 度) | 0.0 | 0.0-45.0 |
translate | 图像平移(+/- 比例) | 0.1 | 0.0-1.0 |
scale | 图像缩放(+/- 增益) | 0.5 | 0.0-1.0 |
shear | 图像剪切(+/- 度) | 0.0 | 0.0-45.0 |
perspective | 图像透视(+/- 比例) | 0.0 | 0.0-0.001 |
flipud | 图像上下翻转的概率 | 0.0 | 0.0-1.0 |
fliplr | 图像左右翻转的概率 | 0.5 | 0.0-1.0 |
hsv_h | 图像 HSV 色调增强(比例) | 0.015 | 0.0-1.0 |
hsv_s | 图像 HSV 饱和度增强(比例) | 0.7 | 0.0-1.0 |
hsv_v | 图像 HSV 亮度增强(比例) | 0.4 | 0.0-1.0 |
copy_paste | 片段复制粘贴的概率 | 0.0 | 0.0-1.0 |
来源: utils/dataloaders.py776-847
增强可以通过多种方式控制
通过命令行参数
--augment / --no-augment:启用/禁用所有增强--rect:矩形训练(禁用 mosaic)--image-weights:图像加权(禁用矩形训练)通过修改超参数文件
程序限制
来源: utils/dataloaders.py566-567
YOLOv5 包含针对分割任务的专用增强处理,这些处理必须同时修改边界框和分割掩码。
主要的分割特定功能
来源: utils/segment/dataloaders.py130-235 utils/segment/augmentations.py14-92
增强的顺序很重要,以防止冲突
增强仅在训练期间应用。在验证期间
来源: utils/dataloaders.py160-169 utils/dataloaders.py772-776
增强流程针对性能进行了优化