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

简介: 还在为数据集大小发愁吗?试试数据增强方法吧。

       在图像分类任务中,图像数据增强一般是大多数人会采用的方法之一,这是由于深度学习对数据集的大小有一定的要求,若原始的数据集比较小,无法很好地满足网络模型的训练,从而影响模型的性能,而图像增强是对原始图像进行一定的处理以扩充数据集,能够在一定程度上提升模型的性能。本文是我目前正在研究一项内容,总结图像数据增强的一些方法及其有效性。本研究的目的是学习如何增加训练数据集的大小,通过有限或少量数据来训练获得具有鲁棒性的卷积网络模型。
       这项研究要求列出我们可以想到的所有图像增强方法,并列举出所有这些组合,以尝试和改善图像分类模型的性能。那么,能够想到的一些最简单的增强方法有翻转、平移、旋转、缩放,分离单个r、g、b三个颜色通道以及添加噪声。更激动人心的增强方法是比较热门的使用生成对抗网络模型,有时交替使用遗传算法和生成对抗网络。此外,还提出了一些创造性方法,例如将类似于Instagram中的高亮滤镜应用于图像、应用随机区域锐化滤镜,以及基于聚类技术添加平均图像等。本文将展示如何使用NumPy对图像进行扩充。
       下面是上述提到的增强技术的总结及说明,如果你能想到其它任何方法来增强图像,并可以提高图像分类器的性能,请在留言区评论。

1
原始图像

增强

       所有的数据增强都是在没有OpenCV库的情况下,使用Numpy完成。

# Image Loading Code used for these examples
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()
AI 代码解读

翻转|Flipping

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

2

# Flipping images with Numpy
flipped_img = np.fliplr(img)
plt.imshow(flipped_img)
plt.show()
AI 代码解读

平移|Translations

       很容易想象对完成检测任务的分类器进行平移增强能够提升其性能,好像这个分类模型试图检测鞋子何时在图像中而不是是否在图像中。这些平移操作将有助于它在无法看清整个鞋子的情况下认出鞋子来。

3左移

# Shifting Left
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()
AI 代码解读

4
右移

# Shifting Right
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()
AI 代码解读

5
上移

# Shifting Up
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()
AI 代码解读

6
下移

#Shifting Down
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()
AI 代码解读

加噪|Noise

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

7
加噪

# ADDING 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()
AI 代码解读

生成对抗网络|GAN:

       我阅读了很多关于生成对抗网络的文献,文献中很多都使用生成对抗网络进行数据增强,我对此也比较感兴趣,下面是我使用MNIST数据集生成的一些图像。

8
GAN生成图像


       正如我们从上图中看到的,它们确实看起来像数字3、7和9,但实际上,将其送进数字手写体分类器中,它们并不能被识别为对应的数字。
       感谢你阅读本文,希望你现在知道如何实现对基本数据进行扩充,以改进自己搭建的分类模型!

作者信息

Connor Shorten,对深度学习、算法理论和生物信息学感兴趣
本文由阿里云云栖社区组织翻译。
文章原标题《Image Augmentation Examples in Python》,译者:海棠,审校:Uncle_LLD。
文章为简译,更为详细的内容,请查看原文

目录
打赏
0
0
0
1
1807
分享
相关文章
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
害虫识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了12种常见的害虫种类数据集【"蚂蚁(ants)", "蜜蜂(bees)", "甲虫(beetle)", "毛虫(catterpillar)", "蚯蚓(earthworms)", "蜚蠊(earwig)", "蚱蜢(grasshopper)", "飞蛾(moth)", "鼻涕虫(slug)", "蜗牛(snail)", "黄蜂(wasp)", "象鼻虫(weevil)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Djan
29 1
基于Python深度学习的【害虫识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
Python爬虫实战:一键采集电商数据,掌握市场动态!
这个爬虫还挺实用,不光能爬电商数据,改改解析规则,啥数据都能爬。写爬虫最重要的是要有耐心,遇到问题别着急,慢慢调试就成。代码写好了,运行起来那叫一个爽,分分钟几千条数据到手。
python语言采集淘宝商品详情数据,json数据示例返回
通过淘宝开放平台的API接口,开发者可以轻松获取商品详情数据,并利用这些数据进行商品分析、价格监控、库存管理等操作。本文提供的示例代码和JSON数据解析方法,可以帮助您快速上手淘宝商品数据的采集与处理。
Python 请求微店商品详情数据 API 接口
微店开放平台允许开发者通过API获取商品详情数据。使用Python请求微店商品详情API的主要步骤包括:1. 注册并申请API权限,获得app_key和app_secret;2. 确定API接口地址与请求参数,如商品ID;3. 生成签名确保请求安全合法;4. 使用requests库发送HTTP请求获取数据;5. 处理返回的JSON格式响应数据。开发时需严格遵循微店API文档要求。
Python爬取某云热歌榜:解析动态加载的歌曲数据
Python爬取某云热歌榜:解析动态加载的歌曲数据
实战指南:通过1688开放平台API获取商品详情数据(附Python代码及避坑指南)
1688作为国内最大的B2B供应链平台,其API为企业提供合法合规的JSON数据源,直接获取批发价、SKU库存等核心数据。相比爬虫方案,官方API避免了反爬严格、数据缺失和法律风险等问题。企业接入1688商品API需完成资质认证、创建应用、签名机制解析及调用接口四步。应用场景包括智能采购系统、供应商评估模型和跨境选品分析。提供高频问题解决方案及安全合规实践,确保数据安全与合法使用。立即访问1688开放平台,解锁B2B数据宝藏!
【Azure Developer】编写Python SDK代码实现从China Azure中VM Disk中创建磁盘快照Snapshot
本文介绍如何使用Python SDK为中国区微软云(China Azure)中的虚拟机磁盘创建快照。通过Azure Python SDK的Snapshot Class,指定`location`和`creation_data`参数,使用`Copy`选项从现有磁盘创建快照。代码示例展示了如何配置Default Azure Credential,并设置特定于中国区Azure的`base_url`和`credential_scopes`。参考资料包括官方文档和相关API说明。
Python中使用MySQL模糊查询的方法
本文介绍了两种使用Python进行MySQL模糊查询的方法:一是使用`pymysql`库,二是使用`mysql-connector-python`库。通过这两种方法,可以连接MySQL数据库并执行模糊查询。具体步骤包括安装库、配置数据库连接参数、编写SQL查询语句以及处理查询结果。文中详细展示了代码示例,并提供了注意事项,如替换数据库连接信息、正确使用通配符和关闭数据库连接等。确保在实际应用中注意SQL注入风险,使用参数化查询以保障安全性。
如何在Python中高效实现CSV到JSON的数据转换
在实际项目中,数据格式转换是常见问题,尤其从CSV到JSON的转换。本文深入探讨了多种转换方法,涵盖Python基础实现、数据预处理、错误处理、性能优化及调试验证技巧。通过分块处理、并行处理等手段提升大文件转换效率,并介绍如何封装为命令行工具或Web API,实现自动化批量处理。关键点包括基础实现、数据清洗、异常捕获、性能优化和单元测试,确保转换流程稳定高效。
137 83

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等