transforms图像增强(一)

一、数据增强

数据增强(Data Augmentation)是一种常用的数据预处理技术,通过对训练集进行各种变换和扩增操作,可以增加训练数据的多样性和丰富性,从而提高模型的泛化能力。

数据增强的目的是通过对训练集中的图像进行随机变换,生成更多样的图像样本,以模拟真实世界中的各种场景和变化。这样可以帮助模型学习到更多不同的特征和模式,提高模型对于不同样本的适应能力,减少过拟合的风险。

常见的数据增强操作包括图像翻转、旋转、缩放、裁剪、平移、变换色彩空间、添加噪声等。这些操作可以通过图像处理库(如PIL、OpenCV)或深度学习框架中的数据增强模块(如torchvision.transforms)来实现。

数据增强是深度学习中的一项重要技术,可以有效提升模型的性能和鲁棒性(模型对于输入数据的扰动、噪声、异常值等干扰的抵抗能力),尤其在数据量有限的情况下,通过增加样本的多样性,可以更好地训练出泛化能力强的模型。

在这里插入图片描述

二、transforms——裁剪

transforms.CenterCrop(size)

transforms.CenterCrop(size)

transforms.CenterCrop是一个数据转换操作,用于从图像中心裁剪图片。
参数:

  • size:所需裁剪图片的尺寸,可以是一个整数或一个元组(width, height)。如果是一个整数,则表示裁剪出的图片将具有相等的宽度和高度。
    使用transforms.CenterCrop可以将输入图像从中心位置裁剪为指定尺寸的图片。裁剪后的图片将保持图像的中心部分,并且其尺寸将与指定的尺寸相匹配。

示例:

import torchvision.transforms as transforms# 定义数据转换操作
transform = transforms.Compose([transforms.CenterCrop(256)  # 中心裁剪为256x256像素
])# 对图像进行中心裁剪为256x256像素
cropped_image = transform(image)

在上面的示例中,transforms.CenterCrop(256)将输入图像裁剪为256x256像素的图片。裁剪后的图片将保留图像的中心部分,并且尺寸将调整为256x256像素。

在这里插入图片描述
在这里插入图片描述

transforms.RandomCrop

transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')

transforms.RandomCrop是一个数据转换操作,用于从图片中随机裁剪出指定尺寸的图片。
参数:

  • size:所需裁剪图片的尺寸,可以是一个整数或一个元组(width, height)。如果是一个整数,则表示裁剪出的图片将具有相等的宽度和高度。
  • padding:填充大小,可以是一个整数、一个元组或一个列表。当为整数时,表示上下左右均填充相同数量的像素;当为元组或列表时,分别表示左、上、右、下的填充数量。
  • pad_if_needed:若图像小于设定的尺寸,则是否进行填充,默认为False。
  • fill:填充的像素值,默认为0。
  • padding_mode:填充模式,有4种模式
    1、constant:像素值由 fill 设定
    2、edge:像素值由图像边缘像素决定
    3、reflect:镜像填充,最后一个像素不镜像,eg:[1,2,3,4] → [3,2,1,2,3,4,3,2]
    4、symmetric:镜像填充,最后一个像素镜像,eg:[1,2,3,4] → [2,1,1,2,3,4,4,3]

使用transforms.RandomCrop可以在保持图像比例的情况下,随机裁剪出指定尺寸的图片。裁剪时会随机选择裁剪的起始位置,并保证裁剪后的图片尺寸与指定的尺寸相匹配。如果需要进行填充,则会根据填充大小和填充模式进行填充操作。

示例:

import torchvision.transforms as transforms
transform = transforms.Compose([transforms.RandomCrop(256, padding=(10, 20, 30, 40), pad_if_needed=True, fill=255, padding_mode='constant')
])
# 对图像进行随机裁剪为256x256像素,若图像小于256x256则进行填充,填充大小为(10, 20, 30, 40),填充像素值为255
cropped_image = transform(image)

