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.mzph.cn/news/600608.shtml

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

相关文章

听GPT 讲Rust源代码--compiler(22)

File: rust/compiler/rustc_target/src/spec/x86_64_unknown_netbsd.rs rust/compiler/rustc_target/src/spec/x86_64_unknown_netbsd.rs 文件是 Rust 编译器针对 x86_64-unknown-netbsd 目标平台的配置文件。该文件定义了与该平台相关的特性、链接选项、目标特定的运行时支持以…

3种在JavaScript中终止forEach循环的方式

一、序言 这个问题估计会难倒一部分同学。甚至会有人反问,forEach循环在JavaScript中能终止吗? 比如 ,我举个例子 const array [ -3, -2, -1, 0, 1, 2, 3 ] array.forEach((it) > { if (it > 0) { console.log(it) // 0 1 2 3 retur…

Java Spring boot 可變參數,以及弊端

function中 不固定的參數 public boolean sendEmail(String manFrom, String manTo,String manCc, String subject, String... msg); 必須是最後一個參數,傳值時可以多個。 sendEmail(“a.gmail”,"b.gmail","c.gmail","subject",…

Spring Boot应用程序中VO的理解及使用

在Spring Boot应用程序中,VO(View Object)通常用于表示视图层所需的数据,这些数据来自于业务逻辑层或数据访问层。VO的主要目的是将业务逻辑层的数据结构转换为视图层可以使用的数据结构,使得视图层可以直接使用VO中的…

spring security authorization server 定制令牌和用户信息

版本 1.2.1 定制方法 默认用户信息Mapper只针对用户ID&#xff0c;电子邮件&#xff0c;电话&#xff0c;个人档案等字段进行处理&#xff0c;如需在用户信息端点返回自定义的字段可通过以下方法定制Mapper Bean public OAuth2TokenCustomizer<JwtEncodingContext> j…

docker kingbase

docker kingbase run 命令 docker run -tid \ -e ENABLE_CIyes \ -e NEED_STARTyes \ -e DB_MODEoracle \ -e DB_USERkingbase \ -e DB_PASSWORD123456 \ --privileged \ -p 4321:54321 \ -v /home/admin/SoftWare/volume/kingbase/userdata/data:/home/kingbase/userdata/da…

【唐山海德教育】成人高校的毕业证书有何用途?

答&#xff1a;成人高等教育毕业生在干部聘用、职称评审、工资待遇等方面与普通高等教育同层次毕业生同等对待。本科毕业可申请学士学位&#xff0c;与其它国家承认的大学专&#xff08;本&#xff09;毕业证书具有同等效力&#xff0c;含金量一样&#xff0c;在使用上也是相同…

如何在 Xftp 中使用自定义编辑器

1、简介 很多时候我们使用 Xshell 远程登录linux服务器进行文本编辑&#xff0c;通过命令行窗口难以进行快速编辑&#xff0c;因此&#xff0c;借助 Xftp 工具&#xff0c;指定文本编辑器&#xff0c;能够快速帮助我们实现文本编辑。 2、Xftp 使用 在上文中&#xff08;https:…

2024PMP考试新考纲-【人员领域】近期典型真题和超详细解析(4)

今天华研荟继续为您分享PMP新考纲下的【人员People领域】近年真题&#xff0c;帮助大家举一反三&#xff0c;一次性通过2024年的PMP考试。 昨天有个小伙伴问我说2024年3月份的PMP考试共有多少题&#xff0c;其中关于人员的有多少题&#xff1f;根据官方发布的消息&#xff0c;华…

如何在 C# 12 中使用主构造函数

C# 12 中最引人注目的新功能之一是对主构造函数的支持。主构造函数的概念并不新鲜。包括 Scala、Kotlin 和 OCaml 在内的多种编程语言都支持直接在声明类的位置集成构造函数参数。 在本文中&#xff0c;我们将仔细研究主构造函数以及如何在 C# 12 中使用它们。若要运行本文中提…

即插即用篇 | YOLOv8 Gradio 前端展示页面 | 支持 【分类】【检测】【分割】【关键点】 任务

分类任务效果 分割任务效果 检测任务效果 关键点任务效果 使用方法 Gradio 是一个开源库,旨在为机器学习模型提供快速且易于使用的网页界面。它允许开发者和研究人员轻松地为他们的模型创建交互式的演示,使得无论技术背景如何的人都可以方便地试用和理解这些模型。使用Gradi…

【BCC动态跟踪PostgreSQL】

BPF Compiler Collection (BCC)是基于eBPF的Linux内核分析、跟踪、网络监控工具。其源码存放于GitCode - 开发者的代码家园 想要监控PostgreSQL数据库的相关SQL需要在编译PostgreSQL的时候开启dtrace。下文主要介绍几个和PostgreSQL相关的工具,其他工具可根据需求自行了解。 …

【QT 自研上位机 与 ESP32下位机联调>>>串口控制GPIO-基础样例-联合文章】

【QT 自研上位机 与 ESP32下位机联调&#xff1e;&#xff1e;&#xff1e;串口控制GPIO-基础样例-联合文章】 1、概述2、实验环境3、 自我总结4、 实验过程1、验证上位机QT程序1、下载样例代码2、修改qt程序3、运行测试验证 2、验证下位机ESP32程序1、下载样例代码2、更改ESP3…

55.网游逆向分析与插件开发-游戏增加自动化助手接口-自动药水设定功能的逆向分析

内容来源于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;项目需求与需求拆解-CSDN博客 之前在找到过一个虚函数&#xff0c;每个按钮的都有一个实现机制&#xff0c;参考这里游戏结束过程的逆向分析 实际上找起来会不会用上不知道&#xff0c;接下来开始逆…

go语言 json marshal和unmarshal序列化字节切片和反序列化对象

json.Marshal 和 json.Unmarshal 是 Go 语言标准库中用于 JSON 编码和解码的函数。 - json.Marshal 用于将 Go 对象转换为 JSON 格式的字节切片。 go package main import ( "encoding/json" "fmt" ) type Person struct { Name string json:"name&qu…

二维码地址门牌系统技术服务:让您的生活更便捷,一码通行,安全无忧

文章目录 前言一、融合二维码技术与门牌的便捷服务二、手机开门便捷功能三、智能化安全保障四、智能化、便捷化的新型技术 前言 在数字化时代&#xff0c;二维码门牌系统技术应运而生&#xff0c;为了满足人们对安全、便捷生活的需求。这项技术将二维码与门牌结合&#xff0c;…

2019数据结构----队列真题

(1)允许增加空间&#xff0c;空间可以改变所以是通过链表,链式存储实现的&#xff1b;占用的空间可以重复使用&#xff0c;所以是循环队列。 (2)队空&#xff1a;frontrear;队满&#xff1a;frontrear->next

CNAS中兴新支点——什么是安全测试,安全测试报告有什么作用,主要测试哪些内容?

1.安全测试在做什么&#xff1f; 扫描&#xff1f;在很多人眼中&#xff0c;做安全的就是整天那个工具在哪里扫描操作&#xff0c;使用各种不同的工具做扫描。 是的&#xff0c;扫描是安全测试很重要的一部分&#xff0c;扫描可快速有效发现问题。扫描工具的易用性&#xff0…

霍尔传感器测速测距实验——STM32驱动(课程设计)

———————实验效果——————— &#x1f384;图片演示测距 &#x1f384;视频演示测速 基于STM32单片机 霍尔传感器测速度&#xff0c;测圈数 &#x1f384;模块介绍 测距使用HC-SR04模块 测距使用测速使用霍尔传感器 ———————代码获取查看下方———————…

商务智能|描述性统计分析与数据可视化

一、商务智能的三大方面 三个主要方面是描述性的统计分析、预测性的分析和指导性的数据分析。 A. 商务智能的知识体系下,数据分析包含了哪三个工作?商务智能体系架构里边关于数据分析的术语是什么? 商务智能的知识体系下,数据分析包含了三个工作,即描述性分析,预测性分析…