Pytorch 小知识点汇总一 -- save_image, Image对象size, dataloader之getitem返回值, VScode 报错’already started‘

一、torchvision.utils.save_image 报错TypeError: Cannot handle this data type

1. img如果是uint16的矩阵而不转为uint8,Image.fromarray这句会报错。所以加上np.uint8(img)很有必要

rgb_image = rgb_image.astype(np.uint8)

2. 在pytorch中tensor默认是CHW,而PIL中是HWC. 顾img需是CHW形式。

 rgb_image = rgb_image.transpose((2,0,1))

二、保存生成图片的两个方式:

1. opencv方法:

cv2.imwrite('./temp/imgIn1.png', image_temp0)

2. torchvision.utils.save_image 方法:要特别注意 除255.0  即/255.0

torchvision.utils.save_image(torch.from_numpy(image_temp0).float()/255.0, './temp/0image_'+str(index_temp)+'.jpg', nrow= 1)

三、 图片尺寸

im.size

通过Image对象的size属性可以获取图片的尺寸。图像大小,以像素为单位。大小是一个2元组(宽度、高度)(width, height)

 

im.shape

3元组(高,宽,通道数)

 

numpy对象.shape

(高度,宽度)

四、save_image

save_image 的参数中图片的格式:( btch_size, channel, h, w)

五、dataloader, getitem返回值类型限制

def __getitem__(self, index):  

....

  return   A, B, ...  

A,B ...可以是 tensor 或者 numpy.array类,不能是list类型。


原因:对于batchsize 不为1的情况下,pytorch 会将每次调用getitem的返回结果整合到一起,但是这个整合过程对list类型的数据无效,对tensor和numpy.array类型的数据有效。

六、 Visual Studio Code调试时报错"raise RuntimeError('already started')"

对于基于pytorch的工程,检查dataLoader,是否使用了num_workers参数。当使用该参数时且该参数不为0时,会报上述错误。解决办法是将num_workers设置为0。这是VS code 编译器自身问题。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章