1. Mosaic
数据增强
Mosaic
数据增强步骤:
(1). 选择四个图像:
- 从数据集中随机选择四张图像。这四张图像是用来组合成一个新图像的基础。
(2) 确定拼接位置:
- 设计一个新的画布(
输入size的2倍
),在指定范围内找出一个随机点(如图1所示: 范围在320 ~ 960之间)。 - 每一张小图按照长边resize到输入的输入size的大小,然后依次拼接到对应位置。
(3) 调整图像大小和裁剪:
- 对每个选定的图像进行缩放和裁剪,使其适合分配给它的区域。 这样可以确保每个图像都能很好地适应其对应的象限,并且不会超出边界。
(4) 调整标签:
- 如果你在进行目标检测任务,还需要调整每个图像中的目标框(
bounding boxes
)的坐标,使其适应新的复合图像的位置。具体来说,需要根据图像在复合图像中的位置重新计算目标框的位置和尺寸。
(5) 应用其他增强操作(可选):
- 在生成的复合图像上可以进一步应用其他常见的数据增强技术,如颜色抖动(
color jittering
)、水平翻转(horizontal flipping
)、旋转(rotation
)等,以进一步丰富数据集。
2. CutMix
数据增强
CutMix
是一种数据增强技术,旨在通过将两张图像的一部分区域进行混合,并相应地调整标签,来增加训练样本的多样性。这种方法不仅能够提高模型的泛化能力,还能有效防止过拟合。
CutMix
数据增强的具体步骤:
(1) 选择两张图像和标签:
- 从数据集中随机选择两张图像
image1
和image2
及其对应的标签label1
和label2
。
(2) 确定混合区域:
在
image1
中随机选择一个矩形区域 (x, y, w, h
),其中 (x, y
) 是矩形的左上角坐标,(w, h
)是矩形的宽度和高度。通常使用均匀分布来随机选择这些参数,例如:
lam = np.random.beta(beta, beta) # Beta分布参数,用于控制混合比例 x = np.random.randint(0, image1.shape[1]) y = np.random.randint(0, image1.shape[0]) w = int(image1.shape[1] * np.sqrt(1 - lam)) h = int(image1.shape[0] * np.sqrt(1 - lam))
(3) 裁剪并混合区域:
将 image2 中对应区域的图像裁剪出来,并将其粘贴到 image1 的选定区域中。
这一步可以通过简单的图像操作完成:
def cutmix(image1, image2, x, y, w, h): mixed_image = image1.copy() mixed_image[y:y+h, x:x+w] = image2[y:y+h, x:x+w] return mixed_image
(4) 调整标签:
对于分类任务,标签可以根据混合区域的比例进行线性插值。假设 lam 是混合区域占总面积的比例,则新图像的标签可以表示为:
new_label = lam * label1 + (1 - lam) * label2
对于目标检测任务,需要调整每个目标框的位置和标签,以反映混合后的图像内容。具体来说:
- 如果目标框完全位于混合区域之外,则保留原标签。
- 如果目标框部分位于混合区域之内,则需要根据交集区域调整目标框的位置和大小。