在上面的示例中,transforms.RandomCrop(256, padding=(10, 20, 30, 40), pad_if_needed=True, fill=255, padding_mode='constant')将输入图像随机裁剪为256x256像素的图片。如果输入图像的尺寸小于256x256,则会进行填充,填充大小为(10, 20, 30, 40),填充像素值为255,填充模式为常数填充。

注意:在使用transforms.RandomCrop进行随机裁剪时,如果输入图像的尺寸小于指定的裁剪尺寸,且pad_if_needed参数为False,则裁剪操作将不会进行,而是抛出异常。因此,建议在应用随机裁剪之前,先对图像进行适当的缩放或填充操作,以确保图像尺寸满足裁剪要求。

transforms.RandomResizedCrop

transforms.RandomResizedCrop是一个数据转换操作,用于随机裁剪图片,并按照指定的尺寸进行缩放。
参数:

  • size:所需裁剪图片的尺寸,可以是一个整数或一个元组(width, height)。如果是一个整数,则表示裁剪出的图片将具有相等的宽度和高度。
  • scale:随机裁剪面积比例,默认为(0.08, 1.0)。裁剪面积比例是指裁剪区域相对于原始图像的面积比例范围。
  • ratio:随机长宽比,默认为(3/4, 4/3)。长宽比是指裁剪区域的宽度与高度之比的范围。
  • interpolation:插值方法,默认为PIL.Image.BILINEAR。可选的插值方法有PIL.Image.NEAREST(最近邻插值)、PIL.Image.BILINEAR(双线性插值)和PIL.Image.BICUBIC(双三次插值)。

使用transforms.RandomResizedCrop可以在保持图像比例的情况下,随机裁剪出指定尺寸的图片,并按照指定的插值方法进行缩放。

示例:

import torchvision.transforms as transforms
transform = transforms.Compose([transforms.RandomResizedCrop(256, scale=(0.5, 1.0), ratio=(3/4, 4/3), interpolation=Image.BICUBIC)
])
# 对图像进行随机裁剪为256x256像素,并按照指定的缩放比例和长宽比进行裁剪,使用双三次插值进行缩放
cropped_image = transform(image)

在上面的示例中,transforms.RandomResizedCrop(256, scale=(0.5, 1.0), ratio=(3/4, 4/3), interpolation=Image.BICUBIC)将输入图像随机裁剪为256x256像素的图片。裁剪时,会随机选择裁剪的面积比例和长宽比,并按照指定的插值方法进行缩放。

注意:在使用transforms.RandomResizedCrop进行随机裁剪时,裁剪区域的面积比例和长宽比是随机选择的,可以通过调整scaleratio参数来控制裁剪的范围。同时,建议在应用随机裁剪之前,先对图像进行适当的缩放或填充操作,以确保图像尺寸满足裁剪要求。

transforms.FiveCrop

transforms.FiveCrop是数据转换操作,用于在图像的不同位置进行裁剪。
transforms.FiveCrop功能是在图像的上下左右以及中心位置裁剪出尺寸为size的5张图片。
参数:

  • size:所需裁剪图片的尺寸,可以是一个整数或一个元组(width, height)。如果是一个整数,则表示裁剪出的图片将具有相等的宽度和高度。
    使用transforms.FiveCrop可以在图像的上下左右以及中心位置裁剪出尺寸为size的5张图片。
    示例:
import torchvision.transforms as transforms
transform = transforms.Compose([transforms.FiveCrop(256)
])
# 对图像进行上下左右以及中心位置裁剪为256x256像素的5张图片
cropped_images = transform(image)

在上面的示例中,transforms.FiveCrop(256)将输入图像在上下左右以及中心位置裁剪为尺寸为256x256像素的5张图片。

transforms.TenCrop

transforms.TenCrop是数据转换操作,功能是在图像的上下左右以及中心位置裁剪出尺寸为size的5张图片,并对这5张图片进行水平或者垂直镜像,从而得到10张图片。

参数:

  • size:所需裁剪图片的尺寸,可以是一个整数或一个元组(width, height)。如果是一个整数,则表示裁剪出的图片将具有相等的宽度和高度。
  • vertical_flip:是否进行垂直翻转,默认为False。如果设置为True,则对裁剪出的图片进行垂直翻转。

