当前位置:   article > 正文

PyTorch——transforms

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、怎么用

第一步:导包

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):调整图像的对比度。
  1. //例子创建一个ToTensor()对象,将图片转化成Tensor类型数据
  2. tensor_trans = transforms.ToTensor()

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

  1. //变量接收 = 工具对象(输入的图片数据)
  2. //例如:
  3. tensor_image = tensor_trans(image)

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

  1. from torchvision import transforms
  2. from PIL import Image
  3. # 获取图片数据
  4. image_path = "dataset/train/ants/5650366_e22b7e1065.jpg"
  5. image = Image.open(image_path)
  6. # 利用transform的ToTensor工具,将图片数据转化成tensor数据
  7. tensor_trans = transforms.ToTensor()
  8. tensor_image = tensor_trans(image)
  9. # 输出一下
  10. print(tensor_image)

简单看图片了解结构:

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

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

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

因此,完整代码:

  1. from torchvision import transforms
  2. from PIL import Image
  3. # 导入tensorboard图像处理库的SummaryWriter工具包
  4. from torch.utils.tensorboard import SummaryWriter
  5. # 获取图片数据
  6. image_path = "dataset/train/ants/5650366_e22b7e1065.jpg"
  7. image = Image.open(image_path)
  8. # 利用transform的ToTensor工具,将图片数据转化成tensor数据
  9. tensor_trans = transforms.ToTensor()
  10. tensor_image = tensor_trans(image)
  11. # 利用tensorboard图像处理库,将tensor类型的图像数据添加进去,生成图片
  12. write = SummaryWriter("logs")
  13. write.add_image("Tensor_img", tensor_image)

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/1007154
推荐阅读
相关标签
  

闽ICP备14008679号