深度学习中的图像增强合集

引言

图像增强是我们在深度学习领域中绕不开的一个话题,本文我们将讨论什么是图像增强,并在三个不同的 python 库中实现它,即 Keras、Pytorch 和 augmentation(专门用于图像增强的一个库)。所以第一个问题就是什么是图像增强以及常规的数据增强。

什么是图像增强?

增强是使规模或数量增大的动作或过程。

在深度学习中,深度网络需要大量的训练数据来很好地归纳和达到良好的准确性。但在某些情况下,图像数据不够大。在这种情况下,我们使用一些技术来增加我们的训练数据。它人为地创建训练数据,使用诸如随机旋转、位移、剪切和翻转等技术处理给定的数据(我们将在后面讨论其中的一些)。

图像增强是为了训练我们的深度学习模型而产生新图像的过程。这些新的图像是使用现有的训练图像生成的,因此我们不必手动收集它们。

不同的图像增强技术

我们可以使用各种技术来增强图像。例如:

空间增强

· 缩放

· 翻转

· 旋转

· 剪切

· 平移

像素增强

· 亮度

· 对比度

· 饱和度

· 色调

深度学习中的图像增强

在深度学习中,数据增强是一种常见的做法。因此,每个深度学习框架都有自己的增强方法,甚至有一个完整的库。例如,让我们看看如何使用 Keras、 PyTorch 和 Albumentations 中的内置方法应用图像增强。

afaec2766ca81fa6bf746ce61a829c4a.jpeg

1. Keras

Keras 的 ImageDataGenerator 类提供了一种快速简便的方法来增强图像。它提供了许多不同的增强技术,如标准化、旋转、移位、翻转、亮度变化等等。使用 Keras 的 ImageDataGenerator 类的主要好处是它旨在提供实时数据增强。这意味着它会在您的模型处于训练阶段时生成增强图像。

ImageDataGenerator 类确保模型在每个时期接收图像的新变化。但它只返回转换后的图像,并没有将它们添加到原始图像数据集中(如果加入到原始数据集,那么模型将多次处理原始图像,这肯定会使我们的模型过拟合)。 ImageDataGenerator 的另一个优点是它的内存占用量很低,这是因为不使用此类,我们一次加载所有图像。但是在使用它时,我们批量加载图像,这节省了大量内存。

它支持一系列的图像增强方法,现在我们将专注于五种主要类型的方法,如下所示:

· 通过 width_shift_range 和 height_shift_range 参数进行图像位移增强。

· 通过 horizontal_flip 和 vertical_flip 参数进行图像翻转增强。

· 通过 rotation_range 参数进行图像旋转增强。

· 通过 brightness_range 参数进行图像亮度增强。

· 通过 zoom_range 参数进行图像缩放增强。

如下所示,我们可以构造 ImageDataGenerator 类的实例。

from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
img = load_img('path_directory/img.jpg')


from numpy import expand_dims
from keras.preprocessing.image import load_img
from keras.preprocessing.image import img_to_array
from keras.preprocessing.image import ImageDataGenerator
import matplotlib.pyplot  as plt


# load the image
plt.figure(figsize=(45,30))


# convert to numpy array
data = img_to_array(img)


# expand dimension to one sample
samples = expand_dims(data, 0)


# create image data augmentation generator
datagen = ImageDataGenerator(featurewise_center=True,rotation_range=(0-30),width_shift_range=0.2,
                             height_shift_range=0.2,brightness_range=[0.5,1.5],
                             shear_range=0.2, zoom_range=0.2,channel_shift_range=0.2,
                             horizontal_flip=True, vertical_flip=True,fill_mode='nearest')
# prepare iterator
it = datagen.flow(samples, batch_size=1)


# generate samples and plot
for i in range(6):
  # define subplot
  plt.subplot(330 + 1 + i)
  # generate batch of images
  batch = it.next()
  # convert to unsigned integers for viewing
  image = batch[0].astype('uint8')
  # plot raw pixel data
  plt.imshow(image)
  
# show the figure
plt.show()

最终将生成如下所示的随机增强图像,并将其提供给模型。

11b450469fd99419b1bd3477b8c1e445.png

2.Pytorch

PyTorch 是一个基于 Python 的库,有助于构建深度学习模型并在各种应用程序中使用它们。但它不仅仅是一个深度学习库,还是一个科学计算库。

使用 PyTorch 的主要优点是我们可以对选定的图像单独应用图像增强技术。

从导入图像开始,我们将定义 imshow() 函数来可视化实际和转换后的图像。

缩放:在缩放或调整大小时,将图像调整为给定的大小。

# scaling
loader_transform = transforms.Resize((500,500))
imshow('path_directory/img.jpg', loader_transform)

2abe27c36d4d2a676ec19af9b7ab3cfc.png

裁剪:在裁剪中,选择图像的一部分,例如在给定的示例中,返回中心裁剪的图像。

