接着上一篇,我们这一篇讲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):调整图像的对比度。
//例子创建一个ToTensor()对象,将图片转化成Tensor类型数据
tensor_trans = transforms.ToTensor()
第三步:利用工具对象处理输入的图像数据
//变量接收 = 工具对象(输入的图片数据)
//例如:
tensor_image = tensor_trans(image)
那么这里做一个获取图片并装化成tensor类型,输出一下的例子吧:
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作为图像数据的,而且可以省略后两个参数
因此,完整代码:
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)
靠不知道写些什么了,暂时学得有点乱,这篇文章暂时不太好,我日后回来修改