生成图像/视频质量评估

评估生成图像和视频的质量是生成模型(GAN、VAE、DDPM、Stable Diffusion 等)研发中的关键环节。评估指标分为主观评估客观评估两大类。


一、图像质量评估指标

1. FID(Fréchet Inception Distance)--- 最常用

原理:用 Inception V3 提取真实图和生成图的特征,假设两者服从高斯分布,计算 Fréchet 距离:

FID=∥μr−μg∥2+Tr(Σr+Σg−2(ΣrΣg)1/2)FID = \|\mu_r - \mu_g\|^2 + \text{Tr}\left(\Sigma_r + \Sigma_g - 2(\Sigma_r\Sigma_g)^{1/2}\right)FID=∥μr−μg∥2+Tr(Σr+Σg−2(ΣrΣg)1/2)

  • μr,Σr\mu_r, \Sigma_rμr,Σr:真实图特征的均值和协方差
  • μg,Σg\mu_g, \Sigma_gμg,Σg:生成图特征的均值和协方差

FID 越低越好(表示分布越接近),< 10 为优秀。

伪代码
复制代码
function FID(real_images, generated_images):
    inception = load_inception_v3()

    real_features = inception(real_images)    # [N, 2048]
    fake_features = inception(generated_images)

    μ_r = mean(real_features, dim=0)
    Σ_r = cov(real_features)
    μ_g = mean(fake_features, dim=0)
    Σ_g = cov(fake_features)

    diff = μ_r - μ_g
    sqrt_term = sqrtm(Σ_r @ Σ_g)              # 矩阵平方根

    return norm(diff)^2 + trace(Σ_r + Σ_g - 2 * sqrt_term)

注意:FID 需要 50000+ 张图才稳定,对 batch size 敏感。

2. IS(Inception Score)--- 经典但逐渐被替代

原理:好的生成图应该被分类器高置信度识别为某类(条件熵低),同时各类分布均匀(边缘熵高):

IS=exp⁡(ExDKL(p(y∣x)∥p(y)))IS = \exp\left(\mathbb{E}_x\left D_{KL}(p(y\|x) \\\| p(y)) \\right\right)IS=exp(ExDKL(p(y∣x)∥p(y)))

  • p(y∣x)p(y|x)p(y∣x):Inception 对图 xxx 的类别预测
  • p(y)p(y)p(y):所有生成图的平均类别分布

IS 越高越好

伪代码
复制代码
function IS(generated_images, splits=10):
    inception = load_inception_v3()

    probs = inception(generated_images)         # [N, 1000] 类别概率
    scores = []

    for split in chunk(probs, splits):
        p_yx = split                           # p(y|x)
        p_y  = mean(split, dim=0)              # p(y)
        kl   = sum(p_yx * log(p_yx / p_y), dim=1)
        scores.append(exp(mean(kl)))

    return mean(scores), std(scores)

局限:只看类别多样性,不看真实性(噪声图也可能高 IS)。

3. LPIPS(Learned Perceptual Image Patch Similarity)

原理:用预训练网络(如 AlexNet/VGG)提取多层特征,逐层计算特征差异:

LPIPS(x,x^)=∑l1HlWl∑h,w∥wl⊙(y^hwl−yhwl)∥22LPIPS(x, \hat{x}) = \sum_l \frac{1}{H_l W_l} \sum_{h,w} \|w_l \odot (\hat{y}^l_{hw} - y^l_{hw})\|_2^2LPIPS(x,x^)=l∑HlWl1h,w∑∥wl⊙(y^hwl−yhwl)∥22

  • yl,y^ly^l, \hat{y}^lyl,y^l:真实图和生成图在第 lll 层的特征
  • wlw_lwl:可学习的逐通道权重

LPIPS 越低越好,越接近 0 越相似。

伪代码
复制代码
function LPIPS(img1, img2):
    net = load_alexnet()
    features1 = net.extract_multi_layer(img1)   # [feat_L1, feat_L2, ...]
    features2 = net.extract_multi_layer(img2)

    total = 0
    for f1, f2, w in zip(features1, features2, layer_weights):
        diff = (f1 - f2) ^ 2
        diff = w * diff                            # 逐通道加权
        total += mean(diff)

    return total

优势:与人类感知高度相关,是衡量"像不像"最可靠的指标之一。

4. SSIM(Structural Similarity)

原理:从亮度、对比度、结构三个维度比较两图:

SSIM(x,y)=(2μxμy+C1)(2σxy+C2)(μx2+μy2+C1)(σx2+σy2+C2)SSIM(x, y) = \frac{(2\mu_x\mu_y + C_1)(2\sigma_{xy} + C_2)}{(\mu_x^2 + \mu_y^2 + C_1)(\sigma_x^2 + \sigma_y^2 + C_2)}SSIM(x,y)=(μx2+μy2+C1)(σx2+σy2+C2)(2μxμy+C1)(2σxy+C2)

SSIM 越高越好,范围 0, 1,1 表示完全相同。

5. PSNR(Peak Signal-to-Noise Ratio)

PSNR=10⋅log⁡10(MAX2MSE)PSNR = 10 \cdot \log_{10}\left(\frac{MAX^2}{MSE}\right)PSNR=10⋅log10(MSEMAX2)

  • MAXMAXMAX:像素最大值(通常 255)
  • MSEMSEMSE:均方误差

PSNR 越高越好,但与人眼感知相关性弱(常用于超分/去噪,不用于生成模型)。


二、指标对比总结

