深度学习中的Mosaic数据增强
马赛克(Mosaic)数据增强:首次在YOLOv4论文中使用,是一种新的数据增强方法,它的思想是随机从数据集中选取多幅(如4幅)图像,然后分别对多幅图像进行翻转、缩放、色域变化等基础数据增强。该过程包括将合成图像划分为四个象限(quadrant),并从其它图像中随机选择补丁(patch)来填充这些象限。将这些补丁组合成Mosaic会创建一个新的训练样本,其中包含来自多幅图像的不同信息。这有助于模型通过将其暴露于各种背景、纹理和目标配置来更好地泛化。
Mosaic数据增强旨在通过在单个训练实例中提供多样化的视觉背景(visual context)来增强模型的学习能力,有助于使模型更加稳健(robust)。
Mosaic数据增强方法虽然可以生成大量图像,但可能并不总是能呈现出目标的完整轮廓。尽管存在这种限制,使用这些图像训练的模型可以系统地学习识别轮廓未知或不完整的目标。此功能使目标检测模型即使在只有目标部分可见的情况下也能识别目标的位置和类型。
Mosaic数据增强的关键features:
(1).合成新图像:Mosaic数据增强将四幅图像组合成一幅合成图像。合成图像被分成几个象限,每个象限都用来自另一幅源图像的补丁填充。
(2).训练效率:Mosaic数据增强通过创建合成训练样本来最大限度地利用可用数据。这种高效的数据使用减少了对海量数据集的需求,同时提供了广泛的学习样本。
(3).多样化的训练样本:通过形成合成图像,Mosaic数据增强技术可以创建包含来自多个源的元素的混合训练样本。这可以让模型在单个训练实例中接触到各种背景、目标配置和上下文(backgrounds, object configurations, and contexts)。
(4).情境学习:通过Mosaic数据增强生成的合成图像使模型能够了解目标在各种场景中的位置,从而有助于更好地理解目标与其环境之间的情境关系。
Mosaic数据增强算法几个关键步骤:
(1).图像选择:从数据集中选择4幅不同的图像来形成合成图像。
(2).合成图像:合成图像的每个象限都用源图像中的一个补丁填充。这样会生成一个更大的合成图像,其中包含所有四幅原始图像的元素。
(3).网格划分:将合成图像划分为网格。算法会确定这些网格的布局,考虑像3×2、2×3或3×3网格结构等变化。此选择旨在平衡网格数量,而不会使网格过小或过大。
(4).网格填充顺序:原始图像按照特定顺序填充到网格中,通常按逆时针方向填充。此填充顺序可确保图像在网格内正确对齐和放置。
(5).图像大小控制:设置限制以控制网格内图像大小调整的程度。此控制可防止过度调整大小,从而可能降低训练效果或导致不相关的像素贡献。
(6).Ground Truth调整:当合成图像的尺寸由于Mosaic数据增强而发生变化时,会对Ground Truth annotations or bounding boxes进行调整,以对应改变后的图像尺寸。
(7).基于阈值的目标包含:应用阈值条件来确定合成图像中哪些目标可用于模型学习。满足指定阈值的目标将包含在训练中,而超出这些范围的目标将被排除。
Mosaic数据增强的优势:
(1).提高泛化能力:接触多样化的构图(exposure to diverse compositions)有助于模型更好地泛化,降低过度拟合特定模式或场景的风险。经过训练的模型可以更好地适应现实世界的场景,包括遮挡、目标大小和多样化的背景。
(2).解决目标遮挡和碎片(fragmentation)问题:模型学会检测和识别目标,即使目标部分被遮挡或碎片化,从而复制现实世界中目标可能不明显的条件。增强了精确定位目标的能力,即使目标部分可见或与其他目标重叠。
(3).逼真的训练表示:合成图像类似于复杂的现实世界场景,有助于对反映实际场景的数据进行模型训练。模型学习合成图像中目标之间的上下文关系,从而提高对目标交互的理解。
(4).性能指标得到改善:经过训练的模型由于接触了多种视觉模式,通常在目标检测、分割和分类任务中表现出更高的准确率。模型对场景复杂性的理解能力得到改善,可以在未见过的数据上获得更出色的性能。
Mosaic数据增强的局限性:
(1).从多个输入生成合成图像需要在训练期间提供额外的处理能力和时间。
(2).调整合成图像中目标的边界框或标注(annotation)可能很复杂,尤其是当目标跨越多张原始图像时。
(3).用于创建Mosaic的原始图像的质量和多样性可能会影响性能,从而可能导致学习出现偏差或泛化受限。
(4).与原始数据一起存储和管理合成图像可能需要更多的内存,从而影响存储和处理。
(5).如果模型难以学习连贯的(coherent)模式,或者多样性超出了模型的学习能力,那么单个复合模型(composite)中的过度多样性可能会导致过拟合。
一种通俗的步骤:
(1).从数据集中选择4幅不同大小的图像,并设置合成后图像的大小为256x256,如下图所示:
(2).将每幅图像大小缩放为256x256,存在变形,如下图所示:
(3).将所有图像合并为一张图像,创建一个形状为3×512×512的零张量,并将每张图像叠加到新张量的每个角上,边界框位置需要调整,如下图所示:
(4).移动边界框,如下图所示:
(5).随机剪切图像,如下图所示:
(6).移除剪切图(cutout)外的边界框,如下图所示:
(7).调整剪切图中所有剩余边界框的大小,即使是最小的边界框也会保留在图像中,如下图所示:
以上内容的整理及原图来自于:
1. https://www.analyticsvidhya.com
2. https://gmongaras.medium.com
注:
1.Mosaic数据增强有不同的实现
2.Mosaic数据增强存在改进版本
3.YOLOv8中Mosaic数据增强实现在ultralytics/data/augment.py:类Mosaic
4.YOLOv8中train时:
(1).可以通过参数mosaic将其设置为0.0关闭mosaic,默认为1.0,概率值,取值范围为[0.0, 1.0]。
(2).参数close_mosaic用于指定在训练的最后第几个epoch中禁用Mosaic数据增强,默认为10,为了在整个训练过程中都关闭Mosaic数据增强,可以将close_mosaic设置为0。
GitHub:https://github.com/fengbingchun/NN_Test