torchvision.utils.make_grid
torchvision.utils.make_grid
官方文档: make_grid
make_grid能够将tensor以网格形式可视化
torchvision.utils.make_grid(tensor, nrow=8, padding=2, normalize=False, value_range= None, scale_each=False, pad_value=0.0, **kwargs)
tensor : 一般就是4D大小的mini-batch(b, 3, h, w)或者列表
nrow : 可视化图片中每一行有几幅图,default=8
padding : 可视化图片中图于图之间的间距,default=2
pad_value : 可视化图片中图与图之间间距的颜色,default=0.0,最大是1.0,分别代表纯黑和纯白
这里以tensor为mini-batch的形式展示几个例子
example 1
默认的tensor已经被归一化了(0, 1)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import torchimport numpy as npfrom torchvision import utilsfrom torchvision import transformsfrom PIL import Imageto_tensor = transforms.ToTensor() clip1 = to_tensor(np.array(Image.open ("00000001.jpg" ))) clip2 = to_tensor(np.array(Image.open ("00000010.jpg" ))) clip3 = to_tensor(np.array(Image.open ("00000011.jpg" ))) clip4 = to_tensor(np.array(Image.open ("00000012.jpg" ))) clip5 = to_tensor(np.array(Image.open ("00000013.jpg" ))) clip6 = to_tensor(np.array(Image.open ("00000014.jpg" ))) clip7 = to_tensor(np.array(Image.open ("00000015.jpg" ))) clip8 = to_tensor(np.array(Image.open ("00000016.jpg" ))) img_all = torch.stack([clip1, clip2, clip3, clip4, clip5, clip6, clip7, clip8], dim=0 ) img_all = utils.make_grid(img_all, nrow=4 , padding=20 , pad_value=0.0 ) img_all = (img_all.numpy()*255 ).astype('uint8' ).transpose(1 ,2 ,0 ) img_all = Image.fromarray(img_all) img_all.save('all.jpg' )
下面展示了可视化的结果
我们将pad_value参数变为1.0再看一下结果,显然图片之间的填充从黑色变为了白色
如果想一行8张图,那么就只有一行,只需要将nrow参数变为8即可