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)

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

相关推荐
云空15 分钟前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite
成富1 小时前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle
凤枭香1 小时前
Python OpenCV 傅里叶变换
开发语言·图像处理·python·opencv
CSDN云计算1 小时前
如何以开源加速AI企业落地,红帽带来新解法
人工智能·开源·openshift·红帽·instructlab
测试杂货铺1 小时前
外包干了2年,快要废了。。
自动化测试·软件测试·python·功能测试·测试工具·面试·职场和发展
艾派森1 小时前
大数据分析案例-基于随机森林算法的智能手机价格预测模型
人工智能·python·随机森林·机器学习·数据挖掘
hairenjing11231 小时前
在 Android 手机上从SD 卡恢复数据的 6 个有效应用程序
android·人工智能·windows·macos·智能手机
小蜗子1 小时前
Multi‐modal knowledge graph inference via media convergenceand logic rule
人工智能·知识图谱
SpikeKing1 小时前
LLM - 使用 LLaMA-Factory 微调大模型 环境配置与训练推理 教程 (1)
人工智能·llm·大语言模型·llama·环境配置·llamafactory·训练框架
小码的头发丝、2 小时前
Django中ListView 和 DetailView类的区别
数据库·python·django