# cropping
loader_transform = transforms.CenterCrop(size=(600,600))
imshow('path_diectory/img.jpg', loader_transform)

e510153765c83d344d01f986ab6186bc.png

翻转:在翻转时,图像被水平或垂直翻转。

# horizontal flip with probability 1 (default is 0.5)
loader_transform = transforms.RandomHorizontalFlip(p=1)
imshow('path_directory/img.jpg', loader_transform)

f439aa45172dfdbd2e0c3a6d0ef062a3.png

像素增强:像素增强是通过更改图像的像素值来改变图像的颜色属性。

img = PIL.Image.open('path_directory/img.jpg')
fig, ax = plt.subplots(2, 2, figsize=(16, 10))


# brightness
loader_transform1 = transforms.ColorJitter(brightness=2)
img1 = loader_transform1(img)
ax[0, 0].set_title(f'brightness')
ax[0, 0].imshow(img1)


# contrast
loader_transform2 = transforms.ColorJitter(contrast=2)
img2 = loader_transform2(img)
ax[0, 1].set_title(f'contrast')
ax[0, 1].imshow(img2)


# saturation
loader_transform3 = transforms.ColorJitter(saturation=2)
img3 = loader_transform3(img)
ax[1, 0].set_title(f'saturation')
ax[1, 0].imshow(img3)
fig.savefig('color augmentation', bbox_inches='tight')


# hue
loader_transform4 = transforms.ColorJitter(hue=0.2)
img4 = loader_transform4(img)
ax[1, 1].set_title(f'hue')
ax[1, 1].imshow(img4)


fig.savefig('color augmentation', bbox_inches='tight')

6733a6621a4619af464dafff88431908.png

3. Albumentation

Albumentations 是一种计算机视觉工具,可提高深度卷积神经网络的性能。Albumentations 是一个 Python 库,用于快速灵活的图像增强。它有效地实现了丰富多样的图像变换操作,这些操作针对性能进行了优化,同时为不同的计算机视觉任务提供简洁而强大的图像增强接口,包括对象分类、分割和检测。

#importing all required libraries
import cv2
import random
from matplotlib import pyplot as plt
import albumentations as A


image = cv2.imread('/content/drive/MyDrive/sunil.jpg')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

翻转

transform = A.HorizontalFlip(p=0.5)
random.seed(7)
augmented_image = transform(image=image)['image']
plt.imshow(augmented_image)

8ff081130b19a17d02fbec4aa8c7421a.png

旋转

transform = A.ShiftScaleRotate(p=0.5)
random.seed(7) 
augmented_image = transform(image=image)['image']
plt.imshow(augmented_image)

6bb8d1f1ad88da7298384afa46d93176.png

组合增强

transform = A.Compose([
    A.RandomCrop(width=500, height=500),
    A.RandomBrightnessContrast(p=0.2),
                      ])
random.seed(7) 
augmented_image = transform(image=image)['image']
plt.imshow(augmented_image)

668c52e20547aabad58ac698942e15ee.png

总结

在本文中,我们了解了如何在训练深度学习神经网络时使用图像数据增强。了解如何将图像增强技术应用于扩展训练数据集,以提高模型的性能和泛化能力。并且知道如何使用 Keras、Pytorch 和 Albumentation 库来对图像进行数据增强。

·  END  ·

HAPPY LIFE

3672f32aa030a5f44549250c85696698.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/124000.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux shell编程学习笔记21:用select in循环语句打造菜单

一、select in循环语句的功能 Linux shell脚本编程提供了select in语句,这是 Shell 独有的一种循环语句,非常适合终端(Terminal)这样的交互场景,它可以根据用户的设置显示出带编号的菜单,用户通过输入不同…

nginx-配置拆分(各个模块详细说明)

主配置文件 配置结构 ... #nginx全局块events { #events块... #events块 }http { #http块... #http全局块server { #server块... #server全局块location [PATTERN] { #location块... #location块}location [PATTERN] {...}}serv…

高性能网络编程 - The C10K problem 以及 网络编程技术角度的解决思路

文章目录 C10KC10K的由来C10K问题在技术层面的典型体现C10K问题的本质C10K解决思路思路一:每个进程/线程处理一个连接思路二:每个进程/线程同时处理多个连接(IO多路复用)● 实现方式1:直接循环处理多个连接● 实现方式…

线上 kafka rebalance 解决

上周末我们服务上线完毕之后发生了一个kafka相关的异常,线上的kafka频繁的rebalance,详细的报错我已经贴到下面,根据字面意思:消费者异常 org.apache.kafka.clients.consumer.CommitFailedException: 无法完成提交,因为…

设计模式-状态模式 golang实现

一 什么是有限状态机 有限状态机,英⽂翻译是 Finite State Machine,缩写为 FSM,简称为状态机。 状态机不是指一台实际机器,而是指一个数学模型。说白了,一般就是指一张状态转换图。 已订单交易为例: 1.…

