把图像生成模型想象成新来的机器大厨,它一天能炒出十万盘预制菜,这些菜将被端上你的训练宴会。上桌前你作为后厨总管必须把三道关:菜色正不正——像不像真实世界的照片?花样全不全——会不会一百盘全是同一道糖醋里脊?顶不顶用——下游模型吃下去是涨点还是翻车?这一整套把关流程,就是合成数据评估。 评估体系里没有一把万能尺子,而是一套组合拳般的指标矩阵:FID 比整体口味曲线,IS 考单盘辨识度,SSIM/LPIPS 像人眼品鉴师,覆盖度指标盯菜单空洞,最后还要把菜送进实战演习——下游任务验证。当关卡太多、批次太大,就得把试菜流程做成自动化流水线,让每批合成数据都带着合格证出厂,训练资源才不会浪费在“好看不好用”的数据上。

岗位关联

掌握合成图像评估体系,是 CV 算法工程师用合成数据训练前最关键的质量关口——它能帮你筛掉“高保真但无增益”的坏批次,让每一份 GPU 算力和标注预算都花在刀刃上。

目录
  1. 可视化演示
  2. 评估框架总览
  3. FID指标原理
  4. IS指标解析
  5. 感知质量评估
  6. 多样覆盖度量
  7. 下游任务验证
  8. 流程标准自动化
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示FID特征分布距离计算、IS指标清晰度与多样性评估及多维度评估流程,揭示合成图像质量评估核心方法。

本节配有交互动效(进入视口后自动加载,约 3KB)。

FID特征分布距离 真实分布:Inception网络提取真实图像特征向量 合成分布:相同网络提取合成图像特征向量 FID距离:两个高斯分布的Fréchet距离 FID = ||μ_r - μ_g||² + Tr(Σ_r + Σ_g - 2(Σ_r·Σ_g)^0.5) FID越小合成质量越高

评估框架总览

后厨验收不能想到哪验到哪,正经饭店会先立一份《菜单验收标准》:先看摆盘像不像大师傅的手艺,再看菜式覆不覆盖客人口味,最后还要让老顾客试吃反馈。评估合成数据也是同一套逻辑——先搭框架、再选指标,否则后面测出来的数字都是自嗨。

我们把“像不像”叫保真度(Fidelity),把“全不全”叫多样性(Diversity),把“顶不顶用”叫下游效用(Utility)。三个维度天然互相拉扯:一味追求每张图都像真实照片,模型可能只敢输出“安全牌”,导致多样性崩塌;反之盲目求新求怪,又可能产出大量失真图。所以评估框架的第一要务,是明确评估目标与指标矩阵。

实践中,保真度由 FID、IS、SSIM/LPIPS 等指标负责测量;多样性由覆盖度(Coverage)、密度(Density)、成对距离等指标负责;下游效用则通过将合成数据接入检测、分割、分类任务的训练闭环来验证。评估流程一般分四步:采样、特征提取、指标计算、阈值判定与报告。三个维度如何权衡,可以用一个组合得分把指标拧成一股绳:

有了这本“验收标准书”,后厨才有可能把机器大厨的菜批量放行。接下来几节,我们就逐道指标细细品尝。

Q=α×F+β×D+γ×U\displaystyle Q = \alpha \times F + \beta \times D + \gamma \times U
总质量 Q 是保真度 F、多样性 D、下游效用 U 的加权和,权重 α、β、γ 按业务场景调节。
  1. F——保真度得分衡量生成样本与真实样本在特征分布上的接近程度,由 FID 等指标归一化到 0-1 区间。
    F=1−FIDFIDmax⁡F = 1 - \frac{\text{FID}}{\text{FID}_{\max}}
  2. D——多样性得分衡量生成集合内部差异以及覆盖真实模式的比例,来自覆盖度/密度指标。
    D=COV(Sg,Sr)D = \text{COV}\left(S_g, S_r\right)
  3. U——下游效用得分合成数据加入训练后相对基线模型的精度提升率。
    U=Accsynth−AccbaseAccbaseU = \frac{\text{Acc}_{synth} - \text{Acc}_{base}}{\text{Acc}_{base}}
  4. 权重约束三个权重非负且和为 1,保证 Q 仍落在可解释的 0-1 区间。
    α+β+γ=1\alpha + \beta + \gamma = 1

