非常好用的Python图像增强工具,适用多个框架
小白学视觉 4天前以下文章来源于AI公园 ,作者ronghuaiyang
AI公园做一个生产真正有用的AI内容的公众号。
为了并行的对原始数据进行ground truth的增强,可以使用ground_truth()方法增加一个ground truth的文件夹到pipeline中:p = Augmentor.Pipeline("/path/to/images")# Point to a directory containing ground truth data.# Images with the same file names will be added as ground truth data# and augmented in parallel to the original data.p.ground_truth("/path/to/ground_truth_images")# Add operations to the pipeline as normal:p.rotate(probability=1, max_left_rotation=5, max_right_rotation=5)p.flip_left_right(probability=0.5)p.zoom_random(probability=0.5, percentage_area=0.8)p.flip_top_bottom(probability=0.5)p.sample(50)多掩模/图像增强使用DataPipeline类 (Augmentor version >= 0.2.3),可以对有多个相关的掩模的图像进行增强:Multiple Mask Augmentation
任意长度的图像列表都可以成组的通过pipeline,并且使用DataPipeline类同样的进行增强。这个对于ground truth图像有好几个掩模的时候非常有用。举个例子。下面的例子中,图像和掩模包含在一个images的数据结构中,对应的标签在y中:p = Augmentor.DataPipeline(images, y)p.rotate(1, max_left_rotation=5, max_right_rotation=5)p.flip_top_bottom(0.5)p.zoom_random(1, percentage_area=0.5)augmented_images, labels = p.sample(100)DataPipeline直接返回图像,并不存储在磁盘中,也不从磁盘中读取数据。图像通过初始化直接传到DataPipeline中。images的数据结构的创建细节,可以参考https://github.com/mdbloice/Augmentor/blob/master/notebooks/Multiple-Mask-Augmentation.ipynb。Keras和Pytorch的生成器如果你不想将图像存储到硬盘中,可以使用生成器,generator,使用Keras的情况:g = p.keras_generator(batch_size=128)images, labels = next(g)返回的图像的batchsize是128,还有对应的labels。Generator返回的数据是不确定的,可以用来在线生成增强的数据,用在训练神经网络中。同样的,你可以使用Pytorch:import torchvisiontransforms = torchvision.transforms.Compose([ p.torch_transform(), torchvision.transforms.ToTensor(),])弹性畸变使用弹性畸变,一张图像可以生成许多图像。Input ImageAugmented Images
→
这个输入图像有一个像素宽的黑边,表明了在进行畸变的时候,没有改变尺寸,也没有在新的图像上进行任何的padding。具体的功能可以在这里看到:Original Image[1]Random distortions applied
透视变换总共有12个不同类型的透视变换。4中最常用的如下:Tilt LeftTilt RightTilt ForwardTilt Backward
剩下的8种透视变换:Skew Type 0Skew Type 1Skew Type 2Skew Type 3
Skew Type 4Skew Type 5Skew Type 6Skew Type 7
保持大小的旋转默认保持原始文件大小的旋转:Original ImageRotated 10 degrees, automatically cropped
对比其他软件的旋转:Original ImageRotated 10 degrees
保持大小的剪切剪切的同时也会自动从剪切图像中裁剪正确的区域,所以图像中没有黑的区域或者padding。Original imageShear (x-axis) 20 degreesShear (y-axis) 20 degrees
对比普通的剪切操作:Original imageShear (x-axis) 20 degreesShear (y-axis) 20 degrees
裁剪裁剪同样也使用了一种更加适合机器学习的方法:Original imageRandom crops + resize operation
随机擦除随机擦除是一种使模型对遮挡更加鲁棒的技术。这个对使用神经网络训练物体检测的时候非常有用:Original image[2]Random Erasing
看 Pipeline.random_erasing() 文档了解更多的用法。把操作串成Pipeline使用几个操作,单个图像可以增强成许多的新图像,对应同样的label:Original imageDistortions + mirroring
在上面的例子中,我们使用了3个操作:首先做了畸变操作,然后进行了左右的镜像,概率为0.5,最后以0.5的概率做了上下的翻转。然后从这个pipeline中采样了100次,得到了100个数据。p.random_distortion(probability=1, grid_width=4, grid_height=4, magnitude=8)p.flip_left_right(probability=0.5)p.flip_top_bottom(probability=0.5)p.sample(100)使用生成器和Keras集成Augmentor 可以用来替换Keras中的augmentation功能。Augmentor 可以创建一个生产器来产生增强后的图像,细节可以查看下面的notebook:从本地文件夹中读取图像进行增强,然后使用生成器将增强的图像流送到卷积神经网络中,参见 https://github.com/mdbloice/Augmentor/blob/master/notebooks/Augmentor_Keras.ipynb增强内存中的图像,使用生成器将新的图像送到Keras的网络中,参见 https://github.com/mdbloice/Augmentor/blob/master/notebooks/Augmentor_Keras_Array_Data.ipynbAugmentor 允许每个类定义不同的pipelines,这意味着你可以在分类问题中为不同的类别定义不同的增强策略。例子在这里:https://github.com/mdbloice/Augmentor/blob/master/notebooks/Per_Class_Augmentation_Strategy.ipynb完整的例子我们可以使用一张图像来完成一个增强的任务,演示一下Augmentor的pipeline和一些功能。首先,导入包,初始化Pipeline对象,指定一个文件夹,这个文件夹里放着你的图像。import Augmentorp = Augmentor.Pipeline("/home/user/augmentor_data_tests")然后你可以在pipeline中添加各种操作:p.rotate90(probability=0.5)p.rotate270(probability=0.5)p.flip_left_right(probability=0.8)p.flip_top_bottom(probability=0.3)p.crop_random(probability=1, percentage_area=0.5)p.resize(probability=1.0, width=120, height=120)操作添加完了之后,可以进行采样:p.sample(100)其中的几个Input Image[3]Augmented Images
→
增强的图像对边缘检测任务也许很有用。下载1:OpenCV-Contrib扩展模块中文版教程在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。下载2:Python视觉实战项目52讲在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。下载3:OpenCV实战项目20讲在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。交流群欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~阅读原文喜欢此内容的人还喜欢Python的常用库的数组定义及常用操作Python的常用库的数组定义及常用操作...好奇心Log不喜欢不看的原因确定内容质量低不看此公众号