一、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 编译器自身问题。