使用transforms.TenCrop可以在图像的上下左右以及中心位置裁剪出尺寸为size的5张图片,并对这5张图片进行水平或者垂直镜像,从而得到10张图片。
示例:

import torchvision.transforms as transforms
transform = transforms.Compose([transforms.TenCrop(256, vertical_flip=True)
])
# 对图像进行上下左右以及中心位置裁剪为256x256像素的5张图片,并进行垂直翻转,得到10张图片
cropped_images = transform(image)

在上面的示例中,transforms.TenCrop(256, vertical_flip=True)将输入图像在上下左右以及中心位置裁剪为尺寸为256x256像素的5张图片,并对这5张图片进行垂直翻转,从而得到10张图片。

注意:在使用transforms.FiveCroptransforms.TenCrop进行裁剪时,返回的是一个包含裁剪出的多张图片的列表。要获取这些裁剪图片,可以通过索引访问列表中的元素。

三、transforms——翻转、旋转

transforms----Flip

transforms.RandomHorizontalFliptransforms.RandomVerticalFlip是数据转换操作,用于以一定的概率对图像进行水平或垂直翻转。

transforms.RandomHorizontalFlip功能是以概率p对图像进行水平翻转(左右翻转)。

参数:

  • p:翻转概率,取值范围为0到1之间,默认为0.5。即有50%的概率对图像进行水平翻转。
    使用transforms.RandomHorizontalFlip可以以一定的概率对图像进行水平翻转。

示例:

import torchvision.transforms as transforms
transform = transforms.Compose([transforms.RandomHorizontalFlip(p=0.5)
])
# 以50%的概率对图像进行水平翻转
flipped_image = transform(image)

在上面的示例中,transforms.RandomHorizontalFlip(p=0.5)将以50%的概率对输入图像进行水平翻转。


transforms.RandomVerticalFlip功能是以概率p对图像进行垂直翻转(上下翻转)。
参数:

  • p:翻转概率,取值范围为0到1之间,默认为0.5。即有50%的概率对图像进行垂直翻转。
    使用transforms.RandomVerticalFlip可以以一定的概率对图像进行垂直翻转。

示例:

import torchvision.transforms as transforms
transform = transforms.Compose([transforms.RandomVerticalFlip(p=0.5)
])
# 以50%的概率对图像进行垂直翻转
flipped_image = transform(image)

在上面的示例中,transforms.RandomVerticalFlip(p=0.5)将以50%的概率对输入图像进行垂直翻转。

注意:在使用transforms.RandomHorizontalFliptransforms.RandomVerticalFlip进行翻转时,每次应用这些转换操作时,都会根据给定的概率进行翻转。因此,每次应用这些转换操作时,得到的结果可能不同。

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

transforms.RandomRotation

transforms.RandomRotation是一种数据转换操作,用于以随机的角度对图像进行旋转。
transforms.RandomRotation功能是随机选择一个角度对图像进行旋转。

参数:

  • degrees:旋转角度。可以是单个角度 a,表示在 (-a, a) 范围内选择旋转角度;也可以是一个范围 (a, b),表示在 (a, b) 范围内选择旋转角度。
  • resample:重采样方法。默认为 False,表示不进行重采样。
  • expand:是否扩大图片。默认为 False,表示不扩大图片。
    使用transforms.RandomRotation可以对图像进行随机角度的旋转。
    示例:
import torchvision.transforms as transforms
transform = transforms.Compose([transforms.RandomRotation(degrees=30)
])
# 随机选择一个角度在 (-30, 30) 范围内对图像进行旋转
rotated_image = transform(image)

在上面的示例中,transforms.RandomRotation(degrees=30)将在 (-30, 30) 范围内随机选择一个角度对输入图像进行旋转。
transforms.RandomRotation还可以设置重采样方法和是否扩大图片,具体使用方法可参考官方文档。

注意:每次应用transforms.RandomRotation时,都会随机选择一个角度对图像进行旋转,因此每次应用这个转换操作时,得到的结果可能不同。


