评估 GAN

使用 PyTorch 进行图像深度学习

Michal Oleszak

Machine Learning Engineer

生成图像

num_images_to_generate = 9
noise = torch.randn(num_images_to_generate, 16)

with torch.no_grad(): fake = gen(noise)
print(f"Generated shape: {fake.shape}")
Generated shape: torch.Size([9, 3, 96, 96])
for i in range(num_images_to_generate):

image_tensor = fake[i, :, :, :]
image_permuted = image_tensor.permute(1, 2, 0)
plt.imshow(image_permuted) plt.show()
  • 创建随机噪声张量
  • 将噪声传入生成器
  • 按图像数迭代
  • 从 fake 切片取第 i 张
  • 重排图像维度
  • 绘制图像
使用 PyTorch 进行图像深度学习

GAN 生成结果

由 GAN 生成的宝可梦图像示例。

使用 PyTorch 进行图像深度学习

Fréchet Inception Distance

  • Inception:图像分类模型
  • Fréchet 距离:两种概率分布的距离度量
  • Fréchet Inception Distance(FID):
    1. 用 Inception 提取真实与生成图像的特征
    2. 分别计算两者特征的均值与协方差
    3. 计算两者正态分布间的 Fréchet 距离
  • FID 低 = 生成图像与训练数据相似且多样
  • FID < 10 = 表现好
使用 PyTorch 进行图像深度学习

PyTorch 中的 FID

from torchmetrics.image.fid import \
FrechetInceptionDistance


fid = FrechetInceptionDistance(feature=64)
fid.update( (fake * 255).to(torch.uint8), real=False)
fid.update( (real * 255).to(torch.uint8), real=True)
fid.compute()
tensor(7.5159)
  • 导入 FrechetInceptionDistance
  • 实例化 FID 指标
  • 用生成图像更新指标:
    • 乘以 255
    • 转为 torch.uint8
  • 同样用真实图像更新
  • 计算指标值
使用 PyTorch 进行图像深度学习

让我们来练习!

使用 PyTorch 进行图像深度学习

Preparing Video For Download...