指标 方向 优点 缺点
FID ↓ 越低越好 与人类感知高度相关 需大量样本(5 万+),对 batch 敏感
IS ↑ 越高越好 计算快 只看多样性,不衡量真实性
LPIPS ↓ 越低越好 与人类感知最接近 需要参考图(不适合无条件生成)
SSIM ↑ 越高越好 经典、计算快 像素级比较,对纹理不敏感
PSNR ↑ 越高越好 最简单 与人类感知相关性最弱
CLIP Score ↑ 越高越好 可评估文图匹配 依赖 CLIP 模型质量

三、视频质量评估指标

1. FVD(Fréchet Video Distance)

原理:FID 的视频版。用 I3D(Inflated 3D ConvNet)提取视频时序特征,计算 Fréchet 距离。

FVD 越低越好

伪代码
复制代码
function FVD(real_videos, generated_videos):
    i3d = load_i3d_pretrained()

    real_features = []
    fake_features = []

    for video in real_videos:
        feats = i3d(video)          # 3D 卷积提取时空特征
        real_features.append(feats)

    for video in generated_videos:
        feats = i3d(video)
        fake_features.append(feats)

    # 和 FID 完全相同的 Fréchet 距离计算
    return frechet_distance(real_features, fake_features)

局限:FVD 同样需要大量视频样本,且对帧率敏感。

2. VMAF(Video Multi-Method Assessment Fusion)

Netflix 开发的视频质量评估,融合多种指标(VIF + DLM + 时域信息):

复制代码
VMAF = fusion(VIF_score, DLM_score, temporal_score)

VMAF 越高越好,范围 0, 100,接近 100 为"视觉无损"。

3. VBench(综合评估框架)

VBench 从多个维度综合评估视频生成模型:

维度 说明
主体一致性 主体在帧间是否稳定
背景一致性 背景是否稳定
运动平滑度 运动是否流畅
动态程度 视频的动感强度
美学质量 单帧的视觉美感
成像质量 清晰度、噪声水平
伪代码
复制代码
function VBench(generated_videos):
    scores = {}

    scores['subject_consistency'] = clip_cosine_similarity(videos)
    scores['bg_consistency']       = background_feature_matching(videos)
    scores['motion_smoothness']    = optical_flow_variance(videos)
    scores['dynamic_degree']       = frame_difference_ratio(videos)
    scores['aesthetic_quality']    = aesthetic_model(videos)
    scores['imaging_quality']      = image_quality_assessment(videos)

    return weighted_sum(scores)

四、文本-图像/视频对齐指标

CLIP Score

原理:用 CLIP 模型计算文本和生成图的余弦相似度:

CLIPScore=cos⁡(CLIPT(text), CLIPI(image))CLIPScore = \cos(\text{CLIP}_T(text),\ \text{CLIP}_I(image))CLIPScore=cos(CLIPT(text), CLIPI(image))

伪代码
复制代码
function CLIP_Score(prompt, generated_image):
    clip = load_clip_model()

    text_emb = clip.encode_text(prompt)        # [1, 512]
    image_emb = clip.encode_image(generated_image)

    score = cosine_similarity(text_emb, image_emb)
    return score * 100                           # 通常 ×100 便于阅读

CLIP Score 越高越好,衡量"图文是否匹配"。


五、综合评估方案(生产环境推荐)

复制代码
┌─────────────────────────────────────────────┐
│              生成模型评估流程                  │
├─────────────────────────────────────────────┤
│                                              │
│  1. FID 评估整体分布质量(≥ 50k 样本)        │
│     ↓                                        │
│  2. CLIP Score 评估文图对齐(≥ 10k 样本)     │
│     ↓                                        │
│  3. LPIPS 评估逐对相似度(有参考图时)         │
│     ↓                                        │
│  4. 人工偏好评估(A/B test,≥ 200 人)        │
│     ↓                                        │
│  5. 视频:FVD + VBench 多维评估               │
│                                              │
└─────────────────────────────────────────────┘

六、评估陷阱

陷阱 说明 对策
FID 对预处理敏感 resize 方式不同可差 10+ 分 统一 resize 方式(bicubic)
IS 被高方差噪声骗过 纯噪声图可能高 IS 必须配合 FID
只用一个指标 单一指标不能反映全貌 至少 FID + CLIP Score + 人工
样本太少 FID 需要 50k 张才稳定 用足够样本,标注样本量
忽略多样性 只比较平均值忽略方差 看 Precision/Recall 曲线

个人能力有限,有问题随时联系~

相关推荐
hz567891 小时前
音视频技术SDK选型指南:企业实时互动场景的关键能力解析
网络·云计算·音视频·实时音视频·信息与通信
paokuflying1 小时前
ffmpeg提取视频中的音频
ffmpeg·音视频
zandy10114 小时前
Seedance 2.0第三方创作工具怎么选?商用视频工作流评估指南
音视频
小猴子爱上树21 小时前
一站式解决图片视频翻译难题的高效AI工具
人工智能·python·音视频
AI创界者21 小时前
【AI视频重塑】MoCha-GGUF 视频人物/主体替换整合包:8G显存轻量化部署与ComfyUI批量工作流详解
人工智能·aigc·音视频
EasyGBS1 天前
ONVIF设备接入国标GB28181视频平台EasyGBS:不用国标也能一键拉流!
服务器·php·音视频
Legendary_0081 天前
LDR6500 设计指南:Type-C 音频快充二合一配件 PD 取电与插拔时序控制方案
c语言·开发语言·音视频
音视频牛哥1 天前
SmartMediaKit 推拉流MP4录像实践:实时传输与本地留存一体化
音视频·rtmp推流录像·rtmp播放端录像·rtsp播放端录像·rtsp流录制·rtmp流录制·rtsp服务器录像
石臻臻的杂货铺1 天前
做 AI 视频,先让 Blender 把镜头演一遍
人工智能·音视频·blender