栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

文章目录
    • 引言
    • 解决python2→python3.x问题
    • 验证评估代码是否可以正确运行
    • 解决 jar 包运行出错的原因
      • 排查jar包运行出错的原因
      • 解决Could not reserve enough space for 2097152KB object heap问题
      • 重新运行测试代码
    • Reference

引言

在使用 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
验证评估代码是否可以正确运行

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

在pycocoevalcapexample的路径下,执行 coco_eval_example.py:

python %your_path%site-packagespycocoevalcapexamplecoco_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包运行出错的原因

pycocoevalcapmeteor 路径下,单独执行 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%jrebin 和 C:Program Files (x86)Common FilesOracleJavajavapath(根据个人情况修改):

④ 在命令行输入java -version

可以看到现在是64位版本。

重新运行测试代码
python %your_path%site-packagespycocoevalcapexamplecoco_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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/336453.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号