[Python]-torchvision.transforms模块-图像预处理
PyTorch框架中常用torchvision模块来辅助计算机视觉算法的搭建,transforms用于图像的预处理。
from torchvision import transforms
预处理操作集合:Compose
rans = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean = [0.485, 0.456, 0.406], std = [0.229, 0.224, 0.225]) # imagenet
])
图像转Tensor:ToTensor()
这个操作会把(H·W·C)范围在[0,255]的PIL图像转换为(C·H·W)范围在[0,1]的torch.tensor。
不仅对图像做了映射,而且把通道数放在前面。
归一化处理:Normalize()
对数据按通道进行标准化,即减去均值,再除以方差,使其正态分布,收敛更快。
数据范围:[-1,1]
其中mean和std是从数据集中得到的,比如(mean = [0.485, 0.456, 0.406], std = [0.229, 0.224, 0.225])这组数据就是从ImageNet中得到。
计算mean和std的代码:
#这里以上述创建的单数据为例子
data = np.array([
[[1,1,1],[1,1,1],[1,1,1],[1,1,1],[1,1,1]],
[[2,2,2],[2,2,2],[2,2,2],[2,2,2],[2,2,2]],
[[3,3,3],[3,3,3],[3,3,3],[3,3,3],[3,3,3]],
[[4,4,4],[4,4,4],[4,4,4],[4,4,4],[4,4,4]],
[[5,5,5],[5,5,5],[5,5,5],[5,5,5],[5,5,5]]
],dtype='uint8)
#将数据转为C,W,H,并归一化到[0,1]
data = transforms.ToTensor()(data)
# 需要对数据进行扩维,增加batch维度
data = torch.unsqueeze(data,0)
nb_samples = 0.
#创建3维的空列表
channel_mean = torch.zeros(3)
channel_std = torch.zeros(3)
print(data.shape)
N, C, H, W = data.shape[:4]
data = data.view(N, C, -1) #将w,h维度的数据展平,为batch,channel,data,然后对三个维度上的数分别求和和标准差
print(data.shape)
#展平后,w,h属于第二维度,对他们求平均,sum(0)为将同一纬度的数据累加
channel_mean += data.mean(2).sum(0)
#展平后,w,h属于第二维度,对他们求标准差,sum(0)为将同一纬度的数据累加
channel_std += data.std(2).sum(0)
#获取所有batch的数据,这里为1
nb_samples += N
#获取同一batch的均值和标准差
channel_mean /= nb_samples
channel_std /= nb_samples
print(channel_mean, channel_std)
其他操作
Resize:把给定的图片resize到给定的尺寸。
ToPILImage: 将torch.tensor 转换为PIL图像。
CenterCrop:以输入图的中心点为中心做指定size的裁剪操作。
RandomCrop:以输入图的随机位置为中心做指定size的裁剪操作。
RandomHorizontalFlip:以0.5概率水平翻转给定的PIL图像。
RandomVerticalFlip:以0.5概率竖直翻转给定的PIL图像。
RandomResizedCrop:将给定图像随机裁剪为不同的大小和宽高比,然后缩放所裁剪得到的图像为制定的大小(有一个参数n)。
Grayscale:将给定图像转换为灰度图像。
RandomGrayscale:将图像以指定的概率转换为灰度图像。
FiveCrop: 从一张输入图像中裁剪出5张指定size的图像,包括4个角的图像和一个中心。
TenCrop:剪出10张指定size的图像。做法是在FiveCrop的基础上,再将输入图像进行水平或竖直翻转,然后进行FiveCrop操作,这样一张图像可得到10张crop图像。
Pad:对给定图像的所有边用的“padding”个像素用“fill”值填充。
ColorJitter:修改图像的亮度,对比度,饱和度和色度。
Lambda:做其参数指定的变换。
参考笔记:https://www.jianshu.com/p/e7e45030bebd
参考文档:https://pytorch-cn.readthedocs.io/torchvision/torchvision-transform/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· Open-Sora 2.0 重磅开源!