TensorBoardX add_image()輸出圖片與torchvision.transforms.Normalize()標準化
版權歸屬:
更多關注:
1、TensorBoardX add_image()輸出圖片需要注意的地方
pytorch中調用TensorBoardX顯示圖片的方法如下:
from tensorboardX import SummaryWriter
writer = SummaryWriter(log_dir)
# display image
writer.add_image('label_name', img, global_step=total_step)
首先,label_name必須是一個唯一的名字,特別需要注意的是防止與add_scale()
中的名字重複,這樣子會出現莫名的錯誤;
其次,參數img
可以是numpy or torch.Tensor,需是一張圖像的三維矩陣,格式是[C, H, W]。如果是 torch.Tensor時,通常是選擇batch中的一張圖片img = batch[0]
;如果是numpy,通常讀取的圖片是[H, W, C],這時需要用numpy.transpose(img, (1,2,0))
轉換過來。
再者,參數img
的值域範圍是[0, 1] or [0, 255],在輸入圖片轉換時特別需要注意。下面就說這個問題。
2、torchvision.transforms.Normalize()標準化需要注意的地方
使用torchvision.transforms進行輸入圖片的轉換:
def get_sync_transform(opt):
transform_list = []
osize = [opt.load_size, opt.load_size]
transform_list.append(Resize(osize, Image.BILINEAR))
transform_list.append(RandomScaleCrop())
# -chenhao for densenet memory overflow
osize = [opt.crop_size, opt.crop_size]
transform_list.append(Resize(osize, Image.BILINEAR))
if opt.is_train and not opt.no_flip:
transform_list.append(transforms.RandomHorizontalFlip())
# note: this one range is [-1, 1]
# transform_list += [ToTensor(),
# Normalize((0.5, 0.5, 0.5),
# (0.5, 0.5, 0.5))]
#
# note: this one range is [0, 1]
transform_list += [ToTensor()]
return transforms.Compose(transform_list)
上述代碼中ToTensor()
就已經默認scaled image value to [0, 1],如果再使用Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
就會scale image value to [-1, 1],Normalize(mean, std, inlace=False)標準化的公式:
將mean=0.5, std=0.5代入公式,可知值域範圍爲[-1, 1]。