guided-diffusion 生成质量评估指南:使用 evaluator.py 计算 FID、sFID、Precision、Recall 与 Inception Score

发布时间:2026/10/16 22:38:01
guided-diffusion 生成质量评估指南:使用 evaluator.py 计算 FID、sFID、Precision、Recall 与 Inception Score
深度学习计算机视觉媒体生成【免费下载链接】guided-diffusion项目地址https://gitcode.com/gh_mirrors/gu/guided-diffusion点击查看免费下载本指南围绕 guided-diffusion 仓库的 evaluations 评估模块 展开系统讲解如何用 FID、sFID、Precision、Recall 和 Inception Score 五类指标对扩散模型生成结果进行量化评测。你将掌握 .npz 样本批次与参考批次的获取方法、evaluator.py的完整运行流程以及从源码层面理解每个指标的计算原理从而在自己的模型对比实验中准确复现论文中的评测方案。评估指标体系为什么要同时使用五类指标生成模型的对比不能依赖单一指标。guided-diffusion 仓库论文Diffusion Models Beat GANs on Image Synthesis的官方代码采用五类指标共同刻画生成质量这些指标全部可以通过对样本批次的批量计算获得指标全称衡量内容FIDFrechet Inception Distance真实分布与生成分布在 Inception 特征空间中的 Wasserstein-2 距离数值越低表示分布越接近sFIDspatial FID使用 Inception 网络空间层特征而非池化特征计算的 FID更关注局部结构Precision精确率生成样本落入真实数据流形manifold的比例衡量生成样本的真实性Recall召回率真实样本被生成分布覆盖的比例衡量生成的多样性/覆盖率Inception ScoreIS基于类别预测分布的熵差评估图像清晰度与多样性数值越高越好FID 与 IS 侧重全局分布统计Precision/Recall 则从流形覆盖角度互补地反映真实性与多样性之间的权衡——这正是扩散模型对比 GAN 时最常被讨论的两个维度。仓库 README.md 中的实验结果表即同时报告 FID、Precision 和 Recall 三项例如 ImageNet 256×256 上引导扩散模型ADM-G ADM-U取得 FID 3.94、Precision 0.83、Recall 0.53。所有指标均以.npznumpy 压缩格式文件中的样本批次为输入因此评估流程高度标准化先准备样本批次与参考批次再运行评估脚本。.npz 批次文件规范参考批次与样本批次评估所需的批次文件分为两类规范如下参考数据集批次reference batch包含整个数据集的预计算统计量mu、sigma同时内含10,000 张图像用于计算 Precision 和 Recall。其他所有批次样本批次包含50,000 张图像可用于计算统计量和 Precision/Recall。从源码 evaluator.py 的read_statistics方法第 164-172 行可以看出批次的内部结构约定如果 npz 中已存在mu、sigma键则直接读取预计算统计量同时读取mu_s、sigma_s作为空间特征统计量否则会现场从图像计算统计量obj np.load(npz_path) if mu in list(obj.keys()): return FIDStatistics(obj[mu], obj[sigma]), FIDStatistics( obj[mu_s], obj[sigma_s] ) return tuple(self.compute_statistics(x) for x in activations)这正是参考批次与普通样本批次的差异所在参考批次省去了重复计算整个数据集统计量的开销而样本批次50,000 张则足以给出稳定可靠的统计估计。预计算批次下载清单LSUN 与 ImageNet仓库在 OpenAI 公共存储Azure Blob Storage上提供了论文中使用的全部参考批次、本仓库扩散模型样本批次以及对比基线DDPM、IDDPM、BigGAN、StyleGAN 等的样本批次。以下按数据集完整列出其中VIRTUAL_*为参考批次其余为样本批次LSUN256×256LSUN bedroom参考批次VIRTUAL_lsun_bedroom256.npzADMdropoutadmnet_dropout_lsun_bedroom.npzDDPMddpm_lsun_bedroom.npzIDDPMiddpm_lsun_bedroom.npzStyleGANstylegan_lsun_bedroom.npzLSUN cat参考批次VIRTUAL_lsun_cat256.npzADMdropoutadmnet_dropout_lsun_cat.npzStyleGAN2stylegan2_lsun_cat.npzLSUN horse参考批次VIRTUAL_lsun_horse256.npzADMdropoutadmnet_dropout_lsun_horse.npzADMadmnet_lsun_horse.npzImageNetImageNet 64×64参考批次VIRTUAL_imagenet64_labeled.npzADMadmnet_imagenet64.npzIDDPMiddpm_imagenet64.npzBigGANbiggan_deep_imagenet64.npzImageNet 128×128参考批次VIRTUAL_imagenet128_labeled.npzADMadmnet_imagenet128.npzADM-Gadmnet_guided_imagenet128.npzADM-G25 步采样admnet_guided_25step_imagenet128.npzBigGAN-deeptrunc1.0biggan_deep_trunc1_imagenet128.npzImageNet 256×256参考批次VIRTUAL_imagenet256_labeled.npzADMadmnet_imagenet256.npzADM-Gadmnet_guided_imagenet256.npzADM-G25 步采样admnet_guided_25step_imagenet256.npzADM-G ADM-Uadmnet_guided_upsampled_imagenet256.npzADM-Uadmnet_upsampled_imagenet256.npzBigGAN-deeptrunc1.0biggan_deep_trunc1_imagenet256.npzImageNet 512×512参考批次VIRTUAL_imagenet512.npzADMadmnet_imagenet512.npzADM-Gadmnet_guided_imagenet512.npzADM-G25 步采样admnet_guided_25step_imagenet512.npzADM-G ADM-Uadmnet_guided_upsampled_imagenet512.npzADM-Uadmnet_upsampled_imagenet512.npzBigGAN-deeptrunc1.0biggan_deep_trunc1_imagenet512.npz说明上述批次文件均托管于openaipublic.blob.core.windows.net/diffusion/jul-2021/ref_batches/下的对应目录lsun/、imagenet/命名规则与上表一致。请根据目标数据集与对比模型自行定位下载。这些文件可直接用于复现论文中的指标结果例如下载 ImageNet 256×256 的参考批次与admnet_guided_upsampled_imagenet256.npz样本批次即可得到下文示例输出中的数值。运行评估脚本evaluator.py 实战环境依赖脚本 evaluator.py 的运行依赖记录在 evaluations/requirements.txt 中tensorflow-gpu2.0 scipy requests tqdm需要注意两点TensorFlow 版本脚本基于tensorflow.compat.v1编写源码第 16 行import tensorflow.compat.v1 as tf因此即使安装了 TF 2.x 也能以兼容模式运行tensorflow-gpu2.0意味着需要 GPU 版 TensorFlow 以获得 Inception 特征提取加速。InceptionV3 模型自动下载脚本首次运行时会在当前工作目录自动下载 InceptionV3 模型文件classify_image_graph_def.pb约100MB源码第 20-21 行定义了下载 URL 与本地路径第 573-583 行的_download_inception_model负责带进度条的下载。若该文件已存在则直接复用不会重复下载。运行命令准备好样本批次与对应数据集的参考批次后向脚本传入两个位置参数参考批次路径与样本批次路径。以 ImageNet 256×256 为例python evaluator.py VIRTUAL_imagenet256_labeled.npz admnet_guided_upsampled_imagenet256.npz运行开始时会有大量 TensorFlow 的 verbose 日志脚本先执行evaluator.warmup()预热把 TF 的噪音日志提前输出避免干扰后续进度信息随后依次打印各阶段进度与最终指标。典型输出如下$ python evaluator.py VIRTUAL_imagenet256_labeled.npz admnet_guided_upsampled_imagenet256.npz ... computing reference batch activations... computing/reading reference batch statistics... computing sample batch activations... computing/reading sample batch statistics... Computing evaluations... Inception Score: 215.8370361328125 FID: 3.9425574129223264 sFID: 6.140433703346162 Precision: 0.8265 Recall: 0.5309可以看到输出包含全部五项指标。其中 FID 3.94、Precision 0.83、Recall 0.53 与仓库 README.md 中使用上采样与引导结合时 ImageNet 256×256 的最佳结果表格完全对应说明该示例输出正是论文中最优配置ADM-G ADM-U的复现数值。源码级解析evaluator.py 的评估流水线理解main()的调用链evaluator.py 第 27-60 行可以完整把握五个指标的底层计算过程warmup() → read_activations(ref) → read_statistics(ref) → read_activations(sample) → read_statistics(sample) → 各项指标计算1. Inception 特征提取Evaluator 类 在 TensorFlow 会话中构建两个特征图第 129-133 行pool_features取自 InceptionV3 的pool_3:0节点FID_POOL_NAME得到2048 维全局池化特征用于 FID 与 Inception Scorespatial_features取自mixed_6/conv:0节点FID_SPATIAL_NAME并截取前 7 个通道第 599 行spatial spatial[..., :7]用于sFID空间特征上的 Frechet 距离。compute_activations第 142-162 行以batch_size64逐批喂入图像默认值见第 122 行构造函数签名返回(pool_3, spatial)两组特征数组。图像以 NHWC 格式、取值范围[0, 255]的 uint8 数组传入。2. 统计量计算与 FID/sFIDread_statistics第 164-172 行优先读取 npz 内预计算的mu/sigma参考批次否则调用compute_statistics现场计算。compute_statistics第 174-177 行对激活特征计算均值mu与协方差sigma。frechet_distance第 72-115 行实现经典 FID 公式||mu1 - mu2||² Tr(Σ1 Σ2 - 2(Σ1Σ2)^(1/2))使用scipy.linalg.sqrtm计算协方差乘积的矩阵平方根当乘积接近奇异时第 97-104 行会向对角加入eps1e-6并给出警告若结果出现微小虚部数值误差则取其实部第 106-111 行。sFID与FID共用同一frechet_distance函数区别仅在于输入的是空间特征的统计量mu_s、sigma_s。3. Inception Scorecompute_inception_score第 179-192 行在2048 维池化特征上通过 softmax 子图_create_softmax_graph第 603-614 行得到类别概率分布然后按split_size5000分组计算 KL 散度的指数均值实现与 OpenAI improved-GAN 中 Inception Score 相同的定义kl part * (np.log(part) - np.log(np.expand_dims(np.mean(part, 0), 0))) kl np.mean(np.sum(kl, 1)) scores.append(np.exp(kl))softmax 推理采用独立的softmax_batch_size512第 123 行以控制内存占用。4. Precision / Recall 与流形估计compute_prec_recall第 194-202 行基于改进的 Precision-and-Recall 指标实现核心是 ManifoldEstimator 类manifold_radii第 248-281 行对每个样本计算其到 k 近邻默认nhood_sizes(3,)的距离作为超球半径以此估计数据流形可选clamp_to_percentile参数剪除半径过大的离群超球。evaluate_pr第 325-359 行判断样本是否落入对方流形的超球覆盖范围内——样本落入参考流形记为 Precision 命中参考样本落入生成流形记为 Recall 命中。距离计算由 DistanceBlock 类 在 TensorFlow 图中完成先尝试float16快速路径计算成对欧氏距离若出现非有限值则回退到 float32第 376-384 行行/列批大小row_batch_size、col_batch_size默认均为 10,000用于在内存与性能之间权衡。5. 内存友好的批次读取为支撑 50,000 张图像的评估而不过度占用内存脚本实现了流式 npz 读取open_npz_array第 516-531 行解析 npz 内的arr_0.npy根据 numpy 格式版本1.0/2.0决定是否走流式路径StreamingNpzArrayReader第 467-491 行按需从 zip 内文件偏移读取指定字节数read_batches(batch_size)生成批量迭代器若数组为 Fortran 序或含对象类型则回退到MemoryNpzArrayReader第 493-513 行直接加载内存。这使得 50,000 张图像只需按 64 张一批逐批提取特征峰值内存可控。如何生成用于评估的样本批次除了直接下载官方批次你也可以用自己的模型生成样本批次。仓库的三个采样脚本都会将结果保存为.npz文件scripts/image_sample.py无条件/条件扩散模型采样。循环采样直至满足num_samples默认 10,000对每个 batch 采样后经((sample 1) * 127.5).clamp(0, 255)反归一化为 uint8并以 NHWC 顺序保存第 60-62 行最后通过np.savez(out_path, arr, label_arr)类条件或np.savez(out_path, arr)无条件写入samples_{shape}.npz其中arr_0为图像、arr_1为标签第 75-87 行。scripts/classifier_sample.py分类器引导采样同样保存arr_0图像与arr_1标签见第 99-107 行。scripts/super_res_sample.py超分辨率上采样采样需要传入--base_samples低分辨率基础样本 npz例如64_samples.npz其load_data_for_worker第 77-100 行从 npz 读取arr_0图像类条件时同时读取arr_1标签归一化到 [-1, 1] 后作为上采样模型输入。官方批次中的 50,000 张样本即对应--num_samples 50000的采样配置README 中 128×128 分类器引导示例即使用--num_samples 50000。为复现 25 步快速采样结果可在采样时使用--timestep_respacing ddim25 --use_ddim True。指标解读与仓库参考结果在评估自己模型前可参考仓库 README.md 中论文报告的结果作为数值量级基准纯引导扩散模型ImageNet数据集FIDPrecisionRecallImageNet 64×642.070.740.63ImageNet 128×1282.970.780.59ImageNet 256×2564.590.820.52ImageNet 512×5127.720.870.42引导 上采样组合高分辨率最佳结果数据集FIDPrecisionRecallImageNet 256×2563.940.830.53ImageNet 512×5123.850.840.53LSUN 单类别无引导数据集FIDPrecisionRecallLSUN Bedroom1.900.660.51LSUN Cat5.570.630.52LSUN Horse2.570.710.55结合 model-card.md 中的说明可以更准确地解读这些数字所有指标都基于在 ImageNet 上预训练的Inception-V3表征因此对 ImageNet 类如动物更敏感而对人脸等视觉特征可能不敏感此外分类器引导虽然能提升 Precision真实性但会降低 Recall多样性解读指标时需同时观察两项而非只看 FID。常见问题与注意事项首次运行耗时脚本会下载约 100MB 的 InceptionV3 模型到当前工作目录请确保磁盘空间与网络可用下载完成后后续运行直接复用。TensorFlow 日志冗长warmup()会把大量 verbose 日志提前到进度打印之前避免输出顺序混乱评估进度由tqdm展示。GPU 配置源码第 33-36 行设置了allow_soft_placementTrue允许 DecodeJpeg 等算子落到 CPU 执行与gpu_options.allow_growthTrue按需增长显存适用于显存有限的环境。批次一致性参考批次与样本批次必须来自同一数据集与分辨率否则特征维度或分布不匹配会导致断言失败frechet_distance中对 mu/sigma 形状有显式断言见第 86-91 行。Precision/Recall 计算量流形估计涉及 50,000 张图像的成对距离计算虽然采用分块与 float16 加速仍需要一定的内存与时间可依据机器配置调整row_batch_size/col_batch_size。至此你已完整掌握 guided-diffusion 评估模块从批次获取、脚本运行到指标原理的完整链路可以将其直接复用于你自己的扩散模型质量对比实验中。赞分享深度学习计算机视觉媒体生成【免费下载链接】guided-diffusion项目地址https://gitcode.com/gh_mirrors/gu/guided-diffusion点击查看免费下载相关推荐终极指南如何用evaluator.py快速评估guided-diffusion的FID分数终极指南如何用evaluator.py快速评估guided diffusion的FID分数 扩散模型在图像生成领域取得了突破性进展而 guided diff深度学习计算机视觉媒体生成如何评估生成模型质量FID与Inception Score完全指南如何评估生成模型质量FID与Inception Score完全指南 在深度学习领域生成模型如GAN、扩散模型等正变得越来越流行但如何准确评估这些模型生成内人工智能深度学习大模型NLP计算机视觉强化学习LoRAProgressive Growing of GANs质量评估Inception Score、FID等指标详解Progressive Growing of GANs质量评估Inception Score、FID等指标详解 Progressive Growing of人工智能深度学习计算机视觉媒体生成创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考