transforms数据增强

news2024/11/23 19:20:56

在AI领域的模型训练中通常会遇到模型过拟合问题,通常采取的办法就是数据增强处理,例如在图像处理中,数据增强是指对原始图像进行旋转、缩放、剪切、翻转等操作,以扩大训练数据集的规模,提高模型泛化能力,降低过拟合风险。

笔者在这里以深度学习框架Pytorch中的数据增强工具(transforms模块)为例介绍数据增强处理。torchvision.transforms是PyTorch中用于图像处理和数据增强的模块。它提供了许多函数,可以在图像上应用各种转换,例如裁剪、旋转、翻转、缩放、归一化等操作,从而生成更多变化的图像数据。

transforms模块中的函数可以分为两类:一类是针对PIL图像对象的操作函数,例如:Resize、RandomCrop、RandomHorizontalFlip等;另一类是对Tensor对象的操作函数,例如:Normalize、ToTensor等。下面笔者将分别介绍这些函数的原理和代码示例。

针对PIL图像对象的操作函数

Resize

Resize函数可以将图像缩放到指定大小。常用的缩放方法等比例缩放和非等比例缩放两种。其中如果预先目标大小,Resize函数会按照目标大小等比例缩放图像,如果预先仅指定了图片宽度或高度,则会进行非等比例缩放。

from torchvision import transforms
from PIL import Image

# 等比例缩放
transform = transforms.Compose([transforms.Resize((224, 224))])
img = Image.open('1.png')
img.show(img)
img = transform(img)
img.show(img)

# # 非等比例缩放
transform = transforms.Compose([transforms.Resize((224, 300))])
img = Image.open('1.png')
img.show(img)
img = transform(img)
img.show(img)
  • 等比例缩放
    在这里插入图片描述

  • 非等比例缩放

在这里插入图片描述

CenterCrop

CenterCrop函数可以从图像中心裁剪指定大小的区域。

from torchvision import transforms
from PIL import Image

transform = transforms.Compose([transforms.CenterCrop(224)])
img = Image.open('1.png')
img.show(img)
img = transform(img)
img.show(img)

在这里插入图片描述

RandomCrop

RandomCrop函数可以随机裁剪指定大小的区域。

from torchvision import transforms
from PIL import Image

transform = transforms.Compose([transforms.RandomCrop(224)])
img = Image.open('1.png')
img.show(img)
img = transform(img)
img.show(img)

在这里插入图片描述

RandomHorizontalFlip

RandomHorizontalFlip函数可以随机水平翻转图像。

from torchvision import transforms
from PIL import Image

transform = transforms.Compose([transforms.RandomHorizontalFlip()])
img = Image.open('1.png')
img.show(img)
img = transform(img)
img.show(img)

在这里插入图片描述

针对Tensor对象的操作函数

ToTensor

ToTensor函数可以将PIL图像对象转换为Tensor对象。

from torchvision import transforms
from PIL import Image

transform = transforms.Compose([transforms.ToTensor()])
img = Image.open('1.png')

img = transform(img)
print(img.size()) #torch.Size([3, 800, 1000])

Normalize

Normalize函数可以对Tensor对象进行归一化,以减少模型训练的时间,提高模型性能和稳定性。

from torchvision import transforms
from PIL import Image
import torch

transform = transforms.Compose([transforms.ToTensor(),
                                transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))])
img = Image.open('1.png')
img = transform(img)
print(torch.min(img), torch.max(img)) # tensor(-1.) tensor(1.)

上述代码将图像像素值归一化到[-1, 1]之间。

Compose函数

Compose函数则用于将多个transforms函数组合在一起,形成一个transforms的列表。在数据加载时,会按照列表中的顺序,依次对图像进行变换。

from torchvision import transforms

