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 torch
import numpy as np

from torchvision import utils
from torchvision import transforms
from PIL import Image

# 读入八张图片
to_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")))

# 将图片concat起来,最终形成(8, 3, h, w)的形式
img_all = torch.stack([clip1, clip2, clip3, clip4, clip5, clip6, clip7, clip8], dim=0)
# 使用make_grid
img_all = utils.make_grid(img_all, nrow=4, padding=20, pad_value=0.0)

# 转换为pillow可保存的形式
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即可

Error: API rate limit exceeded for 52.70.121.181. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)