编辑:zero
关注 搜罗最好玩的计算机视觉论文和应用,AI算法与图像处理 微信公众号,获得第一手计算机视觉相关信息
本文转载自:公众号:AI公园

作者:mdbloice

编译:ronghuaiyang

导读

图像增强是CV领域非常常用的技术,这里找到一个非常好用的图像增强的工具,可以用于Pytorch和Keras,而且功能强大,使用简单,更重要的是可以成对的进行图像增强,简直是实战利器,有了这个,妈妈再也不用担心我的数据不够了。

Augmentor是一个Python的图像增强库。这是一个独立的库,不依赖与某个平台或某个框架,非常的方便,可以进行细粒度的增强控制,而且实现了大部分的增强技术。使用了随机的方法来构建基础的模块,用户可以把这些模块组成pipline使用。

安装

Augmentor是Python写的。还有一个Julia的版本,链接:https://github.com/Evizero/Augmentor.jl

使用pip安装:

pip install Augmentor

从源码安装的话,请看编译文档。升级版本的话:

pip install Augmentor --upgrade

文档

完整的文档链接: http://augmentor.readthedocs.io

快速指南和使用

Augmentor的目的是进行自动的图像增强(生成人造数据)为了扩展数据集作为机器学习算法的输入,特别是神经网络和深度学习。

这个包通过创建一个增强的pipeline,即定义一系列的操作。这些操作有比如旋转和变换,一个加一个成为一个增强的pipeline,当完成的时候,pipeline可以执行,增强之后的数据也创建成功。

开始时,需要初始化pipeline对象,指向一个文件夹。

import 

然后可以在pipeline对象中添加操作:

p

每个函数需要制定一个概率,用来决定是否需要对这个图像进行这个操作。

一旦你创建了pipeline,可以从中进行采样,就像这样:

p

这样会产生10000个增强之后的图像。默认会写到指定文件夹中的名为output的目录中,这个指定文件夹就是初始化时指定的那个。

如果你想进行一次图像的增强操作,可以使用process():

p

这个函数在进行数据集缩放的时候会有用。可以创建一个pipeline,其中所有的操作的概率都设置为1,然后使用process()方法。

多线程

Augmentor (version >=0.2.1) 现在使用多线程技术来提高速度。

对于原始图像非常小的图像来说,某些pipeline可能会变慢。如果发现这种情况,可以设置multi_threaded为False。

p

默认的情况下,sample()函数是使用多线程的。这个只在保存到磁盘的时候实现。生成器也会在下个版本使用多线程。

Ground Truth数据

图像可以两个一组的通过pipeline,所以ground truth的图像可以同等的进行增强。

为了并行的对原始数据进行ground truth的增强,可以使用ground_truth()方法增加一个ground truth的文件夹到pipeline中:

p 

多掩模/图像增强

使用DataPipeline类 (Augmentor version >= 0.2.3),可以对有多个相关的掩模的图像进行增强:

任意长度的图像列表都可以成组的通过pipeline,并且使用DataPipeline类同样的进行增强。这个对于ground truth图像有好几个掩模的时候非常有用。举个例子。

下面的例子中,图像和掩模包含在一个images的数据结构中,对应的标签在y中:

p 

DataPipeline直接返回图像,并不存储在磁盘中,也不从磁盘中读取数据。图像通过初始化直接传到DataPipeline中。images的数据结构的创建细节,可以参考https://github.com/mdbloice/Augmentor/blob/master/notebooks/Multiple-Mask-Augmentation.ipynb。

Keras和Pytorch的生成器

如果你不想将图像存储到硬盘中,可以使用生成器,generator,使用Keras的情况:

g 

返回的图像的batchsize是128,还有对应的labels。Generator返回的数据是不确定的,可以用来在线生成增强的数据,用在训练神经网络中。

同样的,你可以使用Pytorch:

