Windows 10环境下「MSCOCO Captions」评估代码踩坑记录

引言

在使用 Image Captioning Codebase、SGAE、Self-critical 等开源项目时,常常会用到Microsoft COCO Caption Evaluation 的评估代码(https://github.com/tylin/coco-caption),对MSCOCO Captions数据集(https://arxiv.org/abs/1504.00325)的图像描述生成算法的性能进行评价。

但是对 MSCOCO Captions 数据集进行性能评估时常常会遇到一些bug,这里记录一下评估 MSCOCO Captions 时常见问题的解决方案。

解决python2→python3.x问题

原版的Microsoft COCO Caption Evaluation对应的 requirements 是: java 1.8.0 + python 2.7

但现在大多数人的环境是python3.x,所以我们下面安装评估代码的python3.x版本

pip install pycocoevalcap

如果安装有问题,可以下载源码进行安装。(https://download.csdn.net/download/Bit_Coders/35334927?spm=1001.2014.3001.5503)

验证评估代码是否可以正确运行

pycocoevalcap 中的 coco_eval_example.py 是一小段测试代码,可以帮我们快速验证 pycocoevalcap 能否完整、成功运行。

在pycocoevalcap\example的路径下,执行 coco_eval_example.py

python %your_path%\site-packages\pycocoevalcap\example\coco_eval_example.py

其中coco_eval.evaluate()会调用Bleu、Meteor、Rouge、Cider、Spice模块分别对Bleu、METEOR、ROUGE_L、CIDEr、SPICE指标进行计算。

  • Bleu、Rouge、Cider 类由 python 实现对应的计算代码
  • Meteor 类需要通过一个新进程调用 meteor-1.5.jar 来计算
  • Spice 类需要通过一个新进程调用 spice-1.0.jar 和 lib中的jar包来完成计算

一般出错都是在 Meteor 和 Spice 调用jar包进行计算的步骤。

如果你不需要METEOR、SPICE指标,那么可以直接注释掉 eval.py 中的 (Meteor(),“METEOR”) 和 (Spice(), “SPICE”);如果你需要这两个指标,那么继续往下看。

scorers = [
            (Bleu(4), ["Bleu_1", "Bleu_2", "Bleu_3", "Bleu_4"]),
            (Meteor(),"METEOR"),
            (Rouge(), "ROUGE_L"),
            (Cider(), "CIDEr"),
            (Spice(), "SPICE")
        ]

解决 jar 包运行出错的原因

在计算 METEOR 指标时,可能会在 meteor.py 中的这一句报错 OSError: [Errno 22] Invalid argument

self.meteor_p.stdin.write('{}\n'.format(score_line).encode())

或在计算 SPICE 指标时,在 spice.py中的这一句报错:

subprocess.check_call(spice_cmd, cwd=os.path.dirname(os.path.abspath(__file__)))

这些问题一般是调用 java 命令执行对应的 jar 包出错导致的。

排查jar包运行出错的原因

\pycocoevalcap\meteor 路径下,单独执行 java 命令,可以查看具体报错原因:

java -jar -Xmx2G meteor-1.5.jar - - -stdio -l en -norm

解决Could not reserve enough space for 2097152KB object heap问题

如果出现下面这个问题,Could not reserve enough space for 2097152KB object heap,一般是由于没有正确安装64位java导致的。
在这里插入图片描述
① 首先,检查windows上安装的java版本是32位还是64位的。

在命令行执行java -version可以查看JDK版本。如果输出中包含64-Bit则为64位,否则是32位。
在这里插入图片描述
可以看出之前安装的确实不是64位版本。

② 如果不是64位的,去官网下载安装x64版本:

https://www.oracle.com/java/technologies/downloads/#java8

在这里插入图片描述
③ 配置环境变量

在环境变量中创建 JAVA_HOME 变量,输入刚刚安装jdk的路径:
在这里插入图片描述
在环境变量中创建 CLASSPATH 变量,输入以下路径:
在这里插入图片描述
PATH 变量中,添加bin路径:%JAVA_HOME%\bin%JAVA_HOME%\jre\binC:\Program Files (x86)\Common Files\Oracle\Java\javapath(根据个人情况修改):
在这里插入图片描述

④ 在命令行输入java -version
在这里插入图片描述
可以看到现在是64位版本。

重新运行测试代码

python %your_path%\site-packages\pycocoevalcap\example\coco_eval_example.py

如果能够打印出以下所有指标,即 MSCOCO Captions 的评估代码运行成功,可以继续训练你的captioner了。
在这里插入图片描述


Reference

https://github.com/tylin/coco-caption/issues/51
https://blog.csdn.net/herrygoon/article/details/84793372
https://github.com/salaniz/pycocoevalcap/issues/5
https://blog.csdn.net/u010058695/article/details/100983213

Guess you like

Origin blog.csdn.net/Bit_Coders/article/details/120840271