1. 场景:
ImageCaption任务是CV以及mllm研究中的基础任务。在这个blog中,我们介绍如何使用pycocoevalcap这个package评测模型的captioning能力。
2. 评测指标
在ImageCaption任务中,我们通常参考bleu, meteor, rouge_L, CIDEr, SPICE等semantic matching指标。其中CIDEr和 SPICE是用来评测ImageCaption的专门指标,而bleu, meteor, rouge_L也广泛应用于NMT和summarization等NLG任务。这里对于metric的原理不进行赘述,感兴趣的小伙伴可以参考如资料:
3. pycocoevalcap 安装与配置
pycocoevalcap是微软开发的专门用于评测MS COCO数据集ImageCaption任务的工具包, 它几乎集成了所有caption evaluation指标。但是由于pycocoevalcap开发的比较早,SPICE的计算还需依赖JAVA1.8环境,安装起来并不是一帆风顺的。But,让我们一步一步来~

3.1 安装pycocoevalcap
在用户的conda虚拟环境中,直接用pip安装即可。国内的小伙伴可以基于国内镜像,这里使用清华源。
pip install pycocoevalcap -i https://pypi.tuna.tsinghua.edu.cn/simple
3.2 安装JAVA Version 8
首先访问JAVA官网。我用的是M1芯片的Macbook,于是要在这里下载

如果使用其他的设备,可以在官网里面找到符合自己设备的安装包,再进行下载。ubuntu用户可以参考这里。下载下来的是一个Java 8 Updata 431的安装向导,直接双击点开并Install即可。

随着进度条走完,JAVA Version 8 已经安装完毕,我们可以在terminal中check一下.
#查看java版本
(MLBD) xxx@xxx-MacBook-Pro ~ % java -version
java version "1.8.0_431"
Java(TM) SE Runtime Environment (build 1.8.0_431-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.431-b10, mixed mode)
#查看java 路径
(MLBD) xxx@xxx-MacBook-Pro ~ % /usr/libexec/java_home -V
Matching Java Virtual Machines (1):
1.8.431.10 (arm64) "Oracle Corporation" - "Java" /Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home # 就是这个路径‘/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home’
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home
在这里,我们就把JAVA version 8安装好了。
3.3 注释SPICE.py 中的cache
若直接进行SPICE指标的评测,有时会报如下错误:
---------------------------------------------------------------------------
CalledProcessError Traceback (most recent call last)
Cell In[1], line 25
22 coco_eval.evaluate()
24 return coco_eval.eval
---> 25 compute_cider(result_path, annotation_path)
Cell In[1], line 22
20 coco_eval = COCOEvalCap(coco, coco_result)
21 coco_eval.params["image_id"] = coco_result.getImgIds()
---> 22 coco_eval.evaluate()
24 return coco_eval.eval
File /opt/miniconda3/envs/MLBD/lib/python3.10/site-packages/pycocoevalcap/eval.py:53, in COCOEvalCap.evaluate(self)
51 for scorer, method in scorers:
52 print

1214

被折叠的 条评论
为什么被折叠?



