一、transforms 运行机制
torchvision
是PyTorch的一个扩展库,提供了许多计算机视觉相关的工具和功能。下面是关于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.transforms
torchvision.transforms
模块提供了一系列常用的图像预处理方法,用于对图像进行各种变换和操作。以下是一些常用的图像预处理方法:
- 数据中心化(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)
:调整图像的对比度。
这些方法可以根据需要组合使用,以实现对图像进行预处理和增强的目的。
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)
上述示例中,mean
和std
分别表示RGB图像的均值和标准差。normalize
是一个Normalize
对象,可以将其应用于图像数据,实现数据中心化的操作。最终得到的norma