使用pytorch怎么将图片数据转换成张量

  介绍

这期内容当中小编将会给大家带来有关使用pytorch怎么将图片数据转换成张量,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

一、数据转换

把图片转成成火炬的张量数据,一般采用函数:torchvision。变换。通过一个例子说明,先用opencv读取一张图片,然后在转换;注意一点是:opencv储存图片的格式和火炬的储存方式不一样,opencv储存图片格式是(W H, C),而火炬储存的格式是(C、H、W)。

import  torchvision.transforms  as 转换   import  cv2  as 简历   时间=img  cv.imread(& # 39;图像/000001. jpg # 39;)   打印(img.shape),, #, numpy数组格式为(W H, C)   时间=transf  transforms.ToTensor ()   时间=img_tensor 为我国(img), #,张量数据格式是火炬(C、H、W)   print (img_tensor.size ())

使用pytorch怎么将图片数据转换成张量

注意:使用torchvision。转换时要注意一下,其子函数ToTensor()是没有参数输入的,以下用法是会报错的

img_tensor =, transforms.ToTensor (img)

必须是先定义和赋值转换函数,再调用并输入参数,正确用法:

img =, cv.imread(& # 39;图像/000001. jpg # 39;)   时间=transf  transforms.ToTensor ()   时间=img_tensor 为我国(img)

再转换过程中正则化

在使用transforms.ToTensor()进行图片数据转换过程中会对图像的像素值进行正则化,即一般读取的图片像素值都是8位的二进制,那么它的十进制的范围为[0,255),而正则化会对每个像素值除以255年,也就是把像素值正则化成[0.0,1.0]的范围。通过例子理解一下:

import  torchvision.transforms  as 转换   import  cv2  as 简历   时间=img  cv.imread(& # 39;图像/000001. jpg # 39;)   时间=transf  transforms.ToTensor ()   时间=img_tensor 为我国(img)   打印(& # 39;opencv& # 39;,, img)   打印(& # 39;火炬# 39;,,img_tensor)

使用pytorch怎么将图片数据转换成张量

使用pytorch怎么将图片数据转换成张量

三,自行修改正则化的范围

使用变换。写函数可以自行修改正则化的范围,下面举个例子正则化成[-1.0,1.0]

transf2 =, transforms.Compose (   (才能   ,,,transforms.ToTensor (),   ,,,transforms.Normalize(意味着=(0.5,0.5,0.5),,std=(0.5, 0.5, 0.5))   ,,)   )   时间=img_tensor2  transf2 (img)   打印(img_tensor2)

使用pytorch怎么将图片数据转换成张量

计算方式就是:

C=(C-mean)/,性病

C为每个通道的所有像素值,彩色图片为三通道图像(BGR),所以意思和性病是三个数的数组。

使用transforms.ToTensor()时已经正则化成[0,0,0,1]了,那么(0.0 - 0.5)/0.5=-1.0(1.0 - 0.5)/0.5=1.0,所以正则化成[-1.0,1.0]

<强>补充:Python:记录一个关于图片直接转化为pytorch.tensor和numpy。数组的不同之处的问题

img =, Image.open (img_path) .convert (“RGB")   时间=img2  torchvision.transforms.functional.to_tensor (img)   打印(img2)   时间=img1  np.array (img)   打印(img1)

输出是这样的:

使用pytorch怎么将图片数据转换成张量

不仅形状不一样,而且值也是不一样的。

解释如下:

tensor =, torch.from_numpy (np.asarray (PIL.Image.open(路径))).permute (2, 0, 1) .float(),/, 255年   时间=tensor  torchvision.transforms.functional.to_tensor (PIL.Image.open(路径)),#,两种方法是一样的

PIL.Image.open()得到中国格式,直接使用numpy去转换得到(w h, c)格式,而用to_tensor得到(c、h、w)格式且值已经除了255 .

字节()相当于(torch.uint8), tensor.numpy()是把张量转化为numpy。数组格式。

在这里需要注意的是公益诉讼和OPENCV的图像读取得到的格式都是中国格式,一般模型训练使用的是化学加工格式,H为Y轴是竖直方向,W为X轴水平方向。

且torchvision.transforms.functional.to_tensor()对所有输入都是有变换操作。

使用pytorch怎么将图片数据转换成张量