蓝杉网站建设公司,建设网站资质查询,中天建设集团网站,怎么自己写网站Sample Quality Matrix 如何评价生成式模型的效果#xff1f;ISFIDsFIDPrecision RecallPrecisonRecall计算precision和recall 如何评价生成式模型的效果#xff1f;
Quality: 真实性#xff08;逼真#xff0c;狗咬有四条腿#xff09;
Diversity: 多样性#x… Sample Quality Matrix 如何评价生成式模型的效果ISFIDsFIDPrecision RecallPrecisonRecall计算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)} KLp(y∣x)∗loglog(p(y)p(y∣x))
Inception-V3是一个图像分类的模型在imageNet上进行训练得到的预训练模型
p(y|x)即我们的模型生成的照片它属于某个类别的概率
p(y)即边缘概率
#用代码实现IS
def calculate_inception_score(p_yx, eps1E-16):# p_yx 即p(y|x)# calculate p(y)p_y expand_dims(p_yx.mean(axis0), 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(axis1)# average over images avg_kl_d mean(sum_kl_d)# undo the logs is_score exp(avg_kl_d)return is_scoreFID
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||^2Tr(C_1C_2-2\sqrt{C_1*C_2}) d2∣∣μ1−μ2∣∣2Tr(C1C2−2C1∗C2 )
# 用代码实现FIDdef calculate_fid(act1, act2):act1:2048dim的隐变量真实的图片送入Inception-V3中得到的act2:2048dim的隐变量预测的图片送入Inception-V3中得到的# calculate mean and covariance statistics mu1, sigma1 act1.mean(axis0), cov(act1, rowvarFalse)mu2, sigma2 act2.mean(axis0), cov(act2, rowvarFalse)# 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中的每个样本的距离如果在圈内则说明是©中的蓝色实心部分蓝色实心部分占比与整个红色部分