当前位置: 首页 > ds >正文

PyTorch入门-Transorforms

Transorforms

在计算机视觉和深度学习中,transforms 通常指的是对图像数据进行的各种预处理和增强操作。这些变换可以改善模型的训练效果和性能。常见的 transforms 包括:

  1. 调整大小 (Resize):改变图像的尺寸,以适应模型的输入要求。
  2. 裁剪 (Crop):从图像中提取出感兴趣的部分,去除不必要的区域。
  3. 翻转 (Flip):水平或垂直翻转图像,增加数据的多样性。
  4. 旋转 (Rotate):将图像按一定角度旋转,有助于模型学习不同方向的特征。
  5. 归一化 (Normalization):调整图像的像素值,使其分布更均匀,通常是减去均值并除以标准差。
  6. 颜色抖动 (Color Jitter):随机改变图像的亮度、对比度、饱和度等,以增强模型的鲁棒性。
  7. 噪声添加 (Add Noise):在图像中添加随机噪声,用于提高模型对噪声的抵抗力。

这些变换通常被应用于训练数据集,以便在训练过程中生成更多样化的数据,从而提高模型的泛化能力。在PyTorch中,torchvision.transforms模块提供了丰富的图像变换功能,可以方便地应用于数据集。

Normalize

from PIL import Image
from torchvision import transforms
from torch.utils.tensorboard import SummaryWriter# 导入SummaryWriter用于记录训练过程中的图像信息
writer = SummaryWriter("logs")
# 指定训练集中的蚂蚁图像路径
image_path = "data/train/ants_image/0013035.jpg"# 打开图像文件
img = Image.open(image_path)
# 创建一个将图像转换为张量的变换
tensor_trans = transforms.ToTensor()
# 应用变换,将图像转换为张量
tensor_img = tensor_trans(img)
# 将图像张量记录到日志中
writer.add_image("tensor_img", tensor_img)# 打印图像张量的第一个像素值,以验证张量内容
print(tensor_img[0][0][0]) # tensor(0.3137)
# 创建一个标准化变换,将图像像素值标准化到(-1, 1)区间
trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
# 应用标准化变换
img_norm = trans_norm(tensor_img)
# 打印标准化后的图像张量的第一个像素值,以验证标准化效果
print(img_norm[0][0][0]) # tensor(-0.3725)# 将标准化后的图像记录到日志中
writer.add_image("Normalize", img_norm)
# 关闭SummaryWriter
writer.close()

在这里插入图片描述

可以看到归一化后的图片

Resize

# 实例化了一个名为img的图像对象,打印出其原始信息:格式为JPEG,RGB模式,尺寸为768x512
print(img) # <PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=768x512 at 0x20638BB10F0>
# 创建一个图像变换对象trans_resize,将所有图像resize到512x512
trans_resize = transforms.Resize((512, 512))
# 使用trans_resize对img进行处理,得到resize后的图像img_resize
img_resize = trans_resize(img)
# 打印出resize后图像的信息:RGB模式,尺寸为512x512
print(img_resize) # <PIL.Image.Image image mode=RGB size=512x512 at 0x206334FA9B0>
# 将resize后的图像img_resize转换为Tensor格式
img_resize = trans_toTensor(img_resize)
# 使用writer对象将resize后的图像添加到日志中,标记为"Resize",这是第0步
writer.add_image("Resize", img_resize,0)# 初始化一个transforms.Resize对象,将图像大小调整到512
trans_resize_2 = transforms.Resize(512)
# 初始化一个transforms.Compose对象,将多个transforms操作组合在一起
# 这里组合的操作包括上一步的resize和接下来的将图像转换为张量的操作
trans_compose = transforms.Compose([trans_resize_2, trans_toTensor])
# 使用组合的操作对图像进行预处理
# 这里img是一个PIL图像对象,经过resize和toTensor操作后,得到img_resize_2
img_resize_2 = trans_compose(img)
# 使用TensorBoard的writer对象添加图像到TensorBoard的可视化图表中
# 这里"Resize"是图表中的图像标签,img_resize_2是处理后的图像数据,1是全局步数
writer.add_image("Resize", img_resize_2, 1)

启动TensorBoard,查看Resize下的图片,拖动Step,可以看到0,1 的图片对比

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

上述案例运用了transforms.Compose在深度学习中,transforms.Compose 是一个常用的工具,尤其是与 PyTorch 框架搭配使用时。它的主要功能是将多个图像转换操作组合在一起,以便在数据预处理或增强阶段简化代码。

主要用途:

  1. 组合多个变换Compose 允许用户将多个数据变换操作(如缩放、裁剪、归一化等)一次性应用于输入数据。这样,用户可以按顺序应用这些变换,而不需要单独调用每个变换。
  2. 简化数据预处理:通过使用 Compose,代码更加整洁和易读,尤其是在需要对训练和测试数据应用相同变换时。
  3. 灵活性:用户可以根据需要自由添加、删除或更改变换操作的顺序,从而方便地调整数据处理流程。
from torchvision import transforms# 定义一系列变换
transform = transforms.Compose([transforms.Resize((256, 256)),  # 缩放到256x256transforms.RandomHorizontalFlip(),  # 随机水平翻转transforms.ToTensor(),  # 转换为张量transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5])  # 归一化
])

RandomCrop

下方的代码片段中,我们对一张图片进行随机裁剪,重复10次,可以通过TensorBoard看到我们处理过的图片

# 使用RandomCrop类初始化一个随机裁剪转换器,目标尺寸为512x512像素
trans_randomCrop = transforms.RandomCrop((512,512))
# 构建一个包含随机裁剪和转为张量操作的转换流程
trans_compose_2 = transforms.Compose([trans_randomCrop, trans_toTensor])
# 循环10次,每次对图像进行随机裁剪并记录结果
for i in range(10):img_randomCrop = trans_compose_2(img)writer.add_image("RandomCrop", img_randomCrop, i)

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

http://www.xdnf.cn/news/9396.html

相关文章:

  • 2.2.1 05年T3
  • python处理signal(信号)
  • 基于大模型的慢性胃炎全周期预测与诊疗方案研究报告
  • 联合索引与最左前缀原则详解
  • Springboot-基础
  • LY/T 2714-2016 木塑门套线检测
  • Spring Boot整合Spring AI全攻略:构建智能应用的工程实践
  • Java 并发编程通关秘籍——08死锁
  • webpack CDN打包优化
  • 有什么excel.js支持IE11,可以显示EXCEL单元格数据,支持单元格合并,边框线,单元格背景
  • LangGraph + LLM + stream_mode
  • WPF命令与MVVM模式:打造优雅的应用程序架构
  • 【AI News | 20250527】每日AI进展
  • springboot--实战--大事件--用户接口开发
  • 【机器学习基础】机器学习入门核心算法:支持向量机(SVM)
  • MySQL-查询测试
  • cf1703F
  • leetcode hot100刷题日记——18.搜索插入位置
  • Redis学习打卡-Day8-Redis实践
  • docker环境搭建与常用指令
  • 聊一聊 .NET Dump 中的 Linux信号机制
  • 什么是大端序,什么是小端序,如何记忆它们!!!
  • 2025最新Gemini 2.5 Pro API限制全面解析:最完整的使用指南与优化方案
  • 2025年 RPM软件包常用安装指南
  • mcc Mnc gid1 gid2
  • Dalvik虚拟机、ART虚拟机与JVM的核心区别
  • 爱德华iH80iH160iH600iH1800HTXNRV真空泵系统手侧
  • Solana账户创建与Rust实践全攻略
  • C++类继承详解:权限控制与继承方式解析
  • Linux下目录遍历的实现