transform = transforms.Compose([
    transforms.CenterCrop(224),
    transforms.RandomHorizontalFlip(),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
img = Image.open('1.png')
img = transform(img)
print(torch.min(img), torch.max(img))

上述代码中,我们通过Compose函数将CenterCrop、RandomHorizontalFlip、ToTensor和Normalize四个函数组合在一起,形成了一个transform对象。

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

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

相关文章

Gradio HTML组件详解

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️ 👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…

【23-07-03:HTTP协议的结构学习】

目录 HTTP 请求的结构HTTP 请求的整体架构请求方法(Method)请求路径(URI)GET 参数(Parameters for GET)协议说明(Protocol)头部字段(Headers)请求体(Body&…

论文与专利查找和下载

例如我想查找和下载视频理解(video understanding)相关论文 路线大纲如下: 一、最主要方式: 大纲,蓝色都是有超级链接的可以直接打开: 第一步 谷歌搜索(英文) 学校的知网(中文)第二步 下载论文(谷歌学术--英文 学校的知网--中文)下载不了…

CMA

文章目录 前言概念功能启用CMA 内存的创建方式一、使用 cmdline方式二、使用 dts CMA 内存分配和释放实例(dts 方式) 前言 在嵌入式设备中,很多外设(如摄像机、硬件视频解码器等)需要较大的内存缓冲区,kma…

clickhouse日志表占用大量磁盘空间

clickhouse日志表占用大量磁盘空间 sql: SELECT sum(rows) AS 总行数, formatReadableSize(sum(data_uncompressed_bytes)) AS 原始大小, formatReadableSize(sum(data_compressed_bytes)) AS 压缩大小, round((sum(data_compressed_bytes) / sum(data_uncompresse…

<DB2> 《IBM DB2 备份恢复实用文档》(第一部分)

[TOC](《IBM DB2 备份恢复实用文档》(第一部分)) 1 理论 1.1 关于备份恢复说明 a、DB2数据库备份和恢复的数据都是已经提交落地在磁盘的数据 。 b、DB2数据库备份和恢复使用的日志都是归档日志。 c、只有开启归档日志,才能进行在线全备、在线增备。否则只能进行离…

基于单片机智能手环心率老人防跌倒心率体温 步数里程

功能介绍 以STM32单片机作为主控系统; OLED液晶显示心率体温步数等信息;通过按键设置心率、体温上限设置;当心率或者体温超过按键设置上限蜂鸣器进行声光报警提醒;通过wifi模块esp8266把数据发送到手机端进行显整个电路以5v供电&a…

Three.js卡通材质实现简明教程

继 Harry Alisavakis 令人惊叹的汤着色器之后,我想使用 Three.js 重新创建类似的卡通着色效果。 我从 Roystan 的卡通着色器教程开始,它是为 Unity 编写的。 在这篇文章中,我将把 Roystan 教程中概述的原则翻译成 Three.js。 下面描述的着色器…

mysql索引之Hash

在存储引擎中Memory引擎是支持Hash索引的,Hash索引跟java中的HashMap很像,有很多槽,存的也是键值对,键值为索引列,值为这条数据的行指针,通过指针就可以找到数据。 但是Hash索引应用的并不多,原…

一篇文章解释清楚IOC和DI

背景 众所周知我们要学习Spring,必不可少的就是IOC和AOP,那就让我们了解一下什么是IOC,开启下面的学习吧。 过程 什么是IOC? Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一…

VSCode 2019 “对COM组件的调用返回了错误HRESULT E_FAIL” 的解决

问题: VSCode使用 “MFC应用”模板创建项目时,出现:文件夹打不开,并弹出 “对COM组件的调用返回了错误HRESULT E_FAIL” 错误 解决方案: 1. 以管理员身份打开Developer Command Prompt for VS 2019(vs2…

敏捷开发发展和优缺点

目录 1 概述1.1 四种开发模式1.1.1 瀑布式开发1.1.2 螺旋模型1.1.3 迭代式开发1.1.4 敏捷开发 1.2 开发模式对比 2 敏捷开发2.1 敏捷宣言2.1.1 敏捷宣言解读2.1.2 敏捷宣言价值观 2.2 敏捷准则2.2.1 目的:是客户满意2.2.2 态度:欢迎需求变更2.2.3 关注&a…

加油,也可以更智慧

摘要:智慧加油站及油库管理系统的应用引擎是结合了华为云Roma Exchange能力,提升应用开发、部署和升级效率,支撑应用快速开发、远程部署。 停车、加油、驶离…… 从开车进场到离场,2分钟内即可完成“即加即走”的无感加油支付有没…

如何自动批量查询手机号归属地?

我们在工作生活中可能会收集到很多用户的手机号,我们如果想获取手机号归属地,只能一个个人工查询。如果数据量较多的情况就会比较耗费时间。有没有什么方法可以自动查询手机号归属地呢?当然可以,并且这个方法还是免费的。 首先&a…

qt-线程竞争共享资源和读写锁--QReadWriteLock

目录 一、线程竞争的概念2、什么是线程竞争2、什么是线程竞争共享资源? 二、读写锁1、读写锁的概念2、读写锁的工作原理如下:3、使用读写锁的示例(QReadWriteLock) 三、总结: 一、线程竞争的概念 2、什么是线程竞争 …

网络安全进阶学习第五课——文件上传漏洞

文章目录 一、常见文件上传点二、任意文件上传漏洞三、任意文件上传危害四、webshell五、上传木马所需条件六、木马上传流程七、上传绕过1、绕过JS验证1)Burpsuite剔除响应JS。2)浏览器审计工具剔除JS 2、绕过MIME-Type验证1)利用抓包工具&am…

Session 反序列化漏洞

将$_SESSION中保存的所有数据序列化存储到PHPSESSID对应的文件中有三种存取格式: (1)默认使用php:键名|键值(经过序列化函数处理的值) name|s:6:"1FonlY"; (2)php_seri…

Multi-level Wavelet-CNN for Image Restoration论文总结

论文:Multi-level Wavelet-CNN for Image Restoration 源码:GitHub - lpj0/MWCNN: Multi-level Wavelet-CNN for Image Restoration 目录 一、背景和出发点 二、创新点 三、MWCNN具体实现 四、DWT与池化运算和膨胀卷积相关性证明 五、DWT、IWT代码实…

阿里云服务器白嫖教程

阿里云服务器白嫖教程 第一步:打开百度第二步:进入阿里云官方,注册登录账号第三步:点击免费试用第四步:点击立即试用第五步:选择操作系统第五步:选择到期释放设置![在这里插入图片描述](https://img-blog.csdnimg.cn/d02f4582dd5943319441df9ccbae60f0.png)第六步:同意协议,并立…

3D深度视觉与myCobot 320机械臂无序抓取

今天我记录使用myCobot320 M5跟FS820-E1深度相机进行一个无序抓取物体的分享。 为什么会选择深度相机和机械臂做一个案例呢? 2D相机(最常见使用的相机)可以捕捉二维图像,也就是在水平和垂直方向上的像素值。它们通常用于拍摄静态…