版权归属:
https://blog.csdn.net/halchanchanhal@outlook.com更多关注:
https://github.com/chanhalhttps://www.zhihu.com/people/chanhalpytorch中调用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],在输入图片转换时特别需要注意。下面就说这个问题。
使用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]。