PyTorch 2.0中图像增强方法详解

【图书推荐】《PyTorch深度学习与计算机视觉实践》-CSDN博客

基于Vision Transformer的mini_ImageNet图片分类实战_imagenet数据集-CSDN博客

Vision Transformer模型是目前图形识别领域最为前沿的和性能最好的图形分类模型,它能够对目标图像做出准确度最高的判断。但在某些情况下,图像数据还不够大。在这种情况下,需要使用一些技术来增加我们的训练数据。人为地创建训练数据,使用诸如随机旋转、位移、剪切和翻转等技术来处理给定的数据。这种人为地创建更多的数据就称为图像增强。

深度学习中的图像增强可以提高模型的准确度,因为它可以增加数据集中图像的多样性,从而提高模型的性能。此外,通过对图像进行旋转、缩放、裁剪等操作,可以增加数据集的大小,从而减少过拟合的风险,提高模型的泛化能力。

主要的图像增强技术包括:

  1. 调整大小。
  2. 标准化。
  3. 高斯模糊。
  4. 随机裁剪。
  5. 中心剪切。
  6. 随机旋转。
  7. 亮度、对比度和饱和度调节。
  8. 水平翻转。
  9. 垂直翻转。
  10. 随机添加mask块。
  11. 中心区域添加补丁。
  12. 高斯噪声。
  13. 灰度变换。

传统的图像增强方法需要我们使用不同的类库进行处理,而PyTorch 2.0官方提供的API中有已经定义好的处理类库,我们可以直接安装对应的类然后使用即可。安装代码如下:

pip install torchvision

下面基于torchvision完成了几条图像增强方法。

1. 调整大小

首先需要导入数据,这里使用前面章节保存的鸟类图片image_1.png。在使用上可以直接导入即可,代码如下:

import cv2
from PIL import Image
from pathlib import Path
import matplotlib.pyplot as plt
import numpy as np
import sys
import torch
import numpy as np
import torchvision.transforms as Tplt.rcParams["savefig.bbox"] = 'tight'
orig_img = Image.open(Path('image_1.png'))
torch.manual_seed(0) #设置 CPU 生成随机数的种子,方便下次复现实验结果
print(np.asarray(orig_img).shape) #(800, 800, 3)#图像大小的调整,核心处理部分
resized_imgs = [T.Resize(size=size)(orig_img) for size in [128,256]]#plt.figure('resize:128*128')
ax1 = plt.subplot(131)
ax1.set_title('original')
ax1.imshow(orig_img)ax2 = plt.subplot(132)
ax2.set_title('resize:128*128')
ax2.imshow(resized_imgs[0])ax3 = plt.subplot(133)
ax3.set_title('resize:256*256')
ax3.imshow(resized_imgs[1])plt.show()resized_imgs_128 = np.asarray(resized_imgs[0])
resized_imgs_256 = np.asarray(resized_imgs[1])
print(resized_imgs_128.shape) #(800, 800, 3)
print(resized_imgs_256.shape) #(800, 800, 3)
cv2.imwrite("image_128.png",resized_imgs_128[:,:,::-1])	#对最后一个维度进行调整
cv2.imwrite("image_256.png",resized_imgs_256[:,:,::-1])	#对最后一个维度进行调整

这里有两个内容需要读者注意,一个是resized_imgs = [T.Resize(size=size)(orig_img) for size in [128,256]],它完成了对维度大小的调整。另一个是当使用CV2进行图形读取或者保存的时候,其通道为BGR(blue,green,red三原色),而在matplot中为RGB,因此需要对维度进行调整。调整结果如图11-10所示。

图11-10  调整图像大小

2. 标准化

标准化可以加快基于神经网络结构的模型的计算速度,从而加快学习速度。标准化方式主要有两种:一是从每个输入通道中减去通道平均值,二是除于通道标准差。代码如下:

normalized_img = T.Normalize(mean=(0.5, 0.5, 0.5), std=(0.5, 0.5, 0.5))(T.ToTensor()(orig_img))
normalized_img = [T.ToPILImage()(normalized_img)]
#plt.figure('resize:128*128')
ax1 = plt.subplot(121)
ax1.set_title('original')
ax1.imshow(orig_img)ax2 = plt.subplot(122)
ax2.set_title('normalize')
ax2.imshow(normalized_img[0])plt.show()

结果如图11-11所示。

图11-11  标准化

3. 高斯模糊

高斯模糊的作用是对图形进行模糊变换,核心代码如下:

blurred_imgs = [T.GaussianBlur(kernel_size=(3, 3), sigma=sigma)(orig_img) for sigma in (3,7)]

4. 随机裁剪

随机剪切图像的某一部分,核心代码如下:

random_crops = [T.RandomCrop(size=size)(orig_img) for size in (400,300)]

5. 中心剪切

剪切图像的中心区域,核心代码如下:

center_crops = [T.CenterCrop(size=size)(orig_img) for size in (128,64)]

6. 随机旋转

