【语义分割项目实战】基于Augmentor工具的语义分割中常见几种数据增强方式(一)

和目标检测(Object detection)一样,在语义分割(semantic segmentation)中一样可以通过数据增强的方式增加数据集的数目。对于语义分割数据增强中的部分方法(如旋转,缩放,裁剪等),在对原图进行编辑的同时也要对掩膜图片同步相同操作,这也是进行语义分割数据集数据加强的一大难点

1.工具介绍:Augmentor

以下信息来自原作者:

mdbloice/Augmentor: Image augmentation library in Python for machine learning. (github.com)

Augmentor is an image augmentation library in Python for machine learning. It aims to be a standalone library that is platform and framework independent, which is more convenient, allows for finer grained control over augmentation, and implements the most real-world relevant augmentation techniques. It employs a stochastic approach using building blocks that allow for operations to be pieced together in a pipeline.

简单来说Augmentor中有很多用于数据增强的函数,这些函数可以帮助我们非常简单的实现对于原图和掩膜图片的同步增强,我们只需要设置非常简单的参数,用起来非常方便

2.注意事项(必读,很重要,浪费了好多时间摸索出来的QAQ)

1.需要确保图像原图和掩膜图像的命名完全一样,例如原图命名为1.png,那么掩膜图像的名字也应该叫1.png,必须一一对应

2.原图和掩膜图像都必须是png文件!,不能是jpg,jpeg! 

3.使用方法 

Augmentor的安装方法非常简单,直接使用pip安装

pip install Augmentor

3.1对于需要掩膜和原图同步进行修改的方法

如果同时一口气使用过多数据增强方法可能会报错,因为某一步输出的图像可能达不到下一步的输入标准,所以建议大家分批次测试结果,每次注释掉不同的部分进行测试

import Augmentor
#原图的路径
p=Augmentor.Pipeline("H:\\text\imgs")
#对应的掩膜的路径
p.ground_truth("H:\\text\jsons\mask_png")
#图像旋转
p.rotate(probability=1,max_left_rotation=25,max_right_rotation=25)
#图像旋转90度
p.rotate90(probability=1)
#水平翻转
p.flip_left_right(probability=1)
#上下翻转
p.flip_top_bottom(probability=1)
#放大
p.scale(probability=1,scale_factor=1.5)
#缩小
p.zoom_random(probability=1,percentage_area=0.85)
#从中心裁剪
p.crop_centre(probability=1,percentage_area=0.6)
#按大小裁剪
p.crop_by_size(probability=1,width=100,height=100)
#垂直形变
p.skew_tilt(probability=1,magnitude=1)
#斜四角形变
p.skew_corner(probability=1,magnitude=1)
#弹性扭曲
p.random_distortion(probability=1,grid_height=5,grid_width=16,magnitude=8)
#错切变换
p.shear(probability=1,max_shear_left=25,max_shear_right=25)
#生成的原图+掩膜图像的总数目,建议是偶数
p.sample(20)

3.2对于只需要修改原图,不需要修改掩膜的方法

这些方法不会改变图像的位置信息,因此不需要对掩膜图像进行修

import Augmentor
p=Augmentor.Pipeline("H:\\text\imgs")
#修改颜色
p.random_color(probabitlity=1,min_factor=50,max_factor=100)
#修改亮度
p.random_brightness(probability=1,min_facor=5,max_factor=20)
#修改对比度
p.random_contrast(probability=1,min_factor=5,max_factor=20)
p.sample(20)

3.3关于cutout方法的一些问题

 在Augmentor的函数中提供了实现cutout方法的函数,具体如下:

p.random_erasing(probability=1,rectangle_area=0.5)

但是对于结果而言,存在一些问题,这是本人实测的结果

可以很明显的看出,掩膜图像中cutout的位置,和原图中cutout的位置是不一样的,可以说是程序的一个bug,这个bug在GitHub上作者也给予了回复

Use for Semantic Segmentation · Issue #244 · mdbloice/Augmentor (github.com)

 4.其他存在的问题

augmentor工具还存在一些其他的问题,比如

1.输出的图片命名会发生很大的改变,虽然这些改变是有格式有规律的改变,但是还是很不利于我们后续将图片丢入网络中训练。GitHub上已经有人提出了解决方法,有兴趣的可以去试试

How to customize the output name? · Issue #201 · mdbloice/Augmentor (github.com)

2.augmentor会在原图的路径下新建一个output文件夹,将所有输出的掩膜图片和原图文件都放在这个文件夹下,而不能像其他方法一样分开输出,这很不便于后期我们的神经网络读取图片,关于这点作者也进行了说明,只是说这个功能还没有开发出来

how to save image and mask in different location? · Issue #204 · mdbloice/Augmentor (github.com)

  • 2
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值