PyTorch——transforms

接着上一篇,我们这一篇讲transforms

1、什么是transform

首先transform是来自PyTorch的一个扩展库------【torchvision】,【torchvision】这个库提供了许多计算机视觉相关的工具和功能,能够在神经网络中,将图像、数据集、预处理模型等等数据转化成计算机训练学习所能用的格式的数据。

比如:

torchvision.transforms:提供了常用的图像预处理方法,用于对图像进行变换、缩放、裁剪、旋转、翻转等操作。例如,ToTensor将PIL图像或numpy数组转换为Tensor,Normalize对图像进行标准化处理,RandomCrop随机裁剪图像等。


torchvision.datasets:包含了一些常用的数据集的dataset实现,方便用户加载和使用。例如,MNIST是一个手写数字数据集,CIFAR-10是一个包含10个类别的彩色图像数据集,ImageNet是一个大规模的图像数据集等。这些数据集可以方便地用于训练和评估模型。

;
torchvision.models:提供了一些常用的预训练模型,可以用于图像分类、目标检测、图像分割等任务。这些模型包括了经典的网络结构,如AlexNet、VGG、ResNet、GoogLeNet等。用户可以通过加载预训练模型,快速搭建和使用这些模型。

;
torchvision.utils:提供了一些辅助函数和工具,用于计算机视觉任务中的常见操作。例如,make_grid可以将多张图像拼接成一个网格显示,save_image可以将Tensor保存为图像文件,draw_bounding_boxes可以在图像上绘制边界框等。

那么简单说,【torchvision】的transform就是专门对图像进行预处理的工具,你别的数据形式在计算机训练时人家看不懂用不上。

2、怎么用

第一步:导包

python 复制代码
from torchvision import transforms

第二步:创建 "工具" 对象

这么解释,transforms是一个工具箱,里面有ToTensor、resize、Normalize......很多用来处理图像的工具,那么要用他们就得先创建他们的对象

其中具体有哪些工具这里简单说一下:

数据中心化(Data normalization)

  • Normalize(mean, std):对图像进行均值和标准差的归一化处理。(简单理解就是优化)

数据标准化(Data standardization)

  • ToTensor():将PIL图像或numpy数组转换为Tensor,并将像素值缩放到[0, 1]范围内。

缩放(Resizing)

  • Resize(size):将图像的大小调整为指定的尺寸。
  • RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.333)):随机裁剪并缩放图像到指定的尺寸。

裁剪(Cropping)

  • CenterCrop(size):从图像的中心裁剪出指定大小的区域。
  • RandomCrop(size):随机裁剪图像的一部分。

旋转(Rotation)

  • RandomRotation(degrees):随机旋转图像一定角度。

翻转(Flipping)

  • RandomHorizontalFlip(p=0.5):以给定的概率随机水平翻转图像。
  • RandomVerticalFlip(p=0.5):以给定的概率随机垂直翻转图像。

填充(Padding)

  • Pad(padding):在图像周围填充指定数量的像素。

噪声添加(Noise adding)

  • RandomNoise():向图像中添加随机噪声。

灰度变换(Grayscale transformation)

  • Grayscale(num_output_channels=1):将图像转换为灰度图像。

线性变换(Linear transformation)

  • RandomAffine(degrees, translate=None, scale=None, shear=None):随机仿射变换图像。

亮度、饱和度及对比度变换(Brightness, saturation, and contrast transformation)

  • AdjustBrightness(brightness_factor):调整图像的亮度。
  • AdjustSaturation(saturation_factor):调整图像的饱和度。
  • AdjustContrast(contrast_factor):调整图像的对比度。
python 复制代码
//例子创建一个ToTensor()对象,将图片转化成Tensor类型数据
tensor_trans = transforms.ToTensor()

第三步:利用工具对象处理输入的图像数据

python 复制代码
//变量接收 = 工具对象(输入的图片数据)
//例如:
tensor_image = tensor_trans(image)

那么这里做一个获取图片并装化成tensor类型,输出一下的例子吧:

python 复制代码
from torchvision import transforms
from PIL import Image

# 获取图片数据
image_path = "dataset/train/ants/5650366_e22b7e1065.jpg"
image = Image.open(image_path)

# 利用transform的ToTensor工具,将图片数据转化成tensor数据
tensor_trans = transforms.ToTensor()
tensor_image = tensor_trans(image)

# 输出一下
print(tensor_image)

简单看图片了解结构:

那么上一篇我们讲了,利用tensorboard图像处理库可以直观看到数据图像,这里我们结合tensorboard试一下,利用tensorboard图像处理库的SummaryWriter工具包的【.add_image( )】方法来生成图像

不过我们上一篇学到【.add_image( )】针对numpy的图像数据,需要这4个参数

但是这次我们不用numpy作为图像数据,我们改用tensor作为图像数据了,那么可以看到SummaryWriter的【.add_image( )】源码里是支持tensor作为图像数据的,而且可以省略后两个参数


因此,完整代码:

python 复制代码
from torchvision import transforms
from PIL import Image
# 导入tensorboard图像处理库的SummaryWriter工具包
from torch.utils.tensorboard import SummaryWriter

# 获取图片数据
image_path = "dataset/train/ants/5650366_e22b7e1065.jpg"
image = Image.open(image_path)

# 利用transform的ToTensor工具,将图片数据转化成tensor数据
tensor_trans = transforms.ToTensor()
tensor_image = tensor_trans(image)

# 利用tensorboard图像处理库,将tensor类型的图像数据添加进去,生成图片
write = SummaryWriter("logs")
write.add_image("Tensor_img", tensor_image)

靠不知道写些什么了,暂时学得有点乱,这篇文章暂时不太好,我日后回来修改

相关推荐
Tester_孙大壮3 分钟前
第32章 测试驱动开发(TDD)的原理、实践、关联与争议(Python 版)
驱动开发·python·tdd
远洋录27 分钟前
构建一个数据分析Agent:提升分析效率的实践
人工智能·ai·ai agent
IT古董1 小时前
【深度学习】常见模型-Transformer模型
人工智能·深度学习·transformer
沐雪架构师2 小时前
AI大模型开发原理篇-2:语言模型雏形之词袋模型
人工智能·语言模型·自然语言处理
python算法(魔法师版)3 小时前
深度学习深度解析:从基础到前沿
人工智能·深度学习
小王子10243 小时前
设计模式Python版 组合模式
python·设计模式·组合模式
kakaZhui4 小时前
【llm对话系统】大模型源码分析之 LLaMA 位置编码 RoPE
人工智能·深度学习·chatgpt·aigc·llama
struggle20254 小时前
一个开源 GenBI AI 本地代理(确保本地数据安全),使数据驱动型团队能够与其数据进行互动,生成文本到 SQL、图表、电子表格、报告和 BI
人工智能·深度学习·目标检测·语言模型·自然语言处理·数据挖掘·集成学习
佛州小李哥5 小时前
通过亚马逊云科技Bedrock打造自定义AI智能体Agent(上)
人工智能·科技·ai·语言模型·云计算·aws·亚马逊云科技
Mason Lin5 小时前
2025年1月22日(网络编程 udp)
网络·python·udp