图像数据增强实战

作者: 人工智能遇见磐创 | 来源:发表于2018-10-10 00:33 被阅读4次

译者 | 小韩

我目前正在做图像数据增强的深度和有效性的研究。这项研究的目的是学习怎样增加只有有限或少量数据的数据集大小,增强训练的卷积网络模型的鲁棒性。

需要列出所有可以想到的图像增强的方法,并将这些方法进行组合,尝试和改善图像分类模型的性能。一些较简单的增强方法有翻转,平移,旋转,缩放,分离r,g,b颜色通道和添加噪声。更好一些的增强方法是生成对抗网络模型,有时交替使用遗传算法和生成对抗网络。 还有一些创造性的方法,比如将Instagram 样式的高亮滤镜应用于图像,应用随机区域锐化滤镜,以及基于聚类技术添加平均图像。 本文将介绍怎样使用 NumPy 对图像进行扩充。

下面列出了一些扩充技术的说明,如果你能想到任何其他方法来增强图像,提高图像分类器的质量,请留言一起讨论。

原始图像

增强

所有的代码都没有使用 OpenCV 库,只使用了 Numpy。

# 加载图像
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt

img = Image.open('./NIKE.png')
img = np.array(img)
plt.imshow(img)
plt.show()

翻转(Flipping)

翻转图像是最流行的图像数据增强方法之一。这主要是由于翻转图像的代码比较简单,而且对于大多数问题而言,翻转图像会增强模型的性能。下面的模型可以被认为是看到左鞋而不是右鞋,因此通过这种数据增加,模型对于看到鞋的潜在变化变得更加有鲁棒性。

image
# 用 Numpy 翻转
flipped_img = np.fliplr(img)
plt.imshow(flipped_img)
plt.show()

平移(Translations)

很容易想象使用目标检测的分类器进行平移可以增加它的性能。好像这个分类模型试图检测鞋子何时在图像中而不是是否在图像中。 平移操作将有助于它看不到整个鞋子的情况下检测出鞋子。

# 向左平移
for i in range(HEIGHT, 1, -1):
 for j in range(WIDTH):
   if (i < HEIGHT-20):
     img[j][i] = img[j][i-20]
   elif (i < HEIGHT-1):
     img[j][i] = 0

plt.imshow(img)
plt.show()
# 向右平移
for j in range(WIDTH):
for i in range(HEIGHT):
 if (i < HEIGHT-20):
   img[j][i] = img[j][i+20]

plt.imshow(img)
plt.show()
# 向上平移
for j in range(WIDTH):
for i in range(HEIGHT):
 if (j < WIDTH - 20 and j > 20):
   img[j][i] = img[j+20][i]
 else:
   img[j][i] = 0

plt.imshow(img)
plt.show()
# 向下平移
for j in range(WIDTH, 1, -1):
for i in range(278):
 if (j < 144 and j > 20):
   img[j][i] = img[j-20][i]

plt.imshow(img)
plt.show()

噪声(Noise)

噪声是一种有趣的增强技术,我开始对这类操作变得更加熟悉。我已经看过很多有趣的关于对抗网络训练的论文,将一些噪声加入到图像中,模型便无法正确分类。我仍然在寻找能产生比下图更好的添加噪声的方法。 添加噪声可能使畸变更明显,并使模型更加稳健。

image
# 添加噪声
noise = np.random.randint(5, size = (164,278, 4), dtype = 'uint8')

for i in range(WIDTH):
  for j in range(HEIGHT):
       for k in range(DEPTH):
          if (img[i][j][k] != 255):
               img[i][j][k] += noise[i][j][k]

plt.imshow(img)
plt.show()

生成对抗网络(GAN)

我阅读过很多将生成对抗网络用于数据增强的文献,下面是我使用MNIST数据集生成的一些图像。

正如上图看到的那样,它们看起来确实像3,7和9。 我想扩展网络结构来支持的300x300x3尺寸的输出,而不是28x28x1 MNIST的数字,但是遇到了一些麻烦。 但是,我对这项研究感到非常兴奋,并期待继续这项研究!

感谢您阅读本文,希望您现在知道如何实现基本的数据扩充以改进您的分类模型!

翻译自:https://towardsdatascience.com/image-augmentation-examples-in-python-d552c26f2873

对深度学习感兴趣,热爱Tensorflow的小伙伴,欢迎关注我们的网站 http://www.panchuang.net 我们的公众号:磐创AI。

相关文章

  • 图像数据增强实战

    译者 | 小韩 我目前正在做图像数据增强的深度和有效性的研究。这项研究的目的是学习怎样增加只有有限或少量数据的数据...

  • ENVI:遥感图像增强

    图像增强:通过对图像数据采用各种图像增强算法,提高图像的目视效果,方便人工目视解译、图像分类中样本选取等

  • 图像数据增强

    一、做随机亮度、对比度、饱和度修改,使用tensorflow API核心部分是 aug_op 函数,这可是菜鸟的心血啊!

  • 文本数据增强

    文本数据增强 概述 ​ 数据增强技术已经是图像领域的标配,通过对图像的翻转、旋转、镜像、高斯白噪声等技...

  • NLP中数据增强的综述大全

    与计算机视觉中使用图像进行数据增强不同,NLP中文本数据增强是非常罕见的。这是因为图像的一些简单操作,如将图像旋转...

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

    摘要:还在为数据集大小发愁吗?试试数据增强方法吧。 在图像分类任务中,图像数据增强一般是大多数人会采用的方法之一,...

  • Core Image编程指南翻译四(自动增强图像)

    示例代码下载 自动增强图像 Core Image的自动增强功能可分析图像的直方图,面部区域内容和元数据属性。然后它...

  • 数据采集,图像数据处理,Python分布式爬虫,Mahout,T

    数据采集,图像数据处理,Python分布式爬虫,Mahout,Tensorflow,Spark Mllib算法实战...

  • 数字图像处理复习(三)

    图像复原 基本概念 图像复原和图像增强的区别 图像增强:是一个主观的过程,从视觉角度,改善图像质量。图像增强被认为...

  • 图像处理和数据增强

    前言:用CNN进行训练模型的时候,通常需要对图像进行处理,有时候也叫做数据增强,常见的图像处理的Python库:O...

网友评论

    本文标题:图像数据增强实战

    本文链接:https://www.haomeiwen.com/subject/fpsuaftx.html