干货 | 图像数据增强实战

译者 | 小韩

编辑 | 安可

【磐创AI导读】:本文讲解了图像数据增强实战。想要获取更多的机器学习、深度学习资源,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。

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

需要列出所有可以想到的图像增强的方法,并将这些方法进行组合,尝试和改善图像分类模型的性能。一些较简单的增强方法有翻转,平移,旋转,缩放,分离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)

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

# 用 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)

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

# 添加噪声
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

原文发布于微信公众号 - 磐创AI(xunixs)

原文发表时间:2018-10-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏机器之心

深度 | 脆弱的神经网络:UC Berkeley详解对抗样本生成机制

46711
来自专栏AI黑科技工具箱

新的正则化神器:DropBlock(Tensorflow实践)

在我们测试MNIST上,3层卷积+ dropXXX,所有参数均为改变的情况下,可以提升MNIST准确率1〜2点。

1.2K6
来自专栏人工智能LeadAI

基于Text-CNN模型的中文文本分类实战

转眼学生生涯就结束了,在家待就业期间正好有一段空闲期,可以对曾经感兴趣的一些知识点进行总结。

5894
来自专栏ATYUN订阅号

如何通过热图发现图片分类任务的数据渗出

文末GitHub链接提供了生成以下图片所需的数据集和源代码。本文的所有内容都可以在具有1G内存GPU的笔记本电脑上复现。

1331
来自专栏CVer

[计算机视觉论文速递] 2018-07-02 图像分割专场

这篇文章有2篇论文速递,都是图像分割方向,包括运动捕捉图像的语义分割、将FCN和GAN结合的巩膜分割。其中一篇是ACM SIGGRAPH 2018,另一篇是BT...

1383
来自专栏大数据文摘

关于集成建模,这有40个给数据科学家的技能测试题及解答

2827
来自专栏量子位

想把自拍背景改成马尔代夫?手把手教你用深度学习分分钟做到

王小新 编译自 TowardsDataScience 量子位 出品 | 公众号 QbitAI 以前,从照片里抠出人像去掉背景,是要到处求PS大神帮忙的。大神时间...

4349
来自专栏视觉求索无尽也

【调参经验】图像分类模型的调参经验前言调参经验与我交流

用深度学习做图像分类任务也有近一年时间了,从最初模型的准确率只有60%到后来调到有80%,再到最后的90%+的准确率,摸索中踩了很多坑,也总结出了一些经验。现在...

2072
来自专栏语言、知识与人工智能

胶囊网络(Capsule Network)在文本分类的探索

最近,Hinton老师等提出了胶囊网络, 用神经元向量代替传统神经网络的单个神经元节点,以dynamic routing的方式去训练这种全新的神经网络。

6968
来自专栏瓜大三哥

图像识别(自己训练模型)

1.数据集:从VGG网下载,这是一些各种猫和狗的图片(每个文件夹下面大约200张图片,有点少,所以训练的结果并不是很好,最好是上万的数据) ? 2.做得图像识...

6127

扫码关注云+社区

领取腾讯云代金券