目标检测数据增强篇
1.mmdetection内置数据增强
mmdetection内置了很多数据增强方式,主要在mmdetection/mmdet/datasets/transforms.py
内,也可以在同文件夹的__init.py__内找到,具体可以见transforms.py
在mmdetection中,修改配置文件的train_pipeline即可实现数据增强,
train_pipeline = [
dict(type='LoadImageFromFile', backend_args=None), # 读取img
dict(type='LoadAnnotations', with_bbox=True), # 读取Annotations,对应coco数据集
# 数据增强方法
dict(type='Resize', scale=(1333, 800), keep_ratio=True), # 尺寸变换
dict(type='PackDetInputs'), # 数据打包
]
常见数据增强:
1.Mosaic
Mosaic简单的讲就是将4张图片缩小后拼接在一起,超出部分舍弃,不足部分填充,如图,1,2,3,4图拼接,选取蓝色框内作为Mosaic结果
Mosaic使每个批次中的数据更多样化,让模型在训练过程中接触更多的场景和物体组合,提高模型的鲁棒性和泛化能力
2.RandomShift随机平移
dict(type='RandomShift', prob=0.5, max_shift_px=32), # 随机平移
随机在水平,竖直方向上移动,prob代表该图片RandomShift可能性
3.RandomFlip随机镜像
dict(type='RandomFlip', prob=0.5, direction='horizontal'), # 水平镜像
dict(type='RandomFlip', prob=[0.3, 0.5,0.2], direction=['horizontal', 'vertical', 'diagonal']),
4.CutOut
随机删除图像中的一个矩形区域,可以得到较好的训练结果,CutOut就是随机将若干个矩形区域删除(像素值改成0)
dict(type='CutOut', n_holes=(1, 3), cutout_shape=None, cutout_ratio=(0.2, 0.4), fill_in=(0, 0, 0)),
5.MixUp
输入图像每个像素按比例融合,输出结果按比例融合(one-hot形式)
dict(type='MixUp',ratio_range=(0.5, 1.5))
6.MinIoURandomCrop
dict(type='MinIoURandomCrop', min_ious=(0.1, 0.3, 0.5, 0.7, 0.9), min_crop_size=0.3),
MinIoURandomCrop 是一种用于数据增强的随机裁剪技术,保证裁剪后的图像与原始图像中的某些目标框具有一定的交并比(IoU)阈值。即,至少有一个目标框的 IoU 值大于预设定的阈值
7.Resize
dict(type='Resize', scale=(1333, 800), keep_ratio=True), # 缩放
2.Albumentations库
站内有篇文章写的不错,Albumentations图像增强详解(持续更新)
1.RandomBrightnessContrast随机亮度对比度
dict(
type='Albu',
transforms=[dict(
type='RandomBrightnessContrast',
brightness_limit=[0.1, 0.3],
contrast_limit=[0.1, 0.3],
p=0.2,)], # 数据增强,随机亮度,对比度
bbox_params=dict(
type='BboxParams',
format='pascal_voc',
label_fields=['gt_bboxes_labels'],
min_visibility=0.0,
filter_lost_elements=True),
keymap={
'img': 'image',
'gt_masks': 'masks',
'gt_bboxes': 'bboxes'},),
2.Blur模糊
blur_limit (int, (int, int)):模糊图像的最大kernel size. 有效值范围[3, inf),默认值:(3, 7)
transforms=[dict(type='Blur', blur_limit=(3,7))]
3.GaussNoise高斯噪声
transforms=[dict(type='GaussNoise', var_limit=(10.0,50.0), mean(0.0)]
var_limit ((float, float) or float): 噪声方差范围. 若为单个float数值,将转换为区间范围 (0, var_limit). 默认值: (10.0, 50.0).
mean (float): 噪声均值. 默认值: 0
per_channel (bool): 每个通道是否独立采样。默认值: True