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)

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

相关推荐
AI科研视界19 分钟前
ChatGPT+2:修订初始AI安全性和超级智能假设
人工智能·chatgpt
霍格沃兹测试开发学社测试人社区22 分钟前
人工智能 | 基于ChatGPT开发人工智能服务平台
软件测试·人工智能·测试开发·chatgpt
小R资源1 小时前
3款免费的GPT类工具
人工智能·gpt·chatgpt·ai作画·ai模型·国内免费
FreakStudio2 小时前
全网最适合入门的面向对象编程教程:50 Python函数方法与接口-接口和抽象基类
python·嵌入式·面向对象·电子diy
redcocal3 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘
artificiali4 小时前
Anaconda配置pytorch的基本操作
人工智能·pytorch·python
RaidenQ4 小时前
2024.9.13 Python与图像处理新国大EE5731课程大作业,索贝尔算子计算边缘,高斯核模糊边缘,Haar小波计算边缘
图像处理·python·算法·课程设计
花生了什么树~.4 小时前
python基础知识(六)--字典遍历、公共运算符、公共方法、函数、变量分类、参数分类、拆包、引用
开发语言·python
酱香编程,风雨兼程4 小时前
深度学习——基础知识
人工智能·深度学习
Lossya4 小时前
【机器学习】参数学习的基本概念以及贝叶斯网络的参数学习和马尔可夫随机场的参数学习
人工智能·学习·机器学习·贝叶斯网络·马尔科夫随机场·参数学习