设计角度旋转图像,核心代码如下:

rotated_imgs = [T.RandomRotation(degrees=90)(orig_img)]

7. 亮度、对比度和饱和度调节

对图像的亮度、对比度和饱和度进行调节,核心代码如下:

colorjitter_img = [T.ColorJitter(brightness=(2,2), contrast=(0.5,0.5), saturation=(0.5,0.5))(orig_img)]

8. 水平翻转

此操作将图像转进行水平翻转,核心代码如下:

HorizontalFlip_img = [T.RandomHorizontalFlip(p=1)(orig_img)]

9. 垂直翻转

此操作将图像转进行垂直翻转,核心代码如下:

VerticalFlip_img = [T.RandomVerticalFlip(p=1)(orig_img)]

10. 随机添加mask块

正方形补丁(mask)随机应用在图像中。这些补丁的数量越多,神经网络解决问题的难度就越大。核心代码如下:

plt.rcParams["savefig.bbox"] = 'tight'
orig_img = Image.open(Path('image_128.png'))	#导入128大小的图片def add_random_boxes(img,n_k,size=9):  #这里的size是添加的随机块的多少h,w = size,sizeimg = np.asarray(img).copy()img_size = img.shape[1]boxes = []for k in range(n_k):y,x = np.random.randint(0,img_size-w,(2,))img[y:y+h,x:x+w] = 0boxes.append((x,y,h,w))img = Image.fromarray(img.astype('uint8'), 'RGB')return imgblocks_imgs = [add_random_boxes(orig_img,n_k=10)]

结果如图11-12所示。

图11-12  添加mask后的图片

add_random_boxes用于随机添加mask,其中的参数n_k是添加的mask块的个数,而size则是mask块的大小。

顺便说一句,当模型的要求是对mask块进行补全时,则是另一种专门的训练模型MAE,这点在后续的内容中会讲解。

11. 中心区域添加补丁

和随机添加mask块类似,这里只不过在图像的中心加入mask块,核心代码如下:

def add_central_region(img, size=9):h, w = size, sizeimg = np.asarray(img).copy()img_size = img.shape[1]img[int(img_size / 2 - h):int(img_size / 2 + h), int(img_size / 2 - w):int(img_size / 2 + w)] = 0img = Image.fromarray(img.astype('uint8'), 'RGB')return imgcentral_imgs = [add_central_region(orig_img, size=12)]

12. 高斯噪声

通过设置噪声因子,向图像中加入高斯噪声。噪声因子越高,图像的噪声越大。核心代码如下:

def add_noise(inputs, noise_factor=0.3):noisy = inputs + torch.randn_like(inputs) * noise_factornoisy = torch.clip(noisy, 0., 1.)return noisy#这里的0.3和0.6分别是添加的高斯噪音的系数
noise_imgs = [add_noise(T.ToTensor()(orig_img), noise_factor) for noise_factor in (0.3, 0.6)]
noise_imgs = [T.ToPILImage()(noise_img) for noise_img in noise_imgs]

13. 灰度变换

此操作将RGB图像转换为灰度图像,核心代码如下:

gray_img = T.Grayscale()(orig_img)

以上是PyTorch 2.0官方提供的图像变换方面的函数,读者可以在后续的学习中有目的地使用变换函数,从而增强模型的泛化能力,从而提高准确度。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

《动手做科研 》| 05. 如何开展和记录实验

地址链接:《动手做科研》05. 如何开展和记录实验 导读: 当我们开始训练多个具有不同超参数的模型,我们就需要对实验开始进行管理。我们将其分为三个部分:实验追踪、超参数搜索和配置设置。我们将使用 Weights & Biases 来演示实验记录和追踪&#xf…

支持AI的好用的编辑器aieditor

一、工具概述 AiEditor 是一个面向 AI 的下一代富文本编辑器,她基于 Web Component,因此支持 Layui、Vue、React、Angular 等几乎任何前端框架。她适配了 PC Web 端和手机端,并提供了 亮色 和 暗色 两个主题。除此之外,她还提供了…

【源码+文档+调试讲解】乡镇篮球队管理系统设计与实现

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本乡镇篮球队管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信…

基础篇| 全网最全详解12个大模型推理框架

01 什么是框架? 开始介绍之前, 我们先了解一下什么是框架?xx框架-IT人经常听到的名词。但是又有多少人知道框架的意思? 框架(framework)是一个框子:指其约束性,也是一个架子——指其支撑性。是一个基本概念上的结构,用于去解…

新作品,一个通用的 Cloudflare Workers HTTP 反向代理

本文介绍我最近写的新作品:使用 Cloudflare Workers/Pages 搭建 HTTP 反向代理,代码已经全部开源在 GitHub,按照 README 里面的脚本搭建就可以了,非常简单。 GitHub:https://github.com/jonssonyan/cf-workers-proxy …

数字图像处理 第三章 灰度变换和空间滤波(上)