transforms.Lambda

transforms.Lambda是一个数据转换操作,它允许你使用自定义的函数来对数据进行转换。
transforms.Lambda功能是将自定义的函数应用于输入数据。
参数:

  • lambd:自定义函数。这个函数接受一个参数,并返回转换后的结果。
    使用transforms.Lambda可以使用自定义的函数对数据进行转换。
    示例:
import torchvision.transforms as transforms
def custom_transform(x):# 自定义转换函数# 在这里对输入数据 x 进行处理,并返回转换后的结果transformed_data = ...return transformed_data
transform = transforms.Compose([transforms.Lambda(custom_transform)
])
# 使用自定义的函数对输入数据进行转换
transformed_data = transform(data)

在上面的示例中,transforms.Lambda(custom_transform)将使用自定义的函数 custom_transform 对输入数据进行转换。
你可以根据自己的需求编写自定义的转换函数,并在transforms.Lambda中使用它来对数据进行转换。
注意:自定义函数的输入和输出可以是任意类型,但请确保函数的输入和输出类型与你的数据相匹配。


transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),

冒号之前lambda crops是函数的输入,冒号之后torch.stack([(transforms.ToTensor()(crop)) for crop in crops])是函数的返回值

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装PyTorch及环境配置(应用于Python上的YOLO)

这个基本都是Bilibili网站里面叫“小手丫子”up的视频教程,此前自己需要装了好几次又卸载了好几次,现在根据视频教学整理出来自己所理解的文档。 注意事项 1.安装的pycharm版本和anaconda版本无要求。 2.运行pycharm尽量以管理员身份运行。 3.Cuda是独…

使用CentOS 7.6搭建HTTP隧道代理服务器

在现代网络环境中,HTTP隧道代理服务器因其灵活性和安全性而受到广泛关注。CentOS 7.6,作为一个稳定且功能强大的Linux发行版,为搭建此类服务器提供了坚实的基础。 首先,我们需要明确HTTP隧道代理的基本原理。HTTP隧道代理允许客户…

Mac解决node-sass: Command failed 问题

1.以为Command failed 错误是因为缺少依赖项或者版本不兼容导致的(不适用我) 此项目的package版本,node版本14.21.3为版本对应正确 "node-sass": "^4.13.0","sass": "^1.24.2","sass-loader&q…

【Pytorch】学习记录分享10——TextCNN用于文本分类处理

【Pytorch】学习记录分享10——PyTorchTextCNN用于文本分类处理 1. TextCNN用于文本分类2. 代码实现 1. TextCNN用于文本分类 具体流程: 2. 代码实现 # coding: UTF-8 import torch import torch.nn as nn import torch.nn.functional as F import numpy as np…

MongoDB笔记

文章目录 安装查看数据库命令手册 学习地址:https://www.bilibili.com/video/BV16u4y1y7Fm 安装 下载地址 https://www.mongodb.com/try/download/community-kubernetes-operator查看数据库 查看当前数据库 show dbs show databases切换数据库 use 数据库名称cls…

jmeter自动录制脚本功能

问题排查: 建议用 google浏览器; 重启一下jmeter; 过滤规则重新检查下; 看下代理设置是否正常; 注意:下面的的过滤设置中 用的都是正则表达式的规则。

Apache SeaTunnel:探索下一代高性能分布式数据集成工具

大家下午好,我叫刘广东,然后是来自Apache SeaTunnel社区的一名Committer。今天给大家分享的议题是下一代高性能分布式海量数据集成工具,后面的整个的PPT,主要是基于开发者的视角去看待Apache SeaTunnel。后续所有的讲解主要是可能…

redis安装与配置

目录 1. 切换到 root 用户 2. 搜索安装包 3. 安装 redis 4. 查看 redis 是否正常存在 5. 修改ip 6. 重新启动服务器 7. 连接服务器 1. 切换到 root 用户 通过 su 命令切换到 root 用户。 2. 搜索安装包 apt search redis 这里安装的是下面的版本: 3. 安装 …

