基于python下imgaug库的数据增广方法整理

基于python下imgaug库的数据增广方法整理

1 常用数据增广方法

1) 镜像翻转(水平、垂直):对图像进行水平或垂直翻转。
2) 随机裁剪和缩放:随机地从图像中裁剪出不同尺寸的区域,或者随机缩放图像大小,引入了尺度和视角的变化。
3) 颜色变化:调整图像的亮度、对比度、饱和度等颜色属性,使模型更能适应不同光照条件。
4) 旋转和倾斜:对图像进行旋转或倾斜变换,增加了模型对旋转和倾斜情况下的鲁棒性。
5) 加噪声:向图像中添加随机噪声,可以使模型对噪声更具有鲁棒性。
6) 变形和弯曲:对图像进行变形、弯曲或扭曲,模拟真实场景中的形变情况。
7) 局部遮挡:随机遮挡图像的一部分,使模型能够更好地处理遮挡情况。
8) 组合多种增强方法:将多种增强方法组合起来,创造更多样化的变化。
Ps:imgaug可实现的数据增广方式还有很多,类似相机美颜中一些添加滤镜,局部特征点亮度、对比度调节都可实现,或者理解为photoshop可实现的,imgaug都可以实现。基于机械臂scooping和pouring的任务场景,可暂时选用以上列出的方法。

2 每种方法对应函数

1) 镜像翻转(水平、垂直):

  • 水平翻转:iaa.Fliplr(p)
  • 垂直翻转:iaa.Flipud(p)
    参数 p 是翻转的概率,设置为 0.5 表示随机翻转。(或者理解为对于一个batch中50%的图像进行翻转)

2) 随机裁剪和缩放:

  • 随机裁剪:
iaa.Crop(percent=(0.1,0.2))

(图像将被裁剪成原始尺寸的10%-20%,随机选择)或iaa.Crop(px=(0, 16))(从每边裁剪图像0到16px,随机选择)

  • 随机缩放:
iaa.Affine(scale={"x": (0.8, 1.2), "y": (0.8,1.2)})

(x方向上缩放80%-120%,y方向上缩放80%-120%。Ps:变换后空白像素的默认填充方式为replicate,即采用图像的边缘像素平铺,可通过mode参数更改填充方式,一般不更改。)

3) 颜色变化:

  • 亮度、对比度变化:iaa.MultiplyAndAddToBrightness(mul=(a, b), add=(c, d))
    参数 mul 控制亮度变化的范围,add 控制对比度的变化范围

4) 旋转和倾斜:

  • 旋转变化iaa.Affine(rotate=(-15, 15))(-15度到+15度随机)

  • 倾斜变化iaa.Affine(shear=(-20, 20))(-20度到+20度随机)

5) 加噪声:

  • 高斯噪声iaa.AdditiveGaussianNoise(scale=(0, 0.05))
    (可选参数loc表示高斯分布的均值,默认为0;per_channel:概率值,默认为0.0,控制是否对每个通道分别添加噪声。0.0表示所有通道共享相同的噪声, 1.0 表示每个通道都可能有不同的噪声)

6) 变形和弯曲:

  • 随机变形iaa.PiecewiseAffine(scale=(0, 0.05))(变形强度处于0-0.05之间)

7) 局部遮挡:

  • 遮挡iaa.Cutout(nb_iterations=(1, 2), size=(1, 4))(每次迭代随机选择 1 到 2
    个区域进行遮挡,遮挡区域的边长在 1 到 4 之间)

8) 组合多种增强方法:

iaa.Sequential([augmenter1, augmenter2, ...],random_order=True)

(多种增强方法依次随机作用于图像,random_order控制是否随机,False时按照列表中的顺序依次作用于图像)

Ps:1’例子中的参数为常用参数 2’可选用其中2-4个方法组成增强序列,每种方法的强度或概率不宜过大。

3 使用方法

一般均采用以下代码模板(以采用裁剪旋转明暗变化和遮挡四种方法为例)

1.	import numpy as np  
2.	import imgaug as ia  
3.	import imgaug.augmenters as iaa  
4.	from skimage import data  
5.	  
6.	# 用随机种子来保持可重复性  
7.	ia.seed(1)  
8.	  
9.	# 生成一批示例图像(这里用的是 skimage 库中的 Quokka 图像)  
10.	images = [data.quokka() for _ in range(8)]  # 生成8张图像  
11.	images = np.array(images, dtype=np.uint8)  # 转换图像类型为 uint8  
12.	  
13.	# 创建数据增强流水线  
14.	augmenter = iaa.Sequential([  
15.	    iaa.Crop(percent=(0, 0.1)), # 随机裁剪,裁剪范围在 0% 到 10%  
16.	    iaa.Affine(rotate=(-20, 20)), # 随机旋转角度在 -20 度到 20 度之间  
17.	    iaa.Multiply((0.8, 1.2)), # 随机调整亮度,乘法因子范围在 0.8 到 1.2 之间  
18.	    iaa.Cutout(nb_iterations=(1, 5), size=(8, 16)) # 随机遮挡,迭代次数在 1 到 5 之间,遮挡区域大小在 8x8 到 16x16 之间  
19.	], random_order=True)  
20.	  
21.	# 应用数据增强到批量图像  
22.	images_aug = augmenter(images=images)  
23.	  
24.	# 显示原始图像和增强后的图像  
25.	for i in range(len(images)):  
26.	    combined = np.hstack([images[i], images_aug[i]])  
27.	    ia.imshow(combined)

4 可参考资料

  1. imgaug官方文档:https://imgaug.readthedocs.io/en/latest/
  2. API中文文档https://blog.csdn.net/qq_45723275/article/details/129276991
  3. 对于数据集含有标签的如分割检测问题,需要对标签采用相同的变换,可以看看
    使用imgaug改进YOLO:
    https://blog.csdn.net/qq1198768105/article/details/126197186
    imgaug应用分割检测问题:
    https://aistudio.baidu.com/aistudio/projectdetail/2386414
  4. Chatgpt3.5(#.#) https://chat.openai.com/
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值