干货 | 图像数据增强实战

简介:

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

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

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

a58c99a8e0ccb955f4c98f8164ee7aedd2048a6e

原始图像

增强

所有的代码都没有使用 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

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

593fcbb26af5c13f1e0aee122291ff24af51824e

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

平移(Translations

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

2138aae653950df8fcb0a3bc5d1235edcbecfb0d

# 向左平移
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()

83b218838db9a8d7792bb326bf076bec27cf398b

# 向右平移
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()
45e611d9b80c2d9b2bba11ad4a34ca73f050c936

# 向上平移
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()
ae61864db6779b89338cb8a53cea56f3077279ee

# 向下平移
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

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

8a8b10f3db16235e5807680f8dd3845db9b8b128

# 添加噪声
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数据集生成的一些图像。

839b3f10286012662fc1b9f11f46d650aeeca65e

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


原文发布时间为:2018-10-9

本文作者:小韩

本文来自云栖社区合作伙伴“磐创AI”,了解相关信息可以关注“磐创AI”。

相关文章
|
2月前
|
人工智能 vr&ar 图形学
开源单图生成3D模型TripoSR的局限性分析
【2月更文挑战第25天】开源单图生成3D模型TripoSR的局限性分析
205 6
开源单图生成3D模型TripoSR的局限性分析
|
5月前
|
数据挖掘 计算机视觉 Python
Python数据分析中图像处理的实用技术点:图像加载与保存、图像转换与增强、特征提取与描述
Python数据分析中图像处理的实用技术点:图像加载与保存、图像转换与增强、特征提取与描述
45 1
Python数据分析中图像处理的实用技术点:图像加载与保存、图像转换与增强、特征提取与描述
|
机器学习/深度学习 自然语言处理 算法
浅述几种文本和图像数据增强的方法
在现实场景中,我们往往收集不到太多的数据,那么为了扩大数据集,可以采用数据增强手段来增加样本,那么平常我们应该怎么做数据增强的呢? 什么是数据增强 数据增强也叫数据扩增,意思是在不实质性的增加数据的情况下,让有限的数据产生等价于更多数据的价值。
|
机器学习/深度学习
深度学习数据增强方法-内含(亮度增强,对比度增强,旋转图图像,翻转图像,仿射变化扩充图像,错切变化扩充图像,HSV数据增强)七种方式进行增强-每种扩充一张实现7倍扩)+ 图像缩放代码-批量
深度学习数据增强方法-内含(亮度增强,对比度增强,旋转图图像,翻转图像,仿射变化扩充图像,错切变化扩充图像,HSV数据增强)七种方式进行增强-每种扩充一张实现7倍扩)+ 图像缩放代码-批量
|
6月前
|
机器学习/深度学习 传感器 自动驾驶
视觉BEV基本原理和方案解析
视觉BEV在高德高精地图地面要素识别、车道线拓扑构建、车端融合定位等业务场景中都扮演了重要角色。
|
5月前
|
机器学习/深度学习 算法 数据处理
【计算机视觉】数据获取、数据标注、数据增强的概念简介
【计算机视觉】数据获取、数据标注、数据增强的概念简介
63 0
|
5月前
|
监控 算法 数据库
入门了解——三维人脸数据的优点
入门了解——三维人脸数据的优点
24 0
|
6月前
|
机器学习/深度学习 算法框架/工具 Python
pyton数据增强
pyton数据增强
37 0
|
9月前
|
PyTorch 算法框架/工具
语义分割数据增强——图像和标注同步增强
其中常见的数据增强方式包括:旋转、垂直翻转、水平翻转、放缩、剪裁、归一化等。
379 0
|
11月前
|
机器学习/深度学习 存储 计算机视觉
【目标检测】常用数据增强从原理到实现
【目标检测】常用数据增强从原理到实现
207 0