文章目录
引言
在使用 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\bin
和 C:\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