这里推荐一篇实用的文章:用堆实现优先级队列:从基础到实战
优先级队列在许多场景中是一种不可或缺的数据结构。与普通队列不同,优先级队列的插入顺序并不会决定元素的取出顺序,而是由其优先级大小来决定。不论是在操作系统的任务调度中,还是在大型服务器的请求处理中,优先级队列都起到至关重要的作用。这篇文章深入探讨的就是如何使用 堆结构 来实现一个优先级队列,用 Java 代码实现。
下面开始今天的主题:
R-precision是一种衡量文本描述和生成图像之间视觉语义相似性的指标,它通过比较提取的图像特征和文本特征之间的相似度来评估。具体来说,R-precision首先需要对生成的图像提取特征,同时从数据集中随机抽取其他文本描述,包括生成图像的真实文本描述。然后,计算图像特征和每个文本描述的text embedding之间的余弦相似性,这是一种衡量两个向量之间角度相似度的方法。计算完成后,所有文本描述会根据相似性从高到低进行排序。如果生成图像的真实文本描述在排序后的前r个位置内,那么这个描述被认为是相关的。R-precision的值就是真实文本描述出现在前r个的概率,这个值越高,说明生成的图像与真实文本描述的相关性越强,因此R-precision是一个衡量图像生成质量的重要指标。
简单举个例子:假设r为3,有一百个文本,其中包括一个真实对应的文本和99个随机取出来的文本,将他们转为text embedding,然后分别与生成的图像计算余弦相似度,然后排序,如果真实文本生成的embedding排在前3位,则认为该图像与文本有相关性。
R-precision表示的是排序后真实文本出现在前r个的概率,越大说明图像与真实文本描述越相关,R-precision越大越好。
这里我们以DF-GAN在CUB上面的模型定量为例:
Github:https://github.com/maincarry/R-Precision
下载后发现代码工程包括build_RPdata.py、config.py、encoder.py、eval_Rprecision.py、all_texts.txt。
all_text.txt:包括birds的所有描述文本 build_RPdata.py:功能是根据生成的图像建立图像-文本的数据对 config.py:一些参数的设置,用不着,可以不管 encoder.py:图像编码器和文本编码器 eval_Rprecision.py:功能是根据图像-文本的数据对评估图像文本的对齐性
以DF-GAN为例: 将文件放到以上箭头指定的位置(此处只是为了方便这样放,也可以自己单独做文件夹放,只要后面的文件路径你能配好随意放都行)
打开build_RPdata.py,找到160~180行,如下:
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Generate RP test data from evaluation output.')
parser.add_argument('-p', dest='path', type=str, help='Path to image directory')
parser.add_argument('-c', dest="cap", default='all_texts.txt',
help='Optional: specify all texts file. Default to all texts in dataset.')
parser.add_argument('-d', dest='out', type=str, help='Output directory', default='./')
parser.add_argument('-t', dest='text', type=str, help='Directory to text data',
default='D:\\MyPythonWorkplace\\DF-GAN-master\\data\\bird\\text\\text')
# default='D:\\AttnGAN-master\\data\\birds\\text')
parser.add_argument('-r, --random', dest='rand', action='store_true',
help='If set, sample is selected randomly instead of sequentially.')
args = parser.parse_args()
# args.p = 'D:\\AttnGAN-master\\models\\netG_epoch_250\\valid\\single\\'
args.p = '..\\test\\valid\\single_580epoch'
# args.out = 'D:\\AttnGAN-master\\R_Precision_attnGAN-master\\RP_data\\'
args.out = '..\\RP_data'
其中需要更改的参数有三个
parser.add_argument('-t', dest='text', type=str, help='Directory to text data',default='D:\\MyPythonWorkplace\\DF-GAN-master\\data\\bird\\text\\text')
,这一句是指明数据集文本所在的位置,修改为你放置的地方,如果你按照2.3放置好了文件的话,你可以改成default='..\\data\\bird\\text\\text'
args.p = '..\\test\\valid\\single_580epoch'
,这一句是指明生成的图像的所在位置:args.out = '..\\RP_data'
,这一句指明你要输出的图像-文本数据对所在的位置。打开eval_R_precision.py,找到第306行左右:
args = parse_args()
BATCH_SIZE = 64
args.fake_dir = '..\\RP_data'
args.cap_path = '..\\data\\bird\\captions.pickle'
args.manualSeed = 1900
其中需要更改的参数有两个
运行build_RPdata.py,生成数据对文件保存到RP_data文件夹中。
如果出现读取文件错误可以更改86行:txt_file = os.path.join(args.text, os.path.basename(dir), "{}.txt".format(fname.split(" ")[0][:-1]))
,看是不是路径提取时出的错误。
运行eval_R_precision.py开始评估,等待结束即可,3000份图像-文本数据对的话评估时间大概在7分钟左右。
R-precision虽然是一个衡量文本描述和生成图像之间相似性的有用指标,但它存在一些局限性。它依赖于余弦相似性来评估特征之间的相似度,可能无法完全捕捉图像和文本之间的复杂语义关系。此外,它可能对全局背景色过于敏感,导致评估结果不准确。样本的代表性和数据预处理方法也会影响其稳定性和可靠性。R-precision还依赖于预先训练的分类器,这限制了其在不同数据集上的适用性,并可能导致过拟合。最后,由于它基于特征提取,无法描述特征的空间关系,这可能导致在评估生成图像的质量时出现偏差。因此,R-precision需要与其他评价指标结合使用,以获得更全面的评估结果。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。