首页 > 其他分享 >小土堆学习笔记6:常见的Transforms(二)

小土堆学习笔记6:常见的Transforms(二)

时间:2024-10-25 18:17:58浏览次数:3  
标签:Compose transforms 笔记 Transforms 图像 土堆 trans resize Resize

Resize()

注意一点:

Resize(512)是将图像等比例缩放,使得图像的最短边为512像素,保持了原始的宽高比例。

而Resize((512, 512))则是将图像强制缩放为512x512的正方形,无论图像的原始宽高比是什么。

因此,如果你需要不改变比例的缩放,使用Resize(512),如果需要固定大小为正方形的图像,则使用Resize((512, 512))。

compose()

Compose()函数的功能是将多个变换(transforms)组合在一起,使得输入的图像可以经过一系列指定的变换操作。它在实际开发过程中可以简化图像处理的流程,尤其是在数据预处理阶段,将多步操作串联起来。具体的作用是将这些变换按顺序执行。

例如,以下代码会先对图像进行随机裁剪,然后将其转换为张量格式:

transforms.Compose([

    transforms.RandomCrop(32),

    transforms.ToTensor()

])

这个列表中的元素就是按顺序执行的变换,每个变换操作都是transforms类型,列表的作用就是存储这些操作,使得Compose()可以顺序执行这些变换。

transforms.Compose([trans_resize_2, trans_totensor])

在小土堆的这段代码中:

# Compose - Resize - 2
trans_resize_2 = transforms.Resize(512)
# PIL -> PIL -> Tensor
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)
writer.add_image("Resize", img_resize_2, 1)

我们注意 transforms.Compose([trans_resize_2, trans_totensor])。

trans_resize_2 和 trans_totensor 分别代表两个实例,前一个是调整大小的操作,后一个是将图像转换为张量的操作。

Compose()的参数是一个列表,列表中的每一个元素是transforms类型的变换操作,比如Resize()、ToTensor()等。这些操作会被顺序执行。

我们可以这样简单理解:Compose类的功能就在于,将列表中的操作组合起来,按顺序挨个执行一遍。

注释中提到的PIL -> PIL -> Tensor的意思是图像首先是PIL格式,经过第一个变换后仍然是PIL格式,经过第二个变换后转换为了Tensor格式。

在说明文档部分,Args是参数的意思。文档解释了Compose类的参数是一个包含transforms对象的列表,用于组合这些变换。

TensorBoard中第0步和第1步两张图像

在第0步,图像被调整为了正方形(512x512);在第1步,图像被按照原比例缩放,并没有强制变成正方形。

我一开始疑惑了很久,为什么Compose这部分代码输出了两步图像,并且在第0步被调整成正方形,而在第1步中却是等比例缩放。

后来才意识到,标签Resize下的这两步生成图像其实分别来自于 # Resize 和 # Compose - Resize - 2 这两部分代码……writer.add_image里面写第0步的就是写入第0步图像;写第1步的就是写入第1步图像……这个在 # RandomCrop 部分表现得很清楚……

说会当时困扰了我十分钟的这部分内容,其实非常非常简单:

第0步

在 # Resize 部分代码中,trans_resize将图像的短边调整到了512像素,保持了正方形的形状。它来自这一行代码:

trans_resize = transforms.Resize((512,512))

img_resize = trans_resize(img)

它将图像强制调整为512x512的正方形。这意味着,无论原始图像的宽高比例是什么,这个变换都会将图像的大小调整为正方形。这就是为什么在第0步中,图像显示为正方形的原因。

随后它被转换文Tortensor格式:

img_resize = trans_totensor(img_resize)

最终通过writer写作第0步结果

第1步

在 # Compose - Resize - 2 部分代码中,trans_resize_2 将图像的短边调整到512像素,保持宽高比不变。它来自于这段代码:

trans_resize_2 = transforms.Resize(512)

因此,在第1步,图像是等比例缩放的,而不是强制缩放为正方形。

再借助Compose,先等比例缩放,后转换为totensor格式:

trans_compose = transforms.Compose([trans_resize_2, trans_totensor])

img_resize_2 = trans_compose(img)

至此,缩放过的图像已经被转换为Tortensor格式,可以直接通过writer写作第1步结果

RandomCrop()

在实际开发过程中有什么作用呢?请举例说明。

RandomCrop()的功能是在图像中随机裁剪一个区域。它在实际开发中的作用通常是用于数据增强,比如在训练神经网络时,随机裁剪可以生成不同的图像区域,增强模型的泛化能力。