FID指标原理

要知道机器大厨的整体手艺有没有逼近大师傅,最省事的办法不是一碗一碗对比,而是让统计员把两拨菜的“口味曲线”画出来:平均咸度、平均甜度、口味波动幅度。两条曲线越吻合,说明整体风格越一致。FID 干的就是这件事。

FID(Fréchet Inception Distance)先把真实图与生成图分别送进 Inception 网络提取高层语义特征,得到两组特征向量。假设每组特征都近似服从多维高斯分布,问题就简化为:两个多元高斯分布相距多远?距离越近,说明生成图像在“语义统计”上越像真实图像。

高斯分布由均值向量 μ 和协方差矩阵 Σ 描述。FID 用 Fréchet 距离(也叫 2-Wasserstein 距离)度量两个分布:均值差贡献的平方项,加上协方差矩阵的迹组合项。FID 越低越好,常见取值在几十到几百之间。它最大的优势是同时对“整体质量”和“多样性”敏感——如果发生模式坍塌,协方差会明显收缩,FID 也会明显变差。

有了 FID 这杆“口味曲线”标尺,后厨就能在批量产菜前先筛掉整体风格跑偏的批次。但注意,它只负责整体统计,还不能代替一道道菜的品尝——下一节看 IS 怎么补位。

FID=∥μr−μg∥22+Tr⁡(Σr+Σg−2(ΣrΣg)12)\displaystyle \text{FID} = \left\|\mu_r - \mu_g\right\|_2^2 + \operatorname{Tr}\left(\Sigma_r + \Sigma_g - 2\left(\Sigma_r \Sigma_g\right)^{\frac{1}{2}}\right)
FID 是两部分的“距离账本”:均值向量之差的平方长度,加上协方差矩阵的迹差项;数值越小,代表生成分布与真实分布在特征空间中越难区分。
  1. 均值差平方项μ_r 与 μ_g 分别是真实与生成特征集合的中心,差的二范数平方度量了两个分布“整体偏移”有多大。
    ∥μr−μg∥22\left\|\mu_r - \mu_g\right\|_2^2
  2. 协方差加和项Σ_r 与 Σ_g 描述两组特征的波动幅度与相关性,Tr 是取矩阵对角线之和,体现各自内部的“散度”。
    Tr⁡(Σr+Σg)\operatorname{Tr}\left(\Sigma_r + \Sigma_g\right)
  3. 交叉耦合项2(Σ_rΣ_g)^{1/2} 度量两个分布协方差的“对齐程度”,分布形状越相似,此项越大,从而扣减总距离。
    Tr⁡(2(ΣrΣg)12)\operatorname{Tr}\left(2\left(\Sigma_r \Sigma_g\right)^{\frac{1}{2}}\right)
  4. 指标方向FID 属于距离型指标,数值越小表示分布越接近,理想情况下趋近于 0。
    FID→0\text{FID} \to 0

IS指标解析

FID 是整体比对,IS 则是单盘考核。想象试菜员蒙着眼睛被随机喂菜,他能不能一口就说出“这是辣子鸡”?这就是单张图的辨识度;再看他吃到的十盘菜是否覆盖不同菜系,这就是整体多样性。IS 就把这两件事合并成一个分数。

IS(Inception Score)用训练好的 Inception v3 分类网络给每张生成图输出一个类别概率分布 p(y|x)。如果网络对某张图信心十足(概率分布尖锐),说明图里物体清晰可辨;把所有图的 p(y|x) 平均得到边缘分布 p(y),如果 p(y) 在众多类别上均匀铺开,说明生成集合覆盖类别多样。两者用 KL 散度结合,取指数即为 IS。

数学上,IS 计算 E_x[KL(p(y|x) ‖ p(y))] 并取指数。这个值越大越好:越大代表“单张越锐利、整体越分散”。值得警惕的是,IS 没有参考任何真实数据,所以它衡量的是“像不像某类的清晰图片”,而未必是“像不像真实世界的图”——这正是它的盲区。

IS 就像一场“盲测识字考试”:机器大厨的菜能被吃得明明白白、又花样繁多,IS 就高。但它不问“和真菜像不像”,所以还得靠感知质量指标来兜底。