Elasticsearch 8.X进阶搜索之“图搜图”实战

Elasticsearch 8.X “图搜图”实战 1、什么是图搜图? "图搜图"指的是通过图像搜索的一种方法,用户可以通过上传一张图片,搜索引擎会返回类似或者相关的图片结果。这种搜索方式不需要用户输入文字,而是通过比较图片的视…

SpringBoot内嵌的Tomcat启动过程以及请求

1.springboot内嵌的tomcat的pom坐标 启动后可以看到tomcat版本为9.0.46 2.springboot 内嵌tomcat启动流程 点击进入SpringApplication.run()方法里面 看这次tomcat启动相关的核心代码refreshContext(context);刷新上下文方法 public ConfigurableApplicationContext run(Stri…

kubesphere和k8s的使用分享

文章目录 什么是kubernetesKubernetes的部分核心概念互式可视化管理平台与kubernetes的关系市面是常见的kubernetes管理平台 什么是kubesphereKubesphere默认安装的组件Kubesphere涉及的服务组件kubesphere的安装Kubesphere相关的内容 什么是kubernetes 就在这场因“容器”而起…

2024 AIGC应用层十大趋势:AI Agent将成为AI应用主流形态

ITValue 钉钉这类平台型应用加生态,成为大模型产业居中而立的一个桥梁。 钛媒体作者|张帅 ITValue 2023年的科技产业喧嚣且骚动,AIGC蔓延到一切领域,产业各方仿佛要拿出所有的精力和资源,生怕错过这一班通向未来的快车…

MYSQL多种提权方式

🐙MYSQL-提权条件 - 数据库的最高权限用户的密码 - secure-file-priv没进行目录限制 - 拿下了网站的权限(通过webshell或者其他方式) - 获取到了数据库的账号密码 (获取密码:D:/phpstudy/MySQL/data/mysql/user.MYD…

es简单入门

星光下的赶路人star的个人主页 努力努力再努力 文章目录 1、简介2、使用场景3、基本知识4、中文文档和官网链接5、增删改查(php代码)6、基本查询7、HTTP操作7.1 索引操作7.1.1 创建索引 7.2 文档操作7.2.1 创建文档7.2.2 查看文档7.2.3 修改文档7.2.4 修…

MySQL-数据库概述

数据库相关概念: 数据库(DateBase)简称DB,就是一个存储数据的仓库,数据有组织的进行存储。 数据库分为关系型数据库简称RDBMS和非关系型数据库 关系型数据库简称RDBMS:建立在关系模型的基础上,由多张相互连接的二维表组成的数据库.简单来说…

音频播放软件Foobar2000 mac特点介绍

Foobar2000 mac是一款高度可定制的音频播放器,适用于Windows平台。它支持各种音频格式,包括MP3、FLAC、AAC、WMA等,同时也支持各种音频插件和效果器,可以提供更好的音质和用户体验。 Foobar2000 mac软件特点 1. 高度可定制&#…

洛谷——P1983 [NOIP2013 普及组] 车站分级(拓扑排序、c++)

文章目录 一、题目[NOIP2013 普及组] 车站分级题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示 二、题解基本思路:代码 一、题目 [NOIP2013 普及组] 车站分级 题目背景 NOIP2013 普及组 T4 题目描述 一条单…

免费的GPT4来了,你还不知道吗?

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

Maven(mvn)的学习下载和配置

文章目录 Maven(mvn)1.Maven 是什么?2.Maven做什么?2.1传统方式对项目的管理2.2Maven对jar包的管理 3.Maven怎么学3.1Maven如何创建项目3.2Maven的下载与配置3.3Maven的项目结构3.4Maven依赖的引入3.5Maven依赖的剔除3.6Maven依赖…

2023 hnust 湖南科技大学 大四上 计算机图形图像技术 课程 期末考试 复习资料

计算机图形图像技术复习资料 前言 改编自:https://blog.csdn.net/Liu_Xin233/article/details/135232531★重点,※补充github 考试题型 简述题(10分4题,共40分) 第1章的基本内容三维观察流水线中的基本概念与理解三…