Kosmos-2 零样本指代表达理解评测指南RefCOCO / RefCOCO / RefCOCOg 数据准备、评估流程与指标原理【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm本指南完整讲解如何在 Kosmos-2Grounding Multimodal Large Language Models to the World上复现 RefCOCO、RefCOCO、RefCOCOg 三个基准的**零样本zero-shot指代表达理解Referring Expression Comprehension**评测从 MSCOCO2014 图像与 MDETR 预处理标注的获取、.locout输入格式转换到端到端推理脚本与官方指标计算脚本的逐行原理。读完本文你将能够独立下载数据、跑通grd-zeroshot-refcoco.sh全流程并理解 Kosmos-2 以「patch index 定位 token」输出包围框并计算 Accuracy0.5 的完整机制。任务与数据集背景指代表达理解要求模型根据一句自然语言描述例如「穿红裙子的女人」在图像中定位出所指的目标物体输出其包围框bounding box。RefCOCO、RefCOCO 与 RefCOCOg 是基于 MSCOCO2014 图像的三个经典评测基准它们的差异主要体现在指代表达的语言风格上RefCOCO 的指代不允许使用绝对位置词RefCOCOg 的指代表达则更长、更接近自然对话。Kosmos-2 在上述基准上不做任何微调直接以预训练 指令微调后的权重进行零样本推理。需要特别强调的是为保证评测的公平性官方在指令微调阶段移除了 LLaVA-Instruct 数据集中所有来自 RefCOCO//g val/test 集合的图像约 20K 张以避免图像泄漏对零样本结果造成污染。零样本评测结果Kosmos-2 在 RefCOCO 系列三个基准的 val / test 划分上的 AccuracyIoU ≥ 0.5 视为命中结果如下ModelRefCOCO valRefCOCO testARefCOCO testBRefCOCO valRefCOCO testARefCOCO testBRefCOCOg valRefCOCOg testKosmos-252.3257.4247.2645.4850.7342.2460.5761.65其中 RefCOCO 的 testA 偏「人」类目标、testB 偏「物体」类目标因此 testB 难度更高、得分更低RefCOCOg 的指代表达更长Kosmos-2 反而在 RefCOCOg 上取得最高分val 60.57 / test 61.65。该结果同时记录在 Kosmos-2 主 README 的「2. Referring expression comprehension」章节中。数据准备1. 下载图像与标注评测需要两类原始资源图像官方 MSCOCO2014 图像数据集中的train2014压缩包MDETR 预处理标注中同时引用了 train2014 与 val2014 两个目录下载 train2014 即可覆盖测试所需图像解压后得到train2014/与val2014/两个子目录。标注MDETR 项目预处理好的 RefCOCO/RefCOCO/RefCOCOg 标注文件即mdetr_annotations.tar.gz。解压后会得到finetune_refcoco_val.json、finetune_refcoco_testA.json、finetune_refcoco_testB.json、finetune_refcoco_val.json、finetune_refcoco_testA.json、finetune_refcoco_testB.json、finetune_refcocog_val.json、finetune_refcocog_test.json这 8 个 JSON 文件它们是后续一切流程的 ground truth。2. 转换数据格式Kosmos-2 的推理入口按行读取输入需要把上述 JSON 标注转换成包含图像路径与指代表达的文本行文件。仓库提供了转换脚本 evaluation/refcoco/cook_data.pypython cook_data.py /path/to/mdetr_annotations /path/to/MSCOCO2014该脚本会对 8 个 split 依次调用内部的cook_data(input_file, image_path, locate_tokengrounding, postfix.locout)生成与 JSON 同名的.locout文件。其核心逻辑为cook_data.py遍历dataset[annotations]按image_id找到对应的图像文件名与指代表达文本根据文件名中是否包含train2014决定图像所属子目录拼接出[image]{image_path}/{dir_name}/{file_name}形式的图像标记输出每一行为[image]{image_path}/{dir_name}/{file_name}tabgroundingphrase{caption}/phrase。其中grounding是 Kosmos-2 任务体系中的定位grounding指令 tokenphrase标记指代表达文本的边界。这 8 个.locout文件即推理阶段的输入eval_json。备选方案如果不想自己转换也可以直接下载项目官方预处理好的 8 个 split 文件RefCOCO val/testA/testB、RefCOCO val/testA/testB、RefCOCOg val/test 对应的finetune_refcoco*.json.locout。注意这些文件中记录的图像路径是作者机器上的路径下载后必须替换为你本机实际的 MSCOCO2014 图像路径否则推理阶段读图会失败。输入格式与图像预处理链路.locout文件中的每一行都会被 evaluation/caption_obj_few_shot.py 解析。该脚本基于 fairseq 的 interactive generation 流程扩展而来其get_interactive_tokens_and_lengths方法按tab切分输入逐段处理以[image]开头的段会被识别为图像段使用square_transform将图像 resize 到224×224BICUBIC 插值、转为 tensor 并按 Inception 论文的最大熵归一化方式做标准化均值[0.48145466, 0.4578275, 0.40821073]标准差[0.26862954, 0.26130258, 0.27577711]随后在 token 序列中插入image起始 token、image_feature_length默认 64个图像特征占位 token 与/image结束 token其余文本段会先按特殊 token 切分split_string普通文本经 sentencepiece tokenizerdata/sentencepiece.bpe.model编码特殊 token 原样保留。因此最终喂给模型的输入形如s image image hidden /image grounding phrase caption /phrase /s这是 Kosmos-2 grounding 推理的标准输入形态。端到端零样本评估流程数据就绪后通过 evaluation/grd-zeroshot-refcoco.sh 一键完成「推理 指标计算」两步cd kosmos-2 # RefCOCO val/testA/testB split bash evaluation/grd-zeroshot-refcoco.sh 0 32 /path/to/kosmos-2.pt /path/to/finetune_refcoco_val.json.locout /path/to/finetune_refcoco_val.json bash evaluation/grd-zeroshot-refcoco.sh 0 32 /path/to/kosmos-2.pt /path/to/finetune_refcoco_testA.json.locout /path/to/finetune_refcoco_testA.json bash evaluation/grd-zeroshot-refcoco.sh 0 32 /path/to/kosmos-2.pt /path/to/finetune_refcoco_testB.json.locout /path/to/finetune_refcoco_testB.json # RefCOCO val/testA/testB split bash evaluation/grd-zeroshot-refcoco.sh 0 32 /path/to/kosmos-2.pt /path/to/finetune_refcoco_val.json.locout /path/to/finetune_refcoco_val.json bash evaluation/grd-zeroshot-refcoco.sh 0 32 /path/to/kosmos-2.pt /path/to/finetune_refcoco_testA.json.locout /path/to/finetune_refcoco_testA.json bash evaluation/grd-zeroshot-refcoco.sh 0 32 /path/to/kosmos-2.pt /path/to/finetune_refcoco_testB.json.locout /path/to/finetune_refcoco_testB.json # RefCOCOg val/test split bash evaluation/grd-zeroshot-refcoco.sh 0 32 /path/to/kosmos-2.pt /path/to/finetune_refcocog_val.json.locout /path/to/finetune_refcocog_val.json bash evaluation/grd-zeroshot-refcoco.sh 0 32 /path/to/kosmos-2.pt /path/to/finetune_refcocog_test.json.locout /path/to/finetune_refcocog_test.json脚本参数说明脚本接收 5 个位置参数grd-zeroshot-refcoco.sh参数含义$1gpu_rank使用的 GPU 序号通过CUDA_VISIBLE_DEVICES指定$2quantize_size位置量化网格边长默认 32即把图像划分成 32×32 的网格用于 patch index 定位$3model_pathKosmos-2 权重文件路径如kosmos-2.pt脚本据此自动推导输出文件名前缀$4eval_json推理输入即上一步生成的finetune_refcoco*.json.locout$5ann_jsonground truth 标注即 MDETR 预处理得到的finetune_refcoco*.json脚本会用 sed 从eval_json文件名中提取评测名如.refcoco.testA并拼出输出文件后缀eval_out_post_name推理结果写入模型同目录下的${file_name}${eval_out_post_name}文件指标结果写入${file_name}${result_post_name}最后tail -n 6打印各数据集的 Precision1/mean/all 汇总行。推理阶段的关键解码参数推理命令的核心是调用 caption_obj_few_shot.py--task generation_obj其中与 grounding 输出质量直接相关的参数包括--locate-special-token 1启用object、patch_index_N、/delimiter_of_multi_objects/等定位特殊 token 的输出这是模型能以 patch index 形式输出框的前提--location-bin-size $quantize_size与quantize_size对齐的定位 bin 数用于约束 patch index 的取值范围--beam 1/--nbest 1/--no-repeat-ngram-size 3贪心解码配合禁止 n-gram 重复降低输出抖动--max-len-b 500最大生成长度保证短语与定位 token 有足够的生成空间--add-bos-token、--remove-bpesentencepiece、--dict-path data/dict.txt输入加 BOS、输出按 sentencepiece 还原、使用仓库自带的 kosmos-2/data/dict.txt 词典--image-feature-length 64图像特征占位 token 数量须与模型配置一致--batch-size 1 --buffer-size 10单样本逐条推理配合--required-batch-size-multiple 1保证每张图独立解码--model-overrides {visual_pretrained: , dict_path:data/dict.txt}加载权重时关闭视觉预训练权重、指定词典路径。推理使用torch.distributed.launch --nproc_per_node1单卡启动master_port 由脚本随机生成20000~20999 区间避免多任务并发冲突。输出文件中的H-行hypothesis含完整短语与object定位 token就是后续指标计算的输入。备选路径用官方提供的评测结果直接算分如果只想验证指标计算逻辑、不想重新跑推理官方还提供了已完成的 8 个 split 推理结果文件命名如kosmos2_inst.pt.refcoco.val.locout、kosmos2_inst.pt.refcoco.testB.locout、kosmos2_inst.pt.refcocog.test.locout等下载后直接运行评估脚本即可python evaluation/refcoco/refexp_evaluate.py /path/to/downloaded_results /path/to/finetune_refcoco*.json # example # python evaluation/refcoco/refexp_evaluate.py /tmp/kosmos2_inst.pt.refcoco.val.locout /tmp/mdetr_annotations/finetune_refcoco_val.json其中第二个参数同样是 MDETR 预处理得到的finetune_refcoco*.json标注文件。指标计算原理从 patch index 到 Accuracy评估脚本 evaluation/refcoco/refexp_evaluate.py 实现了RefExpEvaluatorFromTxt类整体流程如下。1. 解析预测文本读取推理输出文件后先按行过滤出H-前缀且序号为数字的行作为有效预测随后对每条预测取/image之后的部分交给 decode_string.py 的decode_bbox_from_caption解码。2. 解码定位 token 为归一化坐标Kosmos-2 生成的框由phrase…/phraseobjectpatch_index_x1patch_index_y1/object这样的结构编码。find_patch_index_combinations用正则提取出每个 phrase 及其对应的 patch index 二元组支持delimiter_of_multi_objects/分隔的多个框然后get_box_coords_from_index完成从网格索引到归一化坐标的换算网格边长P quantized_size默认 32单元尺寸cell_size 1.0 / P由ul_idx % P/ul_idx // P反解出左上角格子的 (x, y)同理求右下角格子当两点落在同一行/列或同一格时框边界取格子边界如x1 ul_x * cell_sizex2 lr_x * cell_size cell_size保证非零面积一般情况对角位置则以格子中心作为框的角点坐标。最终得到[entity_name, x1, y1, x2, y2]列表坐标均为相对于图像宽高的归一化值。3. 还原为像素坐标并与 GT 计算 IoU评估循环refexp_evaluate.py中从 ground truth JSON 读取每张图的caption、height、width以及标注bboxMDETR 格式为[x, y, w, h]先把 GT 框转换为[x1, y1, x2, y2]的 xyxy 格式对预测结果只保留短语文本与 GT caption 完全一致的框p_pred.strip() ! caption.strip()则跳过将归一化坐标乘回原图宽高得到像素坐标若没有找到任何合法预测框则记为空框[[0., 0., 0., 0.]]0 面积框以保证每个样本都能参与计数使用 evaluation/refcoco/box_ops.py 中的box_iou计算预测框与 GT 框的交并比该实现同时返回 IoU 与并集面积另提供generalized_box_iou备用。4. 三种统计口径的 Accuracy脚本以k(1, mean, upper bound)、thresh_iou0.5初始化评估器对每个 split按dataset_name区分 refcoco / refcoco / refcocog分别统计Precision1取第一个预测框与 GT 的 IoU ≥ 0.5 即命中mean对同一短语的所有预测框取均值得到平均框再与 GT 计算 IoU ≥ 0.5 判定upper bound所有预测框中任意一个与 GT 的 IoU ≥ 0.5 即命中反映模型「只要有一个框正确」的上限。统计完成后按各数据集样本数归一化得到形如Dataset: refcoco - Precision 1, mean, all: [...]的输出脚本末尾打印的正是这三个口径的准确率。评测结果与datasets2score/datasets2count的逐样本累加逻辑完全对应因此只要输入的预测文件与标注文件匹配即可复现官方表格中的数字。实践注意事项图像路径必须改写无论是自行转换还是下载官方.locout文件都要保证其中的图像路径在本机真实可读Image.open失败会导致推理中断。量化尺寸保持一致grd-zeroshot-refcoco.sh的$2、--location-bin-size与后续refexp_evaluate.py的--quantized_size默认 32必须一致否则 patch index 解码出的坐标会错位。依赖文件脚本默认从kosmos-2目录下读取data/dict.txt与data/sentencepiece.bpe.model二者均在 kosmos-2/data 目录中运行前需确保cd kosmos-2且这些文件存在。零样本前提评测前请勿用任何 RefCOCO//g 的 val/test 数据对模型做指令微调官方已确认训练语料中剔除了这约 20K 张图像。结果文件组织推理输出与指标结果默认写入模型权重同目录文件名以模型权重名 .eval./.result.拼接多次评测不会互相覆盖。延伸阅读同一零样本评测体系还覆盖了 Flickr30k Entities 上的短语定位Phrase Grounding任务流程与参数几乎一致可参考 evaluation/flickr_entities/README.md 与 evaluation/grd-zeroshot-flickr.shKosmos-2 的完整评测体系指代表达理解、指代表达生成、图像描述、VQA 等与模型整体介绍见 kosmos-2/README.md推理脚本 evaluation/caption_obj_few_shot.py 同时复用于 Flickr 与 RefCOCO 两条评测链路是理解 Kosmos-2 零样本推理输入输出的最佳入口。【免费下载链接】unilmLarge-scale Self-supervised Pre-training Across Tasks, Languages, and Modalities项目地址: https://gitcode.com/GitHub_Trending/un/unilm创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考