举个例子,在图像分类任务中,使用RandomCrop()可以生成不同的子图像,避免模型过度拟合训练数据的固定部分,使模型能够更好地应对不同场景下的图像输入。

标签:Compose,transforms,笔记,Transforms,图像,土堆,trans,resize,Resize
From: https://blog.csdn.net/qq_40525602/article/details/143088622

相关文章

  • 小土堆学习笔记7:torchvision中的数据集使用
    本节视频主要内容如何把数据集和transform结合在一起,毕竟因为不可能只对一张图片进行处理,所以会讲到在科研中需要使用的标准数据集该如何下载、组织、查看、使用。(也就是.dataset和.transforms如何进行联合使用)torchvision的几个模块进入PyTorch官网,点击官方文档(DOCS),看到不......
  • 10月25日记录(《代码大全》(第二版)阅读笔记)
    精读笔记:《代码大全》(第二版)《代码大全》第二版是软件开发领域的经典之作,涵盖了从编程基础到复杂系统设计的各个方面。本书的核心目标是帮助开发者编写出高质量、易于维护的代码。通过详细阐述编程过程中的各种技术、方法和最佳实践,作者史蒂夫·迈克康奈尔为读者提供了丰富的知识......
  • 十月二十五日总结(阅读笔记)
    我读的是《程序员修炼之道:从小工到专家》。下面是阅读前三章总结的内容。第一章重点讲述了程序员的职业定位和自我提升的必要性。作者指出,作为一名程序员,首先要清楚自己的职业目标和定位。只有了解自己在职业生涯中想成为什么样的人,才能制定出切实可行的发展计划。书中提到,许多程......
  • Spring学习笔记_10-@Component
    @Component1.介绍在项目开发过程中,我们自己编写的类如果想注入到Spring中,由Spring来管理Bean的生命周期,就可以使用@Component注解将其注入到IOC容器中。@Component注解还有三个衍生注解,那就是@Repository、@Service和@Controller注解,并且衍生出的注解通常会在使用MVC架构开......
  • Spring学习笔记_09——Environment
    Environment1.介绍Spring框架中的Environment是一个非常重要的概念,它提供了访问当前运行环境配置的API。Environment是一个接口,它包含了多个方法,用于获取配置参数、设置默认配置源、激活特定的配置文件等。在Spring应用中,Environment实例通常被注入到需要访问配置信息的......
  • 职业技能大赛—物联网应用开发赛项(Ubuntun_Linux)精华笔记 (03)
    MySQL中的show各种查看命令介绍//全局变量在MySQL启动的时候由服务器自动将它们初始化为默认值,这些默认值可以通过更改my.ini这个文件来更改。//MySQL中的show各种查看命令介绍是必须了解的Mysql基础操作还请您认真看下去 1.使用show查看showtables或showtablesfrom......
  • 学习笔记(四):页面和自定义组件生命周期
    页面和组件的定义:自定义组件:@Component装饰的UI单元,可以组合多个系统组件实现UI的复用,可以调用组件的生命周期。页面:即应用的UI页面。可以由一个或者多个自定义组件组成,@Entry装饰的自定义组件为页面的入口组件,即页面的根节点,一个页面有且仅能有一个@Entry。只有被@Entry装饰的......
  • 普罗米修斯笔记
    参数解释名词解释例子、说明瞬时查询查询特定时间点下的计算结果mysql连接数这种只有一个数据点的指标区间查询查询在一段时间返回内的计算结果cpu使用率这种多个数据点的指标时间段你要分析的一个具体的时间范围只用于区间查询时间窗口你要进行计算的......
  • 学习笔记(三):自定义组件
    自定义组件基于struct实现,1、struct:struct+自定义组件名+{...}的组合构成自定义组件,不能有继承关系。对于struct的实例化,可以省略new。2、@Component:@Component装饰器仅能装饰struct关键字声明的数据结构。struct被@Component装饰后具备组件化的能力,需要实现build方法描......
  • 卢卡斯定理学习笔记
    卢卡斯定理对于非负整数\(a\),\(b\)和质数\(p\),有\[C_{a}^{b}\equivC_{a~mod~p}^{b~mod~p}\cdotC_{\lfloor{a/p}\rfloor}^{\lfloor{b/p}\rfloor}~~\left({mod~p}\right)\]证明引理\[\left({1+x}\right)^{p^{\alpha}}\equiv1+x^{p^{\alpha}}~~\left(......