查看: 2646|回复: 0

使用Python来图像增强

[复制链接]
  • TA的每日心情
    无聊
    2019-1-9 09:43
  • 签到天数: 6 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2018-10-11 11:26:22 | 显示全部楼层 |阅读模式
    分享到:
    我目前正在进行一项研究,审查图像数据增强的深度和有效性。本研究的目标是在有限或者少量数据的情况下,学习如何增加我们的数据集大小,来训练鲁棒性卷积网络模型。

    这项研究需要列出所有我们能想到的图像增强方法,并穷举所有这些组合,尝试提高图像分类模型的性能。首先出现在脑海中最简单的图片增强:是翻转,平移,旋转,缩放,隔离个别的r,g,b颜色通道,和添加噪音。更令人兴奋的增强是使用生成对抗网络模型,或用遗传算法交换生成器网络,更有甚者在图像中应用instagram风格的光照滤镜、随机区域锐化滤镜、基于聚类技术的均值图像增强等创新方法。

    本文将向您展示如何使用NumPy对图像进行增强。

    下面是一些增强技术的列表和说明,如果你能想到任何其他方法来增强图像,可提高图像分类器的质量,请留下评论。
    1.png
    原始图片(未增强)

    增强

    所有的增强都是在没有OpenCV库的情况下使用Numpy完成的
    1. # Image Loading Code used for these examples
    2. from PIL import Image
    3. import numpy as np
    4. import matplotlib.pyplot as plt
    5. img = Image.open('./NIKE.png')
    6. img = np.array(img)
    7. plt.imshow(img)
    8. plt.show()
    复制代码

    翻转
    翻转图像是最流行的图像数据增强方法之一。

    这主要是由于翻转代码的简单性以及对于大多数问题的直观性,翻转图像会为模型增加价值。

    下面的模型可以被认为是看到左鞋而不是右鞋,因此通过这种数据增加,模型对于看到鞋的潜在变化变得更加健壮。
    2.png
    1. # Flipping images with Numpy
    2. flipped_img = np.fliplr(img)
    3. plt.imshow(flipped_img)
    4. plt.show()
    复制代码

    平移

    平移增强对检测类分类器有很大价值。 这个分类模型试图检测鞋子何时在图像中而不是在图像中。

    平移将有助于它在不看鞋架的整个鞋子的情况下拿起鞋子。
    3.png
    1. # Shifting Left
    2. for i in range(HEIGHT, 1, -1):
    3.   for j in range(WIDTH):
    4.      if (i < HEIGHT-20):
    5.        img[j][i] = img[j][i-20]
    6.      elif (i < HEIGHT-1):
    7.        img[j][i] = 0
    8. plt.imshow(img)
    9. plt.show()
    复制代码
    4.png
    1. # Shifting Right
    2. for j in range(WIDTH):
    3.   for i in range(HEIGHT):
    4.     if (i < HEIGHT-20):
    5.       img[j][i] = img[j][i+20]
    6. plt.imshow(img)
    7. plt.show()
    复制代码
    5.png
    1. # Shifting Up
    2. for j in range(WIDTH):
    3.   for i in range(HEIGHT):
    4.     if (j < WIDTH - 20 and j > 20):
    5.       img[j][i] = img[j+20][i]
    6.     else:
    7.       img[j][i] = 0
    8. plt.imshow(img)
    9. plt.show()
    复制代码
    6.png
    1. #Shifting Down
    2. for j in range(WIDTH, 1, -1):
    3.   for i in range(278):
    4.     if (j < 144 and j > 20):
    5.       img[j][i] = img[j-20][i]
    6. plt.imshow(img)
    7. plt.show()
    复制代码

    噪点

    噪点是一种有趣的增强技术。 我已经看过很多关于对抗训练的有趣论文,你可以将一些噪点投入到图像中,因此模型无法正确分类。 但我仍然在寻找产生比下图更好的噪点的方法。 添加噪点可能有助于光照畸变并使模型更加鲁棒(编者就2:意思是这里让边缘光照发生失真,让尺度不变的情况下特征转变(SIFT),从而能增加鲁棒性(SURF),使得识别更加准确 ,不过,看这文章的水平应该是我多虑了)。
    7.png
    1. # ADDING NOISE
    2. noise = np.random.randint(5, size = (164, 278, 4), dtype = 'uint8')

    3. for i in range(WIDTH):
    4.     for j in range(HEIGHT):
    5.         for k in range(DEPTH):
    6.             if (img[i][j][k] != 255):
    7.                 img[i][j][k] += noise[i][j][k]
    8. plt.imshow(img)
    9. plt.show()
    复制代码

    GANs(生成对抗网络):

    我已经收到很多关于研究使用Generative Adversarial Networks进行数据增强的兴趣,下面是我能够使用MNIST数据集生成的一些图像。
    8.png

    正如我们从上面的图片中可以看出的那样,它们确实看起来像3 ,7和9。我目前在扩展网络架构方面遇到一些麻烦,以支持运动鞋的300x300x3尺寸输出,而不是28x28x1 MNIST数字。

    但是,我对这项研究感到非常兴奋,并期待继续这项研究!感谢您阅读本文,希望您现在知道如何实现基本数据扩充以改进您的分类模型!




    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-16 15:24 , Processed in 0.112450 second(s), 16 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.