当前位置: 首页 > news >正文

生成式模型的质量评估标准

Sample Quality Matrix

  • 如何评价生成式模型的效果?
  • IS
  • FID
  • sFID
  • Precision & Recall
    • Precison
    • Recall
    • 计算precision和recall

如何评价生成式模型的效果?

Quality: 真实性(逼真,狗咬有四条腿)

Diversity: 多样性(哈巴狗,金毛,吉娃娃,中华田园犬)

IS

Inception Score
K L = p ( y ∣ x ) ∗ l o g p ( y ∣ x ) ) l o g ( p ( y ) KL = p(y|x)*log \frac{p(y|x))}{log(p(y)} KL=p(yx)loglog(p(y)p(yx))

Inception-V3是一个图像分类的模型,在imageNet上进行训练得到的预训练模型

p(y|x):即我们的模型生成的照片,它属于某个类别的概率

p(y):即边缘概率
在这里插入图片描述

#用代码实现IS 
def calculate_inception_score(p_yx, eps=1E-16):# p_yx 即p(y|x)# calculate p(y)p_y = expand_dims(p_yx.mean(axis=0), 0)#kl divergence for each imagekl_d = p_yx * (log(p_yx + eps) - log(p_y + eps))# sum over classes sum_kl_d = kl_d.sum(axis=1)# average over images avg_kl_d = mean(sum_kl_d)# undo the logs is_score = exp(avg_kl_d)return is_score

FID

Frechlet Inception Distance(FID)

鉴于IS的缺点,就有了FID的出现,它是一个距离的量,即和真实的图片(训练集)的一个对比

FID也是用Inception-V3这个预训练好的图像分类模型,但它用的不是分类概率了,而是中间的一个feature vectors

即:把生成的照片和训练集中真实的照片同时送入到Inception-V3中,将二者经过Inception-V3模型得到的中间的特征向量拿出来,算出一个高斯分布的统计量,再去计算这两个分布之间的一个W2距离。

在这里插入图片描述
d 2 = ∣ ∣ μ 1 − μ 2 ∣ ∣ 2 + T r ( C 1 + C 2 − 2 C 1 ∗ C 2 ) d^2=||\mu_1-\mu_2||^2+Tr(C_1+C_2-2\sqrt{C_1*C_2}) d2=∣∣μ1μ22+Tr(C1+C22C1C2 )

# 用代码实现FIDdef calculate_fid(act1, act2):'''act1:2048dim的隐变量,真实的图片送入Inception-V3中得到的act2:2048dim的隐变量,预测的图片送入Inception-V3中得到的'''# calculate mean and covariance statistics mu1, sigma1 = act1.mean(axis=0), cov(act1, rowvar=False)mu2, sigma2 = act2.mean(axis=0), cov(act2, rowvar=False)# calculate sum squared difference between means ssdiff = numpy.sum((mu1 - mu2)**2.0)# calculate sqrt of product between cov covmean = sqrtm(sigma1.dot(sigma2))# check and correct imaginary numbers from sqrt if iscomplexobj(covmean):covmean = covmean.real# calculate score fid = ssdiff + trace(sigma1 + sigma2 - 2.0 * covmean)return fid

对于IS和FID,一般都是同时使用,而不是只使用其中一个

sFID

sliding Frechlet Inception Distance
和FID的不同就是用的隐变量不同,FID的隐变量是池化后的,sFID使用的是未经池化的隐变量

Precision & Recall

在生成式模型中,Precision(精确率)和Recall(召回率)通常用于评估生成的样本质量和多样性。以下是生成模型中计算Precision和Recall的常见方法:

在这里插入图片描述
generated 分布用红色表示,real分布用蓝色表示

precision: 即红色的占蓝色分布的比例,即预测出来的样本占真实分布的比例

recall:即蓝色的点占红色的分布的比例,即真实的样本占预测分布的比例

理想情况是PR都大

Precison

Precision(精确率):Precision衡量生成的样本中有多少是真实样本的正确生成。它是通过计算生成样本中与真实样本匹配的比例来衡量的。一种常见的方法是使用K最近邻(K-nearest neighbors)来评估生成样本与真实样本之间的相似度。具体步骤如下:

对于每个生成样本,通过计算其与真实样本之间的距离(如欧氏距离或余弦相似度),找到其K个最近邻真实样本。
计算这K个最近邻中有多少真实样本,即与生成样本匹配的数量。
最后,将匹配数量除以生成样本的总数,得到Precision。

Recall

Recall(召回率):Recall衡量生成样本中成功覆盖真实样本的能力。它是通过计算真实样本中与生成样本匹配的比例来衡量的。具体步骤如下:

对于每个真实样本,通过计算其与生成样本之间的距离,找到其K个最近邻生成样本。
计算这K个最近邻中有多少是真实样本,即与真实样本匹配的数量。
最后,将匹配数量除以真实样本的总数,得到Recall。

计算precision和recall

用的是中间特征,而不是原图片本身

先把样本表示为 N × D N \times D N×D, D D D表示特征的维度, N N N表示为样本的个数

参考样本为: N 1 × D N1 \times D N1×D , 生成样本为: N 2 × D N2\times D N2×D

用KNN的方法,求出每个样本的k近邻,具体做法为:

用manifold_radii来求出每个元素的k个近邻的距离,求出radius后,

交叉去验证real分布中属于generative的样本的个数,计算得到precision

验证generative分布中属于real的样本的个数,计算得到recall
在这里插入图片描述
如何去获取real和generative的分布呢?

高效计算Precision和Recall。它比较两个批次的特征向量,根据流形半径判断它们是否在彼此的流形内。

将原始的N个图片 --> 表示为矩阵 N × D N\times D N×D

求得每个样本的 k 个近邻,即求得一个范围,相当于以每个样本为中心,画个圈,这样就可以表示出 real 的分布了,同理于generative分布,如下图所示。
在这里插入图片描述

  • Precision: 以real的每个样本为中心,画圈,计算real中的每个样本和generative中的每个样本的距离,如果在圈内,则说明是(b)中的红色实心部分, 红色实心部分占比与整个蓝色的部分
  • Recall:以generative的每个样本为中心,画圈,计算generative中的每个样本和real中的每个样本的距离,如果在圈内,则说明是©中的蓝色实心部分,蓝色实心部分占比与整个红色部分
http://www.lryc.cn/news/91475.html

相关文章:

  • pinpoint安装部署(相关博客合集)
  • python-匿名函数(lambda函数)
  • JS逆向常见情况
  • 利用matlab对滤波器频率特性分析
  • 对比 RS232,RS422,RS485
  • python使用requests+excel进行接口自动化测试(建议收藏)
  • 华为OD机试真题 Java 实现【食堂供餐】【2023 B卷 考生抽中题】,附详细解题思路
  • 一分钟学一个 Linux 命令 - cd
  • vi(vim)常用命令汇总
  • 模特信息管理系统的开发与实现(ASP.NET,SQLServer)
  • 文件上传漏洞
  • 前端还是后端,该怎么选择
  • 【Python】Python系列教程-- Python3 循环语句(十七)
  • chatgpt赋能python:Python如何变为列表
  • 高频面试八股文用法篇(二) hive中几种排序类型区别
  • linuxOPS基础_linux umask
  • K8s基础核心
  • Web开发中的图片管理:策略与实践
  • SNK施努卡 - 机器视食品检测 食品中视觉检查的作用是什么?
  • 【七】设计模式~~~结构型模式~~~桥接模式(Java)
  • Python 教程:使用 pandas 和 glob 库合并多个 Excel 文件
  • 16. Vue-element-template记住密码
  • Python文件打包成exe文件
  • 【简单实用框架】【十大排序算法直接调用】【可移植】
  • 微服务架构之RPC调用
  • One2Multi Graph Autoencoder for Multi-view Graph Clustering
  • Java编程实现输入数的阶乘(for循环):读入一个小于 10 的整数 n,输出它的阶乘 n。(for循环)
  • 算法提高-搜索-FloodFill和最短路
  • 【蓝桥杯单片机第八届国赛真题】
  • 一种简单的Android骨架屏实现方案----0侵入0成本