IS=exp⁡(Ex∼pg[KL⁡(p(y∣x) ∥ p(y))])\displaystyle \text{IS} = \exp\left(\mathbb{E}_{x \sim p_g}\left[\operatorname{KL}\left(p(y \mid x) \,\|\, p(y)\right)\right]\right)
对每张生成图,计算其类别分布与全体类别分布的 KL 散度,再对所有图取平均,最后取指数放大差距;IS 越高说明图像“又清晰又多样”。
  1. 类别分布 p(y|x)Inception 网络把图像 x 映射成 1000 类的概率向量,峰值越尖锐表示图像越容易被识别。
    p(y∣x)=softmax⁡(Inception(x))p(y \mid x) = \operatorname{softmax}\left(\text{Inception}(x)\right)
  2. 边缘分布 p(y)所有生成图像类别概率的平均值,衡量整个集合的类别是否“雨露均沾”。
    p(y)=Ex∼pg[p(y∣x)]p(y) = \mathbb{E}_{x \sim p_g}\left[p(y \mid x)\right]
  3. KL 散度度量每个 p(y|x) 相对 p(y) 的信息增益,值越大说明单张图的辨识度越高。
    KL⁡(p(y∣x)∥p(y))=∑cp(c∣x)ln⁡p(c∣x)p(c)\operatorname{KL}\left(p(y \mid x) \| p(y)\right) = \sum_c p(c \mid x) \ln \frac{p(c \mid x)}{p(c)}
  4. 外层指数exp 把平均 KL 散度放回线性尺度,方便跨模型比较。
    IS=eKL⁡avg\text{IS} = e^{\operatorname{KL}_{\text{avg}}}

感知质量评估

统计指标看的是“平均长相”,但食客真正关心的是入口那一瞬的体验。感知质量评估请来的是“人类味觉先验”——SSIM 和 LPIPS 这类指标模拟人眼对结构、纹理、局部的敏感度,给生成图与参考图打“观感分”。

SSIM(结构相似度)把两幅图的相似度拆成三部分:亮度、对比度、结构。它不再逐像素比差值(这正是 MSE 的短板),而是统计局部窗口里的均值、方差和协方差,贴合人眼对局部亮度和边缘结构的感知。LPIPS 更进一步,把图像送入深度网络,在高层特征空间里比较感知距离,距离越小观感越接近。

SSIM 的取值在 -1 到 1 之间,越接近 1 说明两图结构越相似。实际评估中常结合两种用法:一是生成图与真实参考图成对计算,得到保真度;二是让人类标注员对合成图的清晰度、伪影、纹理真实感打分(主观评测),作为机器指标的校准锚点。业务适配也很关键——工业质检更关心边缘与瑕疵,医疗影像更关心软组织纹理,指标侧重要跟着场景走。

感知评估相当于给机器大厨的菜配上“人类品鉴团”——统计上没毛病还不够,人眼看着舒服、业务场景里顺手才算真好吃。不过品鉴团成本高,我们还得靠下一节的多样性检查来防“菜式单调”。

SSIM(x,y)=(2μxμy+c1)(2σxy+c2)(μx2+μy2+c1)(σx2+σy2+c2)\displaystyle \text{SSIM}(x, y) = \frac{\left(2\mu_x \mu_y + c_1\right)\left(2\sigma_{xy} + c_2\right)}{\left(\mu_x^2 + \mu_y^2 + c_1\right)\left(\sigma_x^2 + \sigma_y^2 + c_2\right)}
SSIM 在同一局部窗口内统计两图的均值亮度、对比度幅度和协方差结构,分子度量“共识”,分母度量“基准”,比值越接近 1 表示结构越相似。
  1. 局部均值对μ_x 与 μ_y 是窗口内亮度均值,2μ_xμ_y 项衡量亮度一致性。
    2μxμy+c12\mu_x \mu_y + c_1
  2. 方差与协方差σ_x²、σ_y² 是对比度能量,σ_xy 是结构相关性,2σ_xy 项捕捉边缘与纹理的对齐程度。
    2σxy+c22\sigma_{xy} + c_2
  3. 防除零常数c1 与 c2 由像素动态范围推导的小常数,保证分母不为零,同时匹配人眼对暗区的宽容度。
    c1=(k1L)2,c2=(k2L)2c_1 = (k_1 L)^2, \quad c_2 = (k_2 L)^2
  4. 指标方向SSIM 属于相似度型指标,取值落在 -1 到 1 之间,越接近 1 越好。
    SSIM∈[−1,1]\text{SSIM} \in [-1, 1]