unity打AB包,AssetBundle预制体与图集(三)

警告: spriteatlasmanager.atlasrequested wasn’t listened to while 条件一:图片打图集里面去了 条件二:然后图集打成AB包了 条件三:UI预制体也打到AB包里面去了 步骤一:先加载了图集 步骤二:再加载UI预…

Spring Cloud LoadBalancer基础知识

LoadBalancer 概念常见的负载均衡策略使用随机选择的负载均衡策略创建随机选择负载均衡器配置 Nacos 权重负载均衡器创建 Nacos 负载均衡器配置 自定义负载均衡器(根据IP哈希策略选择)创建自定义负载均衡器封装自定义负载均衡器配置 缓存 概念 LoadBalancer(负载均衡器)是一种…

jenkins部署job

apt install fontconfig openjdk-11-jre wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.429/jenkins.wardeb包安装 wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/debian-stable/jenkins_2.414.3_all.debdpkg -i jenkins_2.414.3_all.deb 访问 http://…

垂直领域大模型落地思考

相比能做很多事,但每件事都马马虎虎的通用大模型;只能做一两件事,但这一两件事都能做好,可被信赖的垂直大模型会更有价值。这样的垂直大模型能帮助我们真正解决问题,提高生产效率。 本文将系统介绍如何做一个垂直领域…

JavaScript脚本操作CSS

脚本化CSS就是使用JavaScript脚本操作CSS,配合HTML5、Ajax、jQuery等技术,可以设计出细腻、逼真的页面特效和交互行为,提升用户体验,如网页对象的显示/隐藏、定位、变形、运动等动态样式。 1、CSS脚本化基础 CSS样式有两种形式&…

学习笔记:CANOE模拟LIN主节点和实际从节点进行通信测试

先写点感想,在LIN开发阶段,我一般用图莫斯USB工具来进行模拟主机节点发送数据。后来公司买了CANOE工具就边学习边搭建了LIN的测试工程,网上的资料真的很少,主要是靠自己一点点摸索前进,总算入门。几个月后的今天&#…

基于swing的人事管理系统

概述 个人项目人事管理系统,针对部门和人员之间的管理。 详细 一、项目UI 二、项目结构 三、项目使用方法 Eclipse导入现有现有项目到工作空间即可,会自动加载包内相关jar包,使用的java源文件 四、部分代码 MainFrm.java package view…

Docker指定容器使用内存

Docker指定容器使用内存 作者:铁乐与猫 如果是还没有生成的容器,你可以从指定镜像生成容器时特意加上 run -m 256m 或 --memory-swap512m来限制。 -m操作指定的是物理内存,还有虚拟交换分区默认也会生成同样的大小,而–memory-…

ubuntu系统黑屏,且光标不闪烁

选择第二个,进入恢复模式 选择第二个,进入恢复模式 选择root 输入: startx然后就可以进入文本界面或者图形化界面了,如果不行,报错,可能需要需要下载这个包,把这个错误到网上搜索一下就可以找…

批量迁移redis实例的key

我们知道migrate 命令可以迁移redis的多个key,但是如果redis的key有非常多,那用起来就很不方便了。 所以下面分享一个脚本来实现批量key的迁移,主要使用的命令为dump和restore 脚本如下: #!/bin/bash redis-cli -h host1 -p 63…

Redis被攻击纪实

一、前言 声明:本文仅供技术交流使用,严禁采用本文的方法进行任何非法活动。 上周新来的同事分享Redis的原理和机制,想起2017年的时候测试环境Redis被攻击,最后只能重新安装服务器,今天试验一把利用Redis漏洞进行攻击…

成集云 | 英克对接零售O2O+线上商城 | 解决方案

方案介绍 零售O2O线上商城是一种新型的商业模式,它通过线上和线下的融合,提供更加便捷的购物体验。其中,O2O指的是线上与线下的结合,通过互联网平台与实体店面的结合,实现线上线下的互动和协同。线上商城则是指通过互…

AI优秀企业案例——机器人流程自动化:达观数据RPA

通过学习业内领先公司的最佳实践,我们可以更好地将它们应用到我们自己的公司和业务中。特别是第三部分,提供了大量应用案例,让我们一起期待看到这些案例的结尾。 1.简介 达观数据是一家专注于智能文本机器人的国家高新技术企业,…

Leetcode-面试题 02.02 返回倒数第 k 个节点

快慢指针:让快指针先移动n个节点,之后快慢指针一起依次向后移动一个结点,等到快指针移动到链表尾时,慢指针则移动到倒数第n个结点位置。 /*** Definition for singly-linked list.* public class ListNode {* int val;* …

矩阵等价和向量组等价的一些问题

什么是向量组?答:向量组是由若干同维数的列向量(或同维数的行向量)组成的集合。什么是向量组等价?答:两个向量组,各自拼成矩阵A和B,向量组等价就是三秩相等,即r&#xff…
最新文章