ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于 vLLM 的 Qwen3-VL 在 ODinW-13 目标检测基准上的推理与评估实战指南

基于 vLLM 的 Qwen3-VL 在 ODinW-13 目标检测基准上的推理与评估实战指南 人工智能大模型多模态计算机视觉微调模型推理服务模型评测Qwen【免费下载链接】Qwen3-VLQwen3-VL is the multimodal large language model series developed by Qwen team, Alibaba Cloud.项目地址https://gitcode.com/GitHub_Trending/qw/Qwen3-VL点击查看免费下载本文以 Qwen3-VL 仓库Qwen 团队开源的 multimodal large language model 系列中的 evaluation/ODinW-13 评测实现为绝对核心系统讲解如何在 ODinWObject Detection in the Wild13 数据集上借助 vLLM 高速推理引擎完成 Qwen3-VL 的端到端目标检测评测从数据目录与配置准备、instruct / thinking 两类模型的推理参数调优到 COCO 风格 mAP 指标的自动评估与结果解析。读完本文你将能直接运行仓库内的run_odinw.py复现 Qwen3-VL 在 13 个域外检测数据集上的完整评测流水线并理解其底层数据组织、坐标缩放与指标计算原理。一、ODinW-13 评测方案概览ODinWObject Detection in the Wild是一个综合性的目标检测基准由 13 个覆盖不同领域的数据集组成用于检验视觉语言模型在未见过的域外场景下的开放词汇检测能力。本仓库在 evaluation/ODinW-13 目录下提供了完整的评测实现核心特性如下高速推理基于 vLLM 实现带自动 batch 优化统一评测覆盖 13 个风格迥异的检测数据集COCO 风格指标mAP、mAP_50、mAP_75 以及按目标尺寸分层的 mAP_s / mAP_m / mAP_l模块化代码结构数据加载、推理、评估逻辑相互解耦易于维护与扩展。项目结构evaluation/ODinW-13/ ├── run_odinw.py # 主脚本推理与评估入口infer / eval 两个子命令 ├── dataset_utils.py # 数据集加载与预处理工具配置解析、任务生成、smart_resize ├── eval_utils.py # 评估逻辑与 COCO 指标计算 ├── infer_instruct.sh # Instruct 模型推理脚本 ├── infer_think.sh # Thinking 模型推理脚本 ├── eval_instruct.sh # Instruct 模型结果评估脚本 ├── eval_think.sh # Thinking 模型结果评估脚本 ├── requirements.txt # Python 依赖 └── README.md # 使用文档从源码结构看整个流水线的调用链是run_odinw.py的infer子命令调用dataset_utils.generate_odinw_jobs()生成全部推理任务逐条经prepare_inputs_for_vllm()构造输入后交给LLM.generate()批量推理eval子命令则调用eval_utils.compute_metrics()逐数据集计算 COCO 指标并汇总平均值。二、环境依赖与数据准备2.1 Python 依赖pip install -r requirements.txtevaluation/ODinW-13/requirements.txt 中的关键依赖及作用如下依赖用途vllm高速 LLM 推理引擎负责 batch 调度与显存管理transformers加载 Qwen3-VL 的AutoProcessor分词 图像预处理qwen_vl_utilsQwen VL 视觉处理工具提供process_vision_info解析图像/视频输入pycocotoolsCOCO 数据 API 与COCOeval指标计算pandas/numpy数据处理与数值计算Pillow图像处理tabulate结果表格格式化输出可选缺失时降级为纯文本打印flash_attn加速注意力计算推理性能优化torch/torchvision/accelerate深度学习基础环境2.2 ODinW 数据目录结构ODinW 数据需要一个特定的目录结构其中odinw13_config.py是必需的核心配置文件/path/to/odinw_data/ ├── odinw13_config.py # 数据集配置文件必需 ├── AerialMaritimeDrone/ # 各子数据集 │ ├── large/ │ │ ├── train/ │ │ └── test/ │ └── tiled/ ├── Aquarium/ ├── Cottontail Rabbits/ ├── EgoHands/ ├── NorthAmerica Mushrooms/ ├── Packages/ ├── Pascal VOC/ ├── Pistols/ ├── Pothole/ ├── Raccoon/ ├── ShellfishOpenImages/ ├── Thermal Dogs and People/ └── Vehicles OpenImages/重要odinw13_config.py必须包含以下两个顶层变量datasets数据集配置列表dataset_prefixes数据集名称列表。在 dataset_utils.py 的load_odinw_config()中该文件通过runpy.run_path()以 Python 字典形式直接加载并按zip(dataset_names, dataset_configs)建立「数据集名 → 配置字典」的映射每个配置字典需包含metainfo.classes类别列表、data_root、ann_fileCOCO 标注文件路径、data_prefix.img图像根路径等字段这些字段会在任务生成与评估阶段被逐项消费。三、快速开始推理与评估两步走3.1 推理Inference对 instruct 模型直接运行bash infer_instruct.sh脚本内容见 infer_instruct.sh等价于python run_odinw.py infer \ --model-path /path/to/Qwen3-VL-Instruct \ --data-dir /path/to/odinw_data \ --output-file results/odinw_predictions.jsonl \ --tensor-parallel-size 1 \ --gpu-memory-utilization 0.9 \ --max-model-len 128000 \ --max-images-per-prompt 10 \ --max-new-tokens 32768 \ --temperature 0.7 \ --top-p 0.8 \ --top-k 20 \ --repetition-penalty 1.0 \ --presence-penalty 1.5对带扩展推理的 thinking 模型运行bash infer_think.sh3.2 评估Evaluationbash eval_instruct.sh等价命令见 eval_instruct.shpython run_odinw.py eval \ --data-dir /path/to/odinw_data \ --input-file results/odinw_predictions.jsonl \ --output-file results/odinw_eval_results.jsonthinking 模型的结果评估使用 eval_think.sh将输入文件替换为results/odinw_predictions_thinking.jsonl即可。四、命令行参数详解run_odinw.py通过argparse子命令infer/eval组织参数完整定义见 run_odinw.py。4.1 Inference 模式参数基础参数均必填--model-pathQwen3-VL 模型目录路径--data-dir包含odinw13_config.py的 ODinW 数据目录--output-file推理结果保存路径JSONL 格式。vLLM 参数参数默认值说明--tensor-parallel-size自动检测张量并行使用的 GPU 数量不传时在main()中自动设为torch.cuda.device_count()--gpu-memory-utilization0.9GPU 显存利用率取值 0.0–1.0--max-model-len128000模型最大上下文长度--max-images-per-prompt10单条 prompt 中最多容纳的图像数映射为 vLLM 的limit_mm_per_prompt{image: ...}生成参数参数默认值说明--max-new-tokens32768最多生成的 token 数thinking 模型需更大空间输出推理过程--temperature0.7采样温度--top-p0.8nucleus 采样阈值--top-k20top-k 采样--repetition-penalty1.0重复惩罚--presence-penalty1.5存在惩罚用于减少重复内容这些参数在 run_odinw.py 中被整体打包为 vLLM 的SamplingParams传入llm.generate()注意max_new_tokens对应 vLLM 的max_tokens字段。4.2 Evaluation 模式参数基础参数均必填--data-dir包含odinw13_config.py的 ODinW 数据目录--input-file推理结果文件JSONL--output-file评估结果保存路径JSON。五、推理输出与评估输出解析5.1 推理输出两个文件推理完成后会生成两个文件1. 预测文件如odinw_predictions.jsonl每行一个 JSON 对象结构如下{ question_id: 0, annotation: [...], extra_info: { dataset_name: AerialMaritimeDrone_large, img_id: 1, anno_path: /path/to/annotations.json, resized_h: 640, resized_w: 640, img_h: 1080, img_w: 1920, img_path: /path/to/image.jpg }, result: { gen: [{\bbox_2d\: [x1, y1, x2, y2], \label\: \boat\}, ...], gen_raw: Raw model output including thinking process }, messages: [...] }其中result.gen是剥离了思考过程后的最终答案result.gen_raw保留模型原始输出。在 run_odinw.py 中通过str(response).split(/think)[-1].strip()实现若模型输出包含think.../think推理标签只保留最后一个/think之后的纯答案文本。2. 数据集配置文件如odinw_predictions_datasets.json由output-file的.jsonl后缀替换为_datasets.json生成序列化保存每个数据集的metainfo、data_root、ann_file、data_prefix字段供评估阶段复用。5.2 评估输出JSON评估脚本输出一个按数据集聚合的结果 JSON{ AerialMaritimeDrone_large: { mAP: 0.456, mAP_50: 0.678, mAP_75: 0.512, mAP_s: 0.234, mAP_m: 0.456, mAP_l: 0.567 }, Aquarium_Aquarium Combined.v2-raw-1024.coco: { ... }, ... Average: 0.423 }指标含义mAPIoU 阈值 0.5:0.95 上的平均精度均值主指标mAP_50IoU 阈值为 0.5 时的 mAPmAP_75IoU 阈值为 0.75 时的 mAPmAP_s小目标 mAP面积 32²mAP_m中目标 mAP32² ≤ 面积 96²mAP_l大目标 mAP面积 96²。指标计算的实现细节在 eval_utils.py 的compute_metrics()中将预测框从 xyxy 转 xywhxyxy2xywh写入 COCO 格式 JSON 后调用COCOeval通过proposal_nums (100, 300, 1000)、iouThrs np.linspace(.5, 0.95, 10)配置评估参数最后按coco_metric_names索引表从coco_eval.stats中提取 6 项指标。评估后若安装了tabulate控制台会以fancy_outline风格打印 13 个数据集 × 6 项指标的汇总表未安装时自动降级为逐行打印。六、模型专用配置Instruct 与 Thinking6.1 Instruct 模型如 Qwen3-VL-2B-Instruct、Qwen3-VL-7B-Instruct使用标准参数以获得均衡性能--max-new-tokens 32768 --temperature 0.7 --top-p 0.8 --top-k 20 --repetition-penalty 1.0 --presence-penalty 1.56.2 Thinking 模型如 Qwen3-VL-2B-Thinking使用调整后的参数以支持更深度的推理--max-new-tokens 32768 --temperature 0.6 --top-p 0.95 --top-k 20 --repetition-penalty 1.0 --presence-penalty 0.0注意thinking 模型会在输出中生成think.../think标签包裹的推理过程评估流程会自动提取/think之后的最终答案见上文 5.1 节的split(/think)逻辑因此presence-penalty从 instruct 配置的 1.5 降至 0.0以避免干扰长推理输出的连贯性。七、性能调优建议7.1 GPU 显存根据 GPU 情况调整--gpu-memory-utilization0.9大多数场景推荐0.95追求最大吞吐可能触发 OOM0.7–0.8遇到 OOM 错误时降低。7.2 Batch SizevLLM 会根据可用显存自动优化 batch 大小无需手动指定。7.3 张量并行大模型使用--tensor-parallel-size分配多卡2B 模型推荐 1 张 GPU7B 模型1–2 张 GPU14B 模型2–4 张 GPU。未显式指定时main()会自动将其设置为当前机器可见的 GPU 总数run_odinw.py多卡用户请务必确认该自动值是否符合模型大小。7.4 上下文长度显存受限时调低--max-model-len128000默认值多数场景表现良好64000约减少 40% 显存占用。7.5 图像处理smart_resize实现使用smart_resize自动调整图像尺寸约束条件如下见 dataset_utils.py宽高均可被因子整除推理时factor32即最终尺寸为 32 的倍数总像素数限制在[min_pixels, max_pixels]区间内最长边不超过max_long_side保持宽高比不变。任务生成时min_pixels与max_pixels由视觉编码器的 token 开销计算得出patch_size16、merge_base2故pixels_per_token 16*16*2*2 1024对应min_pixels 1024*768、max_pixels 1024*12800dataset_utils.py同时为每个图像输入显式附加min_pixels/max_pixels字段dataset_utils.py中的 messages 构造这与qwen_vl_utils的视觉 token 预算机制一致。八、常见问题排查1. 配置文件未找到FileNotFoundError: Config file not found: /path/to/odinw13_config.py解决确保odinw13_config.py存在于--data-dir指定的目录中该检查位于 dataset_utils.py 的generate_odinw_jobs()开头。2. CUDA 显存溢出OOM# 降低显存利用率 --gpu-memory-utilization 0.7 # 或缩短上下文长度 --max-model-len 640003. vLLM 多进程问题代码已在导入阶段自动设置VLLM_WORKER_MULTIPROC_METHODspawnrun_odinw.py。若仍遇到问题可显式执行export VLLM_WORKER_MULTIPROC_METHODspawn4. JSON 输出为空或非法检查模型输出格式核对 prompt 清晰度尝试调整 temperature / top_p。5. mAP 分数偏低核对类别名与数据集类目一致评估时会先将类别名小写化并与metainfo.classes比对不匹配的直接跳过见 run_odinw.py检查坐标格式xyxy vs xywh确保模型按 JSON 格式正确输出。6. COCO API 报错IndexError: The testing results of the whole dataset is empty.解决说明没有生成任何有效预测请检查模型输出该分支在 eval_utils.py 中被捕获并中断评估。九、高级用法9.1 自定义图像分辨率编辑 dataset_utils.py 中的分辨率计算参数# 计算图像分辨率参数 patch_size 16 merge_base 2 pixels_per_token patch_size * patch_size * merge_base * merge_base min_pixels pixels_per_token * 768 max_pixels pixels_per_token * 128009.2 筛选子数据集如需只评估部分数据集编辑 dataset_utils.py 中的generate_odinw_jobs()# 只处理特定数据集 dataset_filter [AerialMaritimeDrone, Aquarium] for data_name, data_config in datasets.items(): if data_name not in dataset_filter: continue # ... 其余代码9.3 自定义 prompt编辑 dataset_utils.py 中的 prompt 模板# 默认 prompt prompt fLocate every instance that belongs to the following categories: {obj_names}. Report bbox coordinates in JSON format. # 自定义 prompt 示例 prompt fFind all {obj_names} objects in the image and output their bounding boxes as JSON.修改 prompt 后务必同步检查推理输出result.gen中的 JSON 结构是否符合[{bbox_2d: [x1, y1, x2, y2], label: ...}]约定因为评估阶段用ast.literal_eval解析该字段run_odinw.py解析失败会按空预测处理直接拉低指标。9.4 坐标还原机制理解评估的关键推理模型输出的bbox_2d坐标基于缩放后的图像resized_h/resized_w或归一化千分比取决于is_rel环境变量。评估阶段在 run_odinw.py 中按以下规则还原到原图坐标if os.getenv(is_rel, 0) 1: pred_bboxes np.array(pred_bboxes).reshape(-1, 4) / 1000 * np.array([img_w, img_h, img_w, img_h]) else: if len(pred_bboxes) 0: pred_bboxes np.array(pred_bboxes).reshape(-1, 4) / np.array([resized_w, resized_h, resized_w, resized_h]) * np.array([img_w, img_h, img_w, img_h]) else: pred_bboxes np.array(pred_bboxes).reshape(-1, 4)默认is_rel0下按「缩放坐标 ÷ 缩放尺寸 × 原图尺寸」线性放大所有预测的置信度分数在评估时被统一置为 1.0源码中scores np.array([1.0] * len(bboxes))。十、引用与许可如使用本评测代码或 ODinW 基准请引用 ODinW 所属的 Grounded Language-Image Pre-training 工作LLM 生成式检测基准的原始出处inproceedings{li2022grounded, title{Grounded language-image pre-training}, author{Li, Liunian Harold and Zhang, Pengchuan and Zhang, Haotian and Yang, Jianwei and Li, Chunyuan and Zhong, Yiwu and Wang, Lijuan and Yuan, Lu and Zhang, Lei and Hwang, Jenq-Neng and others}, booktitle{Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition}, pages{10965--10975}, year{2022} }本评测代码遵循与 Qwen3-VL 模型相同的开源许可协议。仓库根目录还提供 2d_grounding.ipynb 与 3d_grounding.ipynb 等 cookbook可作为 ODinW 之外理解 Qwen3-VL 接地能力的补充参考数据预处理与视觉 token 机制可进一步查看 qwen_vl_utils 的process_vision_info实现。若遇到问题可参考仓库各文件的内联注释与 docstring。赞分享人工智能大模型多模态计算机视觉微调模型推理服务模型评测Qwen【免费下载链接】Qwen3-VLQwen3-VL is the multimodal large language model series developed by Qwen team, Alibaba Cloud.项目地址https://gitcode.com/GitHub_Trending/qw/Qwen3-VL点击查看免费下载相关推荐对方撤回的消息你这边还能看见RevokeMsgPatcher 微信/QQ 防撤回补丁实用手册对方撤回的消息你这边还能看见RevokeMsgPatcher 微信/QQ 防撤回补丁实用手册 对方撤回了一条消息你只看到对方撤回了一条消息内容无从知桌面应用即时通讯基于 MMDetection 在 Cityscapes 数据集上训练与评估目标检测、实例分割模型实战指南基于 MMDetection 在 Cityscapes 数据集上训练与评估目标检测、实例分割模型实战指南 Cityscapes 是面向城市场景理解的经典街景数据人工智能计算机视觉深度学习模型评测SGLang 实战基于 HellaSWAG 基准的 few-shot 推理与批量评测指南SGLang 实战基于 HellaSWAG 基准的 few shot 推理与批量评测指南 本指南以 SGLang 仓库中的 HellaSWAG 评测脚本 ht模型推理服务推理引擎人工智能大模型本地部署多模态上一篇Clippy项目维护指南如何为开源Flash项目贡献代码下一篇终极指南multipleWindow3dScene WindowManager类API详解——实现跨窗口3D场景同步的核心引擎创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表