文章目录 本章简介一、背景知识 P62 - P641.1 灰度变换和空间滤波基础 P62 - P63二、一些基本的灰度变换函数 P64 - P712.1 图像反转 P642.2 对数变换 P64 - P662.3 幂律(伽马变换 P66 - P682.4 分段线性变换函数 P68 - P71本章知识点总结本章简介 本章讨论在空间域中的图像增强…

【C/C++】关于 extern “C“ 的理解

详细解释 #ifdef __cplusplus extern "C" 在C中,#ifdef __cplusplus 和 extern "C" 是用于处理C和C混合编程中的名称修饰(name mangling)问题的预处理器指令和关键字。 #ifdef __cplusplus __cplusplus 是一个预处理器…

人工智能大模型发展带来的风险挑战和对策

经过近70年的发展,人工智能技术发展经历了三次起伏,2022年以来,以ChatGPT、Sora等为代表的预训练大模型持续取得突破,推动着人工智能技术从感知向认识,从分析判断式向生成式,从专用向通用进入快速发展的新阶…

PythonDjangoMysql外卖app系统32762-计算机毕业设计项目选题推荐(附源码)

摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,餐饮外卖当然也不例外。 外卖app系统主要功能模块包括后台首页,轮播图,资源管理(餐饮…

【CTFWP】ctfshow-web40

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 题目介绍:题目分析:payload:payload解释:payload2:payload2解释:flag 题目介绍: …

高等数学 第七讲 一元函数积分学的概念和性质_不定积分_定积分_变限积分_反常积分

1.不定积分 文章目录 1.不定积分1.1 原函数1.1.1 原函数与不定积分的定义1.1.2 原函数存在定理 2.定积分2.1 定积分的定义2.2 定积分的精确定义2.3 定积分的几何意义2.4 定积分的存在定理2.5 定积分的性质 3.变限积分3.1 变限积分的定理3.2 变限积分的性质 4.反常积分(待更新) …

红酒标签设计:艺术与品味的结合

在红酒的世界里,每一瓶酒都如同一位优雅的舞者,在酒柜的舞台上静静诉说着自己的故事。而红酒的标签,则是这位舞者身上较华丽的舞裙,它不仅是红酒的身份证明,更是艺术与品味的很好结合。今天,我们就来聊聊红…

重载云台摄像机如何通过国标28181接入到统一视频接入平台(视频国标接入平台)

目录 一、国标GB/T 28181介绍 1、国标GB/T28181 2、内容和特点 二、重载云台摄像机 1、定义 2、结构与设计 3、功能和优势 4、特点 5、应用场景 二、接入准备工作 1、确定网络环境 (1)公网接入 (2)专网传输 2、检查重…

STC单片机UART映射printf

文章目录 使用STC-ISP生成UART初始化函数 增加如下函数&#xff0c;注意使用printf函数需要添加 #include <stdio.h> 头文件 #include <stdio.h>void Uart1_Init(void) //9600bps12.000MHz {SCON 0x50; //8位数据,可变波特率AUXR | 0x01; //串口1选择定时器2为…

Vue2从基础到实战(v-bind对于样式控制的增强-操作style,v-model在其他表单元素的使用)

v-bind对于样式控制的增强-操作style 语法&#xff1a;style"样式对象" <div class"box" :style"{ CSS属性名1: CSS属性值, CSS属性名2: CSS属性值 }"></div> 代码解析&#xff1a; HTML结构&#xff1a; 包含了一个div元素&…

OSI七层网络模型:构建网络通信的基石

在计算机网络领域&#xff0c;OSI&#xff08;Open Systems Interconnection&#xff09;七层模型是理解网络通信过程的关键框架。该模型将网络通信过程细分为七个层次&#xff0c;每一层都有其特定的功能和职责&#xff0c;共同协作完成数据从发送端到接收端的传输。接下来&am…

申请美区 Apple ID 完整步骤图解,轻松免费创建账户

苹果手机在下载一些软件时需要我们登录其 Apple ID 才能下载&#xff0c;但是由于一些限制国内的 Apple ID 在 App Store 中有一些限制不能下载某些软件&#xff0c;如何解决这个问题&#xff1f;那就是申请一个美区 Apple ID&#xff0c;怎么申请国外苹果账户呢&#xff1f;下…

WebLogic: CVE-2020-14882/14883【getshell】

记录第一次getshell公网设备 漏洞介绍 CVE-2020-14882&#xff1a;允许 未授权 的用户绕过管理控制台 &#xff08;Console&#xff09;的权限验证访问后台 CVE-2020-14883&#xff1a;允许后台任意用户通过HTTP协议 执行任意命令 使用这两个漏洞组成的利用链&#xff0c;可通过…

Java----代理

什么是代理&#xff1f; 在Java中&#xff0c;代理是一种用于创建一个或多个服务的中间层&#xff0c;它可以拦截并处理程序对实际服务对象的请求。代理模式是一种设计模式&#xff0c;属于结构型模式&#xff0c;它允许程序员在不修改实际对象代码的情况下&#xff0c;增强或控…