多样覆盖度量

后厨最怕的不是难吃,而是一周七天全上同一种菜。生成模型也有类似的偷懒:把所有概率质量挤在一个模式上,这叫模式坍塌。FID 可能依然漂亮——因为塌掉的那类图质量确实高——但训练数据集若全是同一类图,下游模型必然偏食。

多样性指标盯住生成集合的“内部差异”,比如计算所有样本对的最小距离;覆盖度指标则盯住“外部覆盖”——判断真实数据的每个样本周围,是否至少有一个生成样本落在邻域内。两者结合能区分两种失败:多样性低而覆盖高(生成图彼此雷同但贴住了真实分布),与多样性高而覆盖低(生成图花样多但都偏离真实模式)。

具体实现时,先在特征空间中计算成对欧氏距离,再对每个真实样本找 k 近邻,统计有多少真实样本的邻域内出现了生成样本,占比就是覆盖率。另一个常用指标是密度,它统计每个真实样本邻域内生成样本的个数,能区分“恰好覆盖”和“稠密覆盖”的细微差别。

覆盖率就是后厨的“菜单点检表”:如果真实客人常点的菜在菜谱上找不到对应品项,说明机器大厨漏做了某一类。指标没异常不代表没塌,多样性检查必须和 FID/IS 放在一起看,才能互相拆穿。

COV(Sg,Sr)=1∣Sr∣∑y∈Sr1[∃ x∈Sg, ∥x−y∥2≤r]\displaystyle \text{COV}\left(S_g, S_r\right) = \frac{1}{|S_r|} \sum_{y \in S_r} \mathbb{1}\left[\exists\, x \in S_g,\ \|x - y\|_2 \leq r\right]
覆盖率统计真实样本中,有多少比例的样本在半径 r 内能找到生成样本;1[·] 是条件成立取 1、否则取 0 的指示函数。
  1. 样本特征集合S_g 是生成图像的特征集合,S_r 是真实图像的特征集合,样本量级通常在几千到几万。
    Sg={xi}i=1Ng,Sr={yj}j=1NrS_g = \{x_i\}_{i=1}^{N_g}, \quad S_r = \{y_j\}_{j=1}^{N_r}
  2. 邻域判定条件对真实样本 y,若存在生成样本 x 落入半径 r 的球内,就认为 y 所代表的模式被“覆盖”了。
    ∃ x∈Sg,∥x−y∥2≤r\exists\, x \in S_g, \quad \|x - y\|_2 \leq r
  3. 指示函数1[条件] 在条件成立时记 1,否则记 0,把覆盖判定变成可累加的计数。
    1[条件]∈{0,1}\mathbb{1}[\text{条件}] \in \{0, 1\}
  4. 平均占比除以真实样本总数 |S_r|,得到 0 到 1 之间的覆盖率。
    COV∈[0,1],COV→1 越好\text{COV} \in [0, 1], \quad \text{COV} \to 1 \text{ 越好}

下游任务验证

无论纸面指标多漂亮,宴席成败终究看客人吃不吃得下。对合成数据而言,最硬的检验是把它喂进真实任务:用合成图(或混合数据)训练一个检测、分割、分类模型,再与纯真实数据训练的基线模型比精度。这就是“实战演习”。

下游任务验证的具体做法是搭建同源对照实验:保持模型结构、训练超参、数据规模一致,只改变训练数据中的合成占比,比较 mAP、准确率、召回率等指标。常见结论有三类:增益明显(合成数据补充了真实数据稀缺的难例)、持平(合成图没有提供新信息)、退化(合成图引入域偏移或噪声)。这一环节是合成数据能否投产的最终裁决。

实践中还要考察迁移泛化:在合成数据上预训练、在真实数据上微调,能否比从零训练更快收敛。数据配比也值得网格搜索——比如 30% 合成加 70% 真实往往好于 100% 合成。为量化收益,常用精度提升率 Δ 表示相对基线提升的百分比。

实战演习一跑,机器大厨的菜到底是“锦上添花”还是“滥竽充数”立刻见分晓。这一关通过,前面所有指标才真正形成闭环。