import torchvision
transforms = torchvision.transforms.Compose([p.torch_transform(),torchvision.transforms.ToTensor(),
])

主要功能

弹性畸变

使用弹性畸变,一张图像可以生成许多图像。

这个输入图像有一个像素宽的黑边,表明了在进行畸变的时候,没有改变尺寸,也没有在新的图像上进行任何的padding。

具体的功能可以在这里看到:

透视变换

总共有12个不同类型的透视变换。4中最常用的如下:

剩下的8种透视变换:

保持大小的旋转

默认保持原始文件大小的旋转:

对比其他软件的旋转:

保持大小的剪切

剪切的同时也会自动从剪切图像中裁剪正确的区域,所以图像中没有黑的区域或者padding。

对比普通的剪切操作:

裁剪

裁剪同样也使用了一种更加适合机器学习的方法:

随机擦除

随机擦除是一种使模型对遮挡更加鲁棒的技术。这个对使用神经网络训练物体检测的时候非常有用:

看 Pipeline.random_erasing() 文档了解更多的用法。

把操作串成Pipeline

使用几个操作,单个图像可以增强成许多的新图像,对应同样的label:

在上面的例子中,我们使用了3个操作:首先做了畸变操作,然后进行了左右的镜像,概率为0.5,最后以0.5的概率做了上下的翻转。然后从这个pipeline中采样了100次,得到了100个数据。

p

指南

使用生成器和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.ipynb

Augmentor 允许每个类定义不同的pipelines,这意味着你可以在分类问题中为不同的类别定义不同的增强策略。

例子在这里:https://github.com/mdbloice/Augmentor/blob/master/notebooks/Per_Class_Augmentation_Strategy.ipynb

完整的例子

我们可以使用一张图像来完成一个增强的任务,演示一下Augmentor的pipeline和一些功能。

首先,导入包,初始化Pipeline对象,指定一个文件夹,这个文件夹里放着你的图像。

import 

然后你可以在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)

其中的几个

增强的图像对边缘检测任务也许很有用。

----------------------------------------------------—END—--------------------------------------------
翻译原文链接:

非常好用的Python图像增强工具,适用多个框架​mp.weixin.qq.com

英文原文链接:

mdbloice/Augmentor​github.com

----------------------------------我是可爱的分割线-------------------------------------
翻译和整理不易,希望大家能用你们发财的小手,点个赞支持哈~
欢迎关注:辛苦翻译的小伙伴 AI公园 和辛勤的搬运工 AI算法与图像处理目前也在和几个小伙伴一起建了一个秋招群,欢迎大家加入,无论是应届的还是明年找工作的小伙伴都可以进群学习哈添加wx【nvshenj125】,回复【秋招】一起共同成长吧目前整理好的部分面经:

DWCTOD/interview​github.com

希望我们能一起整理,帮助更多的正在找工作的小伙伴
欢迎分享你的面经,内推码,面试技巧等等~
关注 搜罗最好玩的计算机视觉论文和应用,AI算法与图像处理 微信公众号,获得第一手计算机视觉相关信息

