图像预处理——transforms

本文详细介绍了PyTorchtorchvision库中的transforms模块,涵盖了图像预处理方法如ToTensor、Normalize、数据集加载、模型选择以及辅助函数,为计算机视觉任务提供了实用工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、transforms 运行机制

torchvision是PyTorch的一个扩展库,提供了许多计算机视觉相关的工具和功能。下面是关于torchvision中常用模块的介绍:

  1. torchvision.transforms:提供了一系列常用的图像预处理方法,用于对图像进行变换、缩放、裁剪、旋转、翻转等操作。例如,ToTensor将PIL图像或numpy数组转换为Tensor,Normalize对图像进行标准化处理,RandomCrop随机裁剪图像等。
  2. torchvision.datasets:包含了一些常用的数据集的dataset实现,方便用户加载和使用。例如,MNIST是一个手写数字数据集,CIFAR-10是一个包含10个类别的彩色图像数据集,ImageNet是一个大规模的图像数据集等。这些数据集可以方便地用于训练和评估模型。
  3. torchvision.models:提供了一些常用的预训练模型,可以用于图像分类、目标检测、图像分割等任务。这些模型包括了经典的网络结构,如AlexNetVGGResNetGoogLeNet等。用户可以通过加载预训练模型,快速搭建和使用这些模型。
  4. torchvision.utils:提供了一些辅助函数和工具,用于计算机视觉任务中的常见操作。例如,make_grid可以将多张图像拼接成一个网格显示,save_image可以将Tensor保存为图像文件,draw_bounding_boxes可以在图像上绘制边界框等。

torchvision.transforms

torchvision.transforms模块提供了一系列常用的图像预处理方法,用于对图像进行各种变换和操作。以下是一些常用的图像预处理方法:

  1. 数据中心化(Data normalization):
    • Normalize(mean, std):对图像进行均值和标准差的归一化处理。
  2. 数据标准化(Data standardization):
    • ToTensor():将PIL图像或numpy数组转换为Tensor,并将像素值缩放到[0, 1]范围内。
  3. 缩放(Resizing):
    • Resize(size):将图像的大小调整为指定的尺寸。
    • RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.333)):随机裁剪并缩放图像到指定的尺寸。
  4. 裁剪(Cropping):
    • CenterCrop(size):从图像的中心裁剪出指定大小的区域。
    • RandomCrop(size):随机裁剪图像的一部分。
  5. 旋转(Rotation):
    • RandomRotation(degrees):随机旋转图像一定角度。
  6. 翻转(Flipping):
    • RandomHorizontalFlip(p=0.5):以给定的概率随机水平翻转图像。
    • RandomVerticalFlip(p=0.5):以给定的概率随机垂直翻转图像。
  7. 填充(Padding):
    • Pad(padding):在图像周围填充指定数量的像素。
  8. 噪声添加(Noise adding):
    • RandomNoise():向图像中添加随机噪声。
  9. 灰度变换(Grayscale transformation):
    • Grayscale(num_output_channels=1):将图像转换为灰度图像。
  10. 线性变换(Linear transformation):
    • RandomAffine(degrees, translate=None, scale=None, shear=None):随机仿射变换图像。
  11. 亮度、饱和度及对比度变换(Brightness, saturation, and contrast transformation):
    • AdjustBrightness(brightness_factor):调整图像的亮度。
    • AdjustSaturation(saturation_factor):调整图像的饱和度。
    • AdjustContrast(contrast_factor):调整图像的对比度。
      这些方法可以根据需要组合使用,以实现对图像进行预处理和增强的目的。

在这里插入图片描述

transforms.Normalize

功能:逐channel的对图像进行标准化

output = (input - mean) / std

• mean:各通道的均值
• std:各通道的标准差
• inplace:是否原地操作

transforms.Normalize(mean, std, inplace=False)torchvision.transforms模块中的一个图像预处理方法,用于对图像进行数据中心化(data normalization)的操作。
参数说明:

  • mean:用于数据中心化的均值,可以是一个标量或一个长度为图像通道数的列表/元组。如果图像是灰度图像,只需要提供一个标量;如果图像是彩色图像,需要提供每个通道的均值。
  • std:用于数据中心化的标准差,可以是一个标量或一个长度为图像通道数的列表/元组。如果图像是灰度图像,只需要提供一个标量;如果图像是彩色图像,需要提供每个通道的标准差。
  • inplace:是否原地操作,默认为False。如果设置为True,则会直接修改输入的Tensor,否则会返回一个新的Tensor。
    数据中心化(data normalization)是一种常用的图像预处理操作,通过将图像的每个像素减去均值并除以标准差,将图像的像素值归一化到均值为0、标准差为1的范围内。这样做的目的是消除不同图像之间的亮度差异,使得图像在训练过程中更容易收敛。
    使用示例:
import torchvision.transforms as transforms
# 定义均值和标准差
mean = [0.5, 0.5, 0.5]  # RGB图像的均值
std = [0.5, 0.5, 0.5]  # RGB图像的标准差
# 定义Normalize变换
normalize = transforms.Normalize(mean=mean, std=std)
# 对图像进行数据中心化
normalized_image = normalize(image)

上述示例中,meanstd分别表示RGB图像的均值和标准差。normalize是一个Normalize对象,可以将其应用于图像数据,实现数据中心化的操作。最终得到的norma

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值