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 編譯器自身問題。

 

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