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)标准化的公式:
o
u
t
=
i
n
−
m
e
a
n
s
t
d
out = \frac{in - mean}{std}
out=stdin−mean
将mean=0.5, std=0.5代入公式,可知值域范围为[-1, 1]。
7049



被折叠的 条评论
为什么被折叠?