Δ=Accmix−AccrealAccreal×100%\displaystyle \Delta = \frac{\text{Acc}_{\text{mix}} - \text{Acc}_{\text{real}}}{\text{Acc}_{\text{real}}} \times 100\%
Δ 表示混合数据训练的精度相比纯真实数据基线的相对提升幅度;Δ 为正说明合成数据带来了实际收益,为负则说明拖了后腿。
  1. 基线精度 Acc_real只用真实数据训练的模型精度,是这场“实战演习”的对照组。
    Accreal\text{Acc}_{\text{real}}
  2. 混合精度 Acc_mix掺入合成数据后训练的模型精度,是实验组。
    Accmix\text{Acc}_{\text{mix}}
  3. 差值归一化分子是实验组相对基线的绝对提升,除以基线后变成相对提升,才可以在不同任务间公平比较。
    Accmix−AccrealAccreal\frac{\text{Acc}_{\text{mix}} - \text{Acc}_{\text{real}}}{\text{Acc}_{\text{real}}}
  4. 百分比换算乘以 100% 方便阅读,例如 0.9 对 0.8 就是 +12.5%。
    Δ=12.5%\Delta = 12.5\%

流程标准自动化

机器大厨一天产十万盘菜,总厨不可能盘盘亲尝。正确的做法是把它变成一条标准化流水线:自动抽样、自动特征提取、自动算指标、自动对照阈值、自动生成检验报告,不合格批次直接打回重做。这就是评估流程的标准化与自动化。

自动化评估管线通常封装成一个可重复执行的任务:输入一批生成图,输出一份多维指标报告(FID、IS、SSIM、覆盖率、下游精度提升率)。配合固定基准数据集,每次迭代都跑同一套“考卷”,保证分数可比。低于阈值的批次触发告警,优秀的批次自动进入数据仓库。

落地时还要考虑三点:基准数据集要冻结版本,避免评估集被污染;阈值要根据业务设定而非拍脑袋——比如自动驾驶对漏检惩罚高,FID 阈值就该更严;报告要沉淀成结构化 JSON 方便平台消费。最简的判定函数可以用一个带阈值的规则表达:

至此,后厨的验收流水线彻底成型:自动抽样、自动打分、自动裁决、自动报告,机器大厨的每一批菜都带着“合格证”出厂。评估不再是事后的追悔,而是生产链上的常设岗位。

