第12章:扩散模型的评估与局限性
12.1 生成样本的质量评估指标
评估扩散模型生成样本的质量是模型开发和实际应用中的关键环节。本节将详细介绍常用的定量和定性评估指标,并讨论其适用场景与局限性。
12.1.1 定量评估指标
1. Inception Score (IS)
数学定义: [ IS = \exp\left(\mathbb{E}{x \sim p_g} [D{KL}(p(y|x) | p(y))]\right) ] 其中:
- ( p(y|x) ) 是预训练Inception-v3模型对样本x的类别预测分布
- ( p(y) ) 是边缘类别分布
优缺点:
- ✅ 计算简单,反映生成多样性和清晰度
- ❌ 依赖ImageNet分类器,对非自然图像不敏感
2. Fréchet Inception Distance (FID)
计算步骤:
- 提取真实样本和生成样本在Inception-v3某层的特征(默认pool3层)
- 假设特征服从多元高斯分布,计算两个分布的Fréchet距离: [ FID = |\mu_r - \mu_g|^2 + Tr(\Sigma_r + \Sigma_g - 2(\Sigma_r\Sigma_g)^{1/2}) ]
特性:
- 值越低表示质量越好(完美生成器FID=0)
- 对模式崩溃敏感
3. Precision & Recall (P&R)
- Precision:生成样本中落在真实数据流形的比例
- Recall:真实数据能被生成样本覆盖的比例
实现方法:
# 示例:基于k-NN的P&R计算
from sklearn.neighbors import NearestNeighbors
def compute_pr(real_features, gen_features, k=3):
nn = NearestNeighbors(n_neighbors=k).fit(real_features)
# 计算precision
gen_distances, _ = nn.kneighbors(gen_features)
precision = np.mean(gen_distances[:, -1] < threshold)
# 计算recall
real_distances, _ = nn.kneighbors(real_features)
recall = np.mean(real_distances[:, -1] < threshold)
return precision, recall
12.1.2 定性评估方法
1. 人类评估(Human Evaluation)
- 常用指标:
- 真实感评分(1-5 Likert量表)
- 配对比较(A/B测试)
- 案例研究:Stable Diffusion v1.5的人类评估显示:
- 在512x512图像生成任务中,58%的参与者认为其质量优于GAN-based模型
2. 视觉保真度分析
- 工具:
- 像素级差异(PSNR, SSIM)
- 语义一致性检查(如CLIP-score)
12.1.3 领域特定指标
| 应用领域 | 专用指标 | 说明 |
|---|---|---|
| 文本生成 | BLEU, ROUGE, BERTScore | 语言模型评估指标 |
| 3D点云生成 | Chamfer Distance, EMD | 几何相似度度量 |
| 分子生成 | Validity, Uniqueness, QED | 化学性质评估 |
12.1.4 评估实践建议
- 多指标综合:推荐同时使用FID+人类评估+领域指标
- 基准对比:在CIFAR-10上,当前SOTA模型的典型表现:
- FID < 3.0
- IS > 9.5
- 陷阱规避:
- 避免在小数据集(<10k样本)上计算FID
- 注意评估指标的尺度敏感性
图12.1:不同评估指标在生成质量不同维度的敏感性对比
深度洞察:近期研究表明,传统评估指标与人类感知的相关性约为0.6-0.8(Spearman系数),开发感知对齐的评估框架仍是开放问题。
注:实际书籍内容应包含:
1. 更多具体数值结果的表格
2. 不同数据集上的基准对比
3. 指标计算的详细数学推导
4. 配套的代码仓库链接(如计算FID的PyTorch实现)
5. 引用最新研究论文(如2023年提出的新评估方法)