python 神经网络图像增强_非常好用的Python图像数据增强工具,适用多个框架相关推荐

  1. python图像增强_【Tool】Augmentor和imgaug——python图像数据增强库

    Augmentor和imgaug--python图像数据增强库 Tags: ComputerVision Python 介绍两个图像增强库:Augmentor和imgaug,Augmentor使用比较 ...

  2. 【Tool】Augmentor和imgaug——python图像数据增强库

    Augmentor和imgaug--python图像数据增强库 Tags: ComputerVision Python 介绍两个图像增强库:Augmentor和imgaug,Augmentor使用比较 ...

  3. 图像数据增强方法一览(附python代码)

    在图像分类任务中,图像数据增强一般是大多数人会采用的方法之一,这是由于深度学习对数据集的大小有一定的要求,若原始的数据集比较小,无法很好地满足网络模型的训练,从而影响模型的性能,而图像增强是对原始图像 ...

  4. DL之AlexNet:利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型)

    DL之AlexNet:利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型) 目录 利用卷积神经网络类AlexNet实现猫狗分类识别(图片数据增强→保存h5模型) 设计思路 处 ...

  5. 目标检测:python实现多种图像数据增强的方法(光照,对比度,遮挡,模糊)

    图像数据增强的内容(可根据需要自定义选择): 1.直方图均衡化 2.clahe自适应对比度直方图均衡化 3.白平衡 4.亮度增强 5.亮度,饱和度,对比度增强 6.去除图像上的高光部分 7.自适应亮度 ...

  6. Python:图像数据增强和保存

    Python:图像数据增强和保存 code 参考博客链接:https://blog.csdn.net/qq_36756866/article/details/108255715 在进行模型分析处理的时 ...

  7. python批量实现图像数据增强(扩增)

    什么是数据扩增? 数据扩增是对数据进行扩充的方法的总称.数据扩增可以增加训练集的样本,可以有效缓解模型过拟合的情况,也可以给模型带来的更强的泛化能力. 通常在进行数据扩增操作的时候应该保持图像原本的标 ...

  8. python神经网络多元函数_阿里达摩院推荐的最新400集python教程,据说懂中文就能上手...

    小编的内心是强大的,网友虐我千百遍,我待网友如初恋,因为今天又给大家带来了干货,Python入门教程完整版,完整版啊!完整版! 为了吸取教训,小编一定要分享一下攻略,"怎样获得小编分享的教程 ...

  9. anaconda下使用python怎样实现图像增强_如何用anaconda进行python开发

    展开全部 序 Python易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,32313133353236313431303231363533e58685e5aeb9313333 ...

最新文章

  1. win7/10 画图程序按宽度高度mm cm精确调整图片尺寸
  2. tc溜溜865手机投屏卡_溜溜tcgames老版本(电脑玩手机游戏)-溜溜TC Games32位/64位旧版本PC下载V2.0.0官网安卓真机投屏-西西软件下载...
  3. 基于法律罪行知识图谱的智能预判与客服问答
  4. 【转】linux /centos 中OpenSSL升级方法详解
  5. MySql中左连接查询突然变得很慢
  6. Important Tips
  7. Swift - 实现tableView单选系统样式
  8. Kettle下载安装使用
  9. 纽博涛在CSDN上开通博客啦
  10. dns和私人dns是什么意思?企业如何预防dns劫持?
  11. html 数字大小写转换,数字大小写转化
  12. lol人物模型提取(七)
  13. Vue.js+ECharts:切换图表类型(图表工具栏)
  14. EventEmitter has used unknown event type: “pullingUp“, should be oneof
  15. 金融行业的数据分析怎么做?
  16. android手机配什么蓝牙耳机,安卓手机配什么蓝牙耳机好?安卓系统蓝牙耳机推荐!...
  17. CRM系统之如何为老客户量体裁衣
  18. 聊聊软件登录界面的设计与交互
  19. 其中之一原因Exception encountered during context initialization - cancelling refresh attempt: org
  20. matlab收敛半径,运用MATLAB语言解决级数及其相关问题 李娟娟

热门文章

  1. 国际服服务器怎么换账号吗,游戏王决斗链接
  2. docker运行容器命令中-it是什么意思
  3. android打印服务apk,hp打印服务插件安卓下载
  4. hashmap 允许key重复吗_HashMap的key值不允许重复问题
  5. ARDUINO多功能灾难现成搜救机器人
  6. 单招计算机主板图解,磐正系列主板刷bios图解新.pdf
  7. 概率统计——三扇门游戏与贝叶斯定理
  8. linux编辑音频文件,Linux下载安装ocenaudio音频编辑器
  9. Halcon学习笔记:划痕、油污、瑕疵
  10. abb机器人外部tcp定义方法_ABB机器人的各种通信运用方式