Pass={1,FID<θF 且 Δ>θT0,其他\displaystyle \text{Pass} = \begin{cases} 1, & \text{FID} < \theta_{F} \ \text{且}\ \Delta > \theta_{T} \\ 0, & \text{其他} \end{cases}
判定函数把“多指标 + 阈值”压缩成一个二值结论:只有 FID 低于保真阈值且下游精度提升率高于效用阈值时,批次才判为合格(Pass=1)。
  1. 保真门槛FID 小于 θ_F,代表生成分布与真实分布在统计上足够接近。
    FID<θF\text{FID} < \theta_{F}
  2. 效用门槛Δ 大于 θ_T,代表合成数据在真实任务中带来实际增益。
    Δ>θT\Delta > \theta_{T}
  3. 与逻辑两个条件同时满足才放行,体现“纸面分数与实战表现双关”的验收哲学。
    FID<θF∧Δ>θT\text{FID} < \theta_F \land \Delta > \theta_T
  4. 决策输出Pass 为 1 表示合格可入库,为 0 表示打回重新生成。
    Pass∈{0,1}\text{Pass} \in \{0, 1\}

AI 应用场景

场景 1:自动驾驶感知模型的合成数据质检

阶段:数据准备与质量把关

解决的问题:自动驾驶公司常用生成式模型制造雨天、夜间、逆光等稀缺场景。传统做法是直接全量灌入训练,结果合成图与真实域的差距有时让模型指标反而下降。引入 FID 加下游 mAP 双关卡后,每批合成数据先过分布检验,再与真实数据混合训练验证 mAP 增益,不合格批次直接淘汰。

具体案例:某自动驾驶团队每两周产出一批 50 万张夜间合成街景图。评估流水线报告显示某批次 FID 高达 410(超阈值 300),下游检测 mAP 相对基线下降 2 个点,系统自动打回并触发重新生成,省下约 80 块 GPU 的无效训练开销。

场景 2:医疗影像合成数据的扩增准入

阶段:稀缺样本扩增与安全校验

解决的问题:病灶样本稀缺,用 GAN 扩增小样本。若只靠肉眼抽查,很难发现模型把正常组织也生成出伪病灶。用感知质量(SSIM/LPIPS)配合下游分割 Dice 分数评估,能定量判断扩增数据是否安全可信。

具体案例:肺结节 CT 扩增项目中,每批生成样本先计算与真实切片的 SSIM,再混合训练分割模型;某批 SSIM 仅 0.61(阈值 0.75)且 Dice 不升反降,随即被拦截复查,果然发现生成器陷入纹理伪影模式。

场景 3:电商商品图批量生成的门禁

阶段:AIGC 内容规模化质控

解决的问题:电商用扩散模型生成白底商品图,评估重点不是单图质量而是品类覆盖。用 IS 与覆盖率指标做月度监控,防止生成结果长期被爆款品类垄断、造成训练数据偏食。

具体案例:某电商平台发现一个月内 70% 的生成图集中在爆款品类,覆盖率骤降至 0.4。通过调整提示词分布并重新评估,覆盖率回升到 0.85,下游商品分类模型的 long-tail 准确率提升了 6%。

Python 演示

python49 行
import numpy as np  def matrix_sqrt(mat):    # 对对称半正定矩阵求平方根: A = V * sqrt(L) * V^T    vals, vecs = np.linalg.eigh(mat)    vals = np.clip(vals, 0.0, None)    return (vecs * np.sqrt(vals)) @ vecs.T  def compute_fid(feats_real, feats_gen):    # FID = ||mu_r - mu_g||^2 + Tr(Sigma_r + Sigma_g - 2 * sqrtm(Sigma_r * Sigma_g))    mu_real = feats_real.mean(axis=0)    mu_gen = feats_gen.mean(axis=0)    sigma_real = np.cov(feats_real, rowvar=False) + 1e-6 * np.eye(feats_real.shape[1])    sigma_gen = np.cov(feats_gen, rowvar=False) + 1e-6 * np.eye(feats_gen.shape[1])    mean_term = (mu_real - mu_gen) @ (mu_real - mu_gen)    sr = matrix_sqrt(sigma_real)    core = sr @ sigma_gen @ sr    trace_covmean = np.sqrt(np.clip(np.linalg.eigvalsh(core), 0.0, None)).sum()    return mean_term + np.trace(sigma_real + sigma_gen) - 2.0 * trace_covmean  def compute_is(probs):    # probs: 每行是一张生成图片的类别概率分布    p_y = probs.mean(axis=0)    kl = (probs * (np.log(probs + 1e-9) - np.log(p_y + 1e-9))).sum(axis=1).mean()    return float(np.exp(kl))  def main():    rng = np.random.default_rng(42)    feats_real = rng.normal(0.0, 1.0, size=(2000, 64))    feats_gen_good = rng.normal(0.2, 1.1, size=(2000, 64))    feats_gen_bad = rng.normal(2.5, 2.2, size=(2000, 64))    fid_good = compute_fid(feats_real, feats_gen_good)    fid_bad = compute_fid(feats_real, feats_gen_bad)    print("good FID: %.2f" % fid_good)    print("bad  FID: %.2f" % fid_bad)     rng2 = np.random.default_rng(7)    probs = np.abs(rng2.normal(0.0, 1.0, size=(500, 10)))    probs = probs / probs.sum(axis=1, keepdims=True)    is_score = compute_is(probs)    print("IS score: %.2f" % is_score)  if __name__ == "__main__":    main()
目的:用纯 NumPy 实现 FID 与 IS 两个核心评估指标,输入图像特征即可得到合成数据质量分数,帮你在大批量生成后快速筛选合格批次。
  1. vals, vecs = np.linalg.eigh(mat)特征分解对称协方差矩阵,得到特征值与特征向量,这是求矩阵平方根的地基。
  2. return (vecs * np.sqrt(vals)) @ vecs.T特征值开方后重组矩阵,得到协方差的平方根,对应 FID 公式里的关键中间项。
  3. np.cov(feats_real, rowvar=False)指定每行一个样本、每列一个特征,计算协方差矩阵 Σ。
  4. core = sr @ sigma_gen @ sr构造对称半正定矩阵,保证后续特征分解数值稳定,等价实现 FID 的交叉耦合项。
  5. (probs * (np.log(probs + 1e-9) - np.log(p_y + 1e-9))).sum(axis=1).mean()逐行累加求每个样本的 KL 散度再取平均,最后 exp 即为 IS。
  6. fid_bad = compute_fid(feats_real, feats_gen_bad)生成分布偏离真实分布越远,FID 越大,直观验证“低分即高质量”的判定方向。

常见误区

误区我跑完 FID 只有 15,感觉这批合成图质量已经超过真实数据集了,可以放心直接拿去训练模型。

正解FID 衡量的是“整体特征分布的接近程度”,不负责检查单张图的真实性。一个稳妥而平淡的生成器,只要把均值、协方差对齐到真实分布,FID 就可以很低,但每张图可能都带着模糊或伪影。它只说明批次整体风格像,不代表张张可用,还需搭配感知指标与下游任务交叉验证。

为何常见:FID 名字里带“距离”、“越低越好”在直觉上容易被误读成“逐图质量分”,忽略了它本质上是分布级统计量。

误区我的 IS 刷到了 9.8,说明模型生成的图片既清晰又多样,肯定能当训练数据用了。

正解IS 只衡量“类别可辨识度 + 类别分布均匀度”,它不跟真实数据做任何对比——哪怕生成的是卡通猫或抽象纹理,只要分类网信心足、类别铺得开,IS 照样高。而且它对类内模式坍塌不敏感:1000 张不同品种的狗算高多样,1000 张相同品种的狗也未必被扣分。所以 IS 高只能说明“像某类清晰图”,不能说明“像真实图”。

为何常见:IS 是早期生成模型论文的标配数字,“分数越高越好”被当成免检标志流传,很少有人细究它根本没有参考分布。

误区FID、IS、SSIM、覆盖率全都达标了,这批合成数据直接灌进训练流程准没错。

正解纸面指标全绿只能说明“统计上健康”,合成数据最终要服务于下游任务。域偏移、标注噪声、罕见长尾场景等问题可能只在下游精度上暴露;反过来说,也有 FID 稍高但混合训练增益明显的实用批次。务必保留一个轻量下游验证实验作为最终裁决,再把批次纳入生产。

为何常见:指标自动化让“数字过关”看起来像“质量过关”,忽略了评估体系中效用维度的不可替代性。

误区上个月已经评估过一批数据了,生成模型和业务场景都没变,以后不用再验了吧。

正解数据分布是动态的:目标域(真实部署环境)在变、生成器会悄悄漂移、标注体系也可能升级。固定基准集加阈值判定的自动化流水线应当纳入持续集成,每次生成批次都自动出报告并留存历史,才能及时发现质量滑坡。

为何常见:单次评估成本不低,人们容易把“做过”当成“永远有效”,忽视了评估是持续监控而非一次性体检。

面试题

Q1. 关于 FID 指标,下列说法正确的是?

单选题 · easy

  • A.FID 值越低说明图像分辨率越高
  • B.FID 值越低说明生成与真实分布越接近← 正确答案
  • C.FID 值越高代表生成图像内容越丰富
  • D.FID 值不受特征提取网络的影响

答案:B。FID 度量生成特征分布与真实特征分布的 Fréchet 距离,越低代表分布越接近,但它与分辨率、内容丰富度没有直接对应。它依赖 Inception 等特征网络,所以 D 的描述也是错的。就像看两拨菜的整体口味曲线是否吻合,而不是看哪道菜更精致。

Q2. Inception Score(IS)衡量生成图像的哪两个方面?

单选题 · easy

  • A.与真实图像的像素级相似度
  • B.图像分辨率和色彩丰富度
  • C.模型的参数量和推理速度
  • D.单张可辨识度和整体多样性← 正确答案

答案:D。IS 由 KL(p(y|x) ‖ p(y)) 构成:p(y|x) 尖锐说明单张图可辨识,p(y) 均匀说明集合多样。它不参照真实数据,因此不衡量与真实图像的相似度,也不关心分辨率和模型参数。好比盲测考题只问“认不认识”和“花样多不多”。

Q3. 生成模型发生模式坍塌时,下列哪个指标最能直接暴露问题?

单选题 · easy

  • A.FID 分布距离指标
  • B.SSIM 结构相似指标
  • C.覆盖度与多样性指标← 正确答案
  • D.PSNR 峰值信噪指标

答案:C。模式坍塌意味着生成集合只覆盖真实分布的少数模式,覆盖度(COV)和多样性指标直接统计邻域覆盖与样本间差异,最容易暴露。FID 对整体分布仍可能偏低,SSIM/PSNR 是成对图像的指标,无法度量集合覆盖,相当于点检清单才能发现“菜单缺菜”。

Q4. 计算 FID 前,通常用哪个网络把图像映射为特征向量?

单选题 · mid

  • A.Inception 系列分类网络← 正确答案
  • B.自编码器重构网络
  • C.循环神经网络 RNN
  • D.图神经网络 GNN

答案:A。FID 全称是 Fréchet Inception Distance,实践上用预训练 Inception v3 的池化层输出作为语义特征。RNN 处理序列、GNN 处理图结构、自编码器重构图,都不适合作为通用图像语义特征提取器。

Q5. SSIM 结构相似度指标由哪三个部分组成?

单选题 · mid

  • A.均值、方差、协方差矩阵
  • B.色相、饱和度、明度通道
  • C.边缘、纹理、颜色直方图
  • D.亮度、对比度、结构信息← 正确答案

答案:D。SSIM 在同一局部窗口内比较亮度(均值)、对比度(方差)和结构(协方差)三个分量。均值、方差、协方差是实现手段而非组成部分本身;色相饱和度是 HSV 色彩空间的通道,与 SSIM 无关。

Q6. 以下哪些方法属于合成图像的感知质量评估?

多选题 · mid

  • A.SSIM 结构相似度← 正确答案
  • B.LPIPS 感知距离← 正确答案
  • C.人类主观打分评测← 正确答案
  • D.逐像素平均绝对误差

答案:ABC。感知质量评估模拟人眼观感,SSIM 比较局部亮度、对比度、结构,LPIPS 在深度特征空间比较感知距离,人类主观打分是黄金标准。逐像素平均绝对误差(MAE)只算像素差,不感知结构语义,不能归入感知评估。

Q7. 下游任务验证中,验证合成数据价值最科学的做法是?

单选题 · mid

  • A.只用合成数据训练并测试
  • B.合成加真实混合训练比精度← 正确答案
  • C.将生成图批量做数据可视化
  • D.只比较生成模型的训练时长

答案:B。下游验证要搭建同源对照:模型结构、超参、数据量一致,只改变合成数据占比,比较 mAP 或准确率。只用合成数据测试脱离真实部署场景,可视化与训练时长都不能度量数据质量。混合训练是对实际投产方式最真实的模拟。

Q8. 关于 FID 指标的局限性,下列说法正确的有?

多选题 · hard

  • A.对特征提取网络选择非常敏感← 正确答案
  • B.无法反映单张图像的视觉真实性← 正确答案
  • C.需要足够多样本估计才稳定← 正确答案
  • D.能直接定位哪些类别发生了坍塌

答案:ABC。FID 是集合级统计量,换网络特征分数会大变;它不负责单张图的真实感;协方差估计需要成千上万样本才稳定。虽然模式坍塌会让 FID 变差,但它只能给出一个总体数字,无法定位具体哪个类别塌了,所以 D 错误——正如口味曲线能说“整体偏了”,却指不出具体哪道菜出了问题。

Q9. 真实数据训练的模型精度为 0.80,混合合成数据后精度为 0.90,精度提升率 Δ 是多少?

单选题 · hard

  • A.提升约 10.0 个百分点
  • B.提升约 12.5 个百分点← 正确答案
  • C.提升约 15.0 个百分点
  • D.提升约 20.0 个百分点

答案:B。Δ = (0.90 - 0.80) / 0.80 = 12.5%。A 选项把绝对提升(0.10)当成了相对提升,是常见混淆。好比试菜对比:不是比“多了 10 分”,而是比“在原来基础上提升了百分之多少”。

Q10. 自动化评估流程通常包含哪些环节?

多选题 · hard

  • A.自动取样与批量特征提取← 正确答案
  • B.指标计算与阈值自动判定← 正确答案
  • C.生成结构化评估报告← 正确答案
  • D.人工逐一目检每张图像

答案:ABC。自动化评估把采样、特征提取、指标计算、阈值判定、报告生成串成流水线,人工目检只用于抽查校准,不可能逐张检查十万级图像。这与把试菜流程写成 SOP、让机器自动出检验报告是同一个思路。