LocateAnything:把视觉定位从逐 Token 生成变成“整框并行解码”
文章资料: 「LocateAnything 开源论文项目」 链接:https://pan.quark.cn/s/372f8614067a
LocateAnything:把视觉定位从逐 Token 生成变成“整框并行解码”
本文结合论文《LocateAnything: Fast and High-Quality Vision-Language Grounding with Parallel Box Decoding》、官方开源结果,以及一次 RTX 3090 本地实测,介绍这个模型解决了什么问题、为什么更快,以及普通消费级显卡上的真实运行表现。
一、它解决的不是“看懂图片”,而是“指出目标在哪里”
通用视觉语言模型擅长回答“图片里有什么”,但机器人操作、GUI 自动化、文档解析和开放词汇检测通常还需要一个更严格的答案:目标究竟位于哪个框、哪个点。
LocateAnything 是 NVIDIA Eagle 模型家族中的通用视觉定位模型。它接收图片和自然语言查询,输出归一化到
[0, 1000]的边界框或点坐标,覆盖以下任务:
- 开放词汇目标检测与密集检测;
- 单目标和多目标短语定位;
- GUI 元素框定位与点定位;
- OCR 文本区域与文档布局定位;
- 面向机器人和具身智能的指点式定位。
例如,输入“the large green bus at the bottom center”,模型会生成:
<ref>the large green bus at the bottom center</ref> <box><621><694><767><988></box>这里的四个数分别表示
(x1, y1, x2, y2)。将它们除以 1000,再乘以图像宽高,就能得到像素坐标。二、传统生成式定位为什么慢
许多 VLM 把二维边界框序列化为一维 Token:先生成
x1,再依次生成y1、x2、y2。如果坐标采用文本数字,还可能把一个数继续拆成多个字符 Token。这样做虽然可以复用语言模型的生成接口,却有两个问题:
- 一个框的四个坐标具有强耦合关系,拆开学习不符合几何结构。
- 每个坐标都依赖前一步生成,目标越密集,串行解码延迟越明显。
普通 Multi-Token Prediction(MTP)也不能直接解决问题。它通常按照固定长度切分任意 Token 流,分块边界可能穿过框、类别或结构标记,产生不连贯的条件分布。
LocateAnything 的关键改动是 Parallel Box Decoding(PBD):不再把框看成四个独立坐标,而是把完整边界框或点作为一个原子几何单元并行预测。论文将每个输出块固定为长度 6,完整框由
<box>、四个坐标和</box>组成;不足的位置用<null>补齐。三、PBD 如何兼顾速度与结构
模型由 Moon-ViT 视觉编码器、MLP 投影层和 Qwen2.5 语言解码器组成。视觉编码器保留原生分辨率下的空间细节,语言模型输出四种固定结构块:
- Semantic Block:描述目标语义;
- Box Block:包含四个量化坐标;
- Negative Block:表示目标不存在;
- End Block:表示生成结束。
训练阶段同时保留两条目标表示:标准 NTP 序列用于维持因果推理能力,块式 MTP 序列用于学习整框并行预测。两条序列共享图片和查询上下文,但通过注意力掩码隔离,最终联合优化 NTP loss 与 block loss。
这种设计并不是简单地“多猜几个 Token”,而是让并行边界与视觉结构边界对齐。论文在 COCO 上的消融实验显示:
解码模式 吞吐量(BPS) Mean F1 特点 Slow / NTP 3.9 52.1 精度优先,逐 Token 解码 Fast / MTP 16.9 49.6 吞吐最高,复杂场景精度有所下降 Hybrid 13.2 51.6 保留大部分速度,同时接近 Slow 精度 这些数字来自论文消融设置,并不等同于最终发布模型主表中的 12.7 BPS。
四、Hybrid 模式:只修复有问题的块
纯并行解码可能遇到两类不可靠输出:一类是类别边界附近的格式异常,另一类是密集目标之间的空间歧义。Hybrid 模式默认采用快速 MTP;检测到异常块后,丢弃该块并回退到最后一个已验证前缀,仅对问题区域执行 NTP 重解码,然后重新切回并行模式。
这比整段退回自回归更克制:正常框继续享受并行收益,只有局部异常承担额外延迟。本次本机测试的统计信息中
switch_to_ar=0,说明该样本没有触发 NTP 回退。五、数据中心策略:规模之外,更重要的是任务覆盖
LocateAnything-Data 包含约 1200 万张独立图像、超过 1.38 亿条语言查询和 7.85 亿个框。数据覆盖并不平均,而是围绕定位能力进行组合:
任务 查询占比 通用目标检测 66.9% GUI 元素定位 16.5% 指代表达理解 7.3% OCR 文本定位 3.6% 文档与场景布局 3.5% 点定位 2.2% 训练流程先进行世界知识对齐,再进行两阶段监督微调。第二阶段提高多目标图片的比例,重点补强拥挤场景和密集检测。这解释了模型为什么既能处理自由文本查询,又能在 VisDrone、Dense200 等密集场景中保持较好的实例分离能力。
六、论文中的主要结果
论文主结果在单张 NVIDIA H100、batch size 1、默认 Hybrid 模式下报告。BPS 表示每秒解码的边界框数量,不是每秒图片数。
指标 LocateAnything-3B 对照结果 解码吞吐 12.7 BPS Qwen3-VL-4B 为 1.1,Rex-Omni-3B 为 5.0 LVIS Mean F1 50.7 Rex-Omni-3B 为 46.9 COCO Mean F1 54.7 Rex-Omni-3B 为 52.9 Dense200 Mean F1 58.7 Rex-Omni-3B 为 58.3 VisDrone Mean F1 39.9 Rex-Omni-3B 为 35.8 DocLayNet Mean F1 76.8 Rex-Omni-3B 为 70.7 M6Doc Mean F1 70.1 Rex-Omni-3B 为 55.6 ScreenSpot-Pro 平均分 60.3 GUI-Owl-32B 为 58.0 HumanRef F1@0.95 68.8 Rex-Omni-3B 为 65.4
这些结果的价值不只是平均分更高。LVIS 的 F1@0.95 从 Rex-Omni 的 20.7 提升到 31.1,说明整框结构监督对高 IoU 精确定位尤其有帮助。论文还报告 LocateAnything-3B 在七个 point-based benchmark 上均取得表中最佳结果。
七、RTX 3090 本地实测
7.1 环境与输入
本次测试不是论文 benchmark,而是验证模型在普通工作站上的可运行性与单请求时延。
项目 配置 GPU NVIDIA GeForce RTX 3090 24GB,物理 GPU 1 Python 3.11.15,由 uv 管理 PyTorch 2.12.0+cu130 精度 BF16 注意力实现 PyTorch SDPA 模型 本地 LocateAnything-3B,约 7.3GB 生成模式 Hybrid 原始测试图为
1920 x 1001,图中蓝色 person 标注是官方素材自带内容,并非本次模型输出。进入模型前,图片被等比例缩放至1024 x 534。
原始输入 本次输出 本次查询仅要求定位“画面底部中间的大型绿色公交车”。右图中的红框和红色标签由本地可视化脚本根据模型输出绘制,蓝色 person 框来自原始图片。
7.2 输出坐标
模型原始回答:
<ref>the large green bus at the bottom center</ref> <box><621><694><767><988></box><|im_end|>坐标转换结果:
坐标空间 (x1, y1, x2, y2) 归一化坐标 (621, 694, 767, 988) 推理图像素坐标 (635.90, 370.60, 785.41, 527.59) 映射回原图约值 (1192, 695, 1473, 989) 完整原始数据见 data/local_bus_result.json。
7.3 时间拆解
阶段 时间 模型加载 2.1793 秒 单次推理总耗时 0.7305 秒 模型内部生成 0.7161 秒 Prefill 0.6396 秒 Prefill 后解码 约 0.0765 秒 生成速度 23.7391 tokens/s 本次输出框数 1 模型统计 BPS 1.3964 一次性 CLI 命令还包含 Python 启动、依赖导入和 CUDA 初始化,墙钟时间约 5.8 秒。真正适合业务评估的是模型常驻后的 0.7305 秒,而不是每次重新启动进程的总时间。
这个样本只有一个框,绝大多数时间消耗在视觉 Prefill,因此不能用 1.3964 BPS 去反驳或验证论文的 12.7 BPS。论文数字来自 H100、COCO、batch size 1,并衡量密集框解码吞吐;本次数字来自 RTX 3090 的单图单框请求,硬件、图片和工作负载都不同。
7.4 显存边界
模型加载后约占用 7.23GB 显存。
1024 x 534输入的实测峰值约 8.51GB,可以稳定运行。另一次使用2048 x 1206图片、同样走 SDPA 时出现 OOM:视觉注意力还需申请约 10.11GB,而进程当时总占用已接近 19GB。这表明 RTX 3090 部署的关键限制并不是 3B 权重,而是原生分辨率视觉注意力的二次方内存增长。当前可视化脚本默认把最长边限制为 1024;在没有 FlashAttention/MagiAttention 的 Ampere 环境中,这是比直接输入 2K 图片更稳妥的默认值。
八、如何复现实测
在本文所在目录执行:
cd .. CUDA_VISIBLE_DEVICES=1 \ TOKENIZERS_PARALLELISM=false \ uv run --no-sync python visualize_locateanything.py \ --image ./assets/images/Smart_City.png \ --query "the large green bus at the bottom center" \ --task ground-single \ --max-size 1024 \ --max-new-tokens 128脚本会在
results/locateanything/中保存带框 PNG 和对应 JSON。uv run --no-sync会直接使用项目的.venv,不需要先执行source .venv/bin/activate。九、结论与边界
LocateAnything 的核心价值是让输出结构决定解码结构:边界框本来就是一个耦合几何单元,就应当作为一个原子块训练和预测。PBD 提升了密集框生成的并行度,Hybrid 模式又为格式异常和空间歧义保留了局部自回归修复能力;大规模、多任务的 LocateAnything-Data 则补足了开放世界、GUI、OCR、布局和点定位的泛化覆盖。
本机实验确认 LocateAnything-3B 可以在 24GB RTX 3090 上以 BF16+SDPA 运行,模型常驻后的单图单目标定位约为 0.73 秒。但这只是一次功能与延迟验证,不代表标准数据集精度,也不能替代 H100 上的 BPS benchmark。面向实际系统时,应进一步使用无预标注图片建立测试集,分别统计准确率、P50/P95 时延、不同分辨率显存和多目标吞吐。
此外,仓库代码采用 Apache-2.0,但模型使用 NVIDIA License,仅允许非商业研究或评估用途。商业部署前必须单独确认模型授权。
参考资料
- Shihao Wang et al. LocateAnything: Fast and High-Quality Vision-Language Grounding with Parallel Box Decoding, 2026.
- NVIDIA Research. LocateAnything 项目主页.
- NVlabs. Eagle / Embodied 源代码.
- NVIDIA. LocateAnything-3B 模型仓库.
本文中的方法图、数据图和论文结果图来自 LocateAnything 官方仓库;本地输入、标注结果和 JSON 数据已随本文目录一并整理,Markdown 中所有本地资源均使用相对路径。LocateAnything:把视觉定位从逐 Token 生成变成“整框并行解码”
本文结合论文《LocateAnything: Fast and High-Quality Vision-Language Grounding with Parallel Box Decoding》、官方开源结果,以及一次 RTX 3090 本地实测,介绍这个模型解决了什么问题、为什么更快,以及普通消费级显卡上的真实运行表现。一、它解决的不是“看懂图片”,而是“指出目标在哪里”
通用视觉语言模型擅长回答“图片里有什么”,但机器人操作、GUI 自动化、文档解析和开放词汇检测通常还需要一个更严格的答案:目标究竟位于哪个框、哪个点。
LocateAnything 是 NVIDIA Eagle 模型家族中的通用视觉定位模型。它接收图片和自然语言查询,输出归一化到
[0, 1000]的边界框或点坐标,覆盖以下任务:
- 开放词汇目标检测与密集检测;
- 单目标和多目标短语定位;
- GUI 元素框定位与点定位;
- OCR 文本区域与文档布局定位;
- 面向机器人和具身智能的指点式定位。
例如,输入“the large green bus at the bottom center”,模型会生成:
<ref>the large green bus at the bottom center</ref> <box><621><694><767><988></box>这里的四个数分别表示
(x1, y1, x2, y2)。将它们除以 1000,再乘以图像宽高,就能得到像素坐标。二、传统生成式定位为什么慢
许多 VLM 把二维边界框序列化为一维 Token:先生成
x1,再依次生成y1、x2、y2。如果坐标采用文本数字,还可能把一个数继续拆成多个字符 Token。这样做虽然可以复用语言模型的生成接口,却有两个问题:
- 一个框的四个坐标具有强耦合关系,拆开学习不符合几何结构。
- 每个坐标都依赖前一步生成,目标越密集,串行解码延迟越明显。
普通 Multi-Token Prediction(MTP)也不能直接解决问题。它通常按照固定长度切分任意 Token 流,分块边界可能穿过框、类别或结构标记,产生不连贯的条件分布。
LocateAnything 的关键改动是 Parallel Box Decoding(PBD):不再把框看成四个独立坐标,而是把完整边界框或点作为一个原子几何单元并行预测。论文将每个输出块固定为长度 6,完整框由
<box>、四个坐标和</box>组成;不足的位置用<null>补齐。三、PBD 如何兼顾速度与结构
模型由 Moon-ViT 视觉编码器、MLP 投影层和 Qwen2.5 语言解码器组成。视觉编码器保留原生分辨率下的空间细节,语言模型输出四种固定结构块:
- Semantic Block:描述目标语义;
- Box Block:包含四个量化坐标;
- Negative Block:表示目标不存在;
- End Block:表示生成结束。
训练阶段同时保留两条目标表示:标准 NTP 序列用于维持因果推理能力,块式 MTP 序列用于学习整框并行预测。两条序列共享图片和查询上下文,但通过注意力掩码隔离,最终联合优化 NTP loss 与 block loss。
这种设计并不是简单地“多猜几个 Token”,而是让并行边界与视觉结构边界对齐。论文在 COCO 上的消融实验显示:
解码模式 吞吐量(BPS) Mean F1 特点 Slow / NTP 3.9 52.1 精度优先,逐 Token 解码 Fast / MTP 16.9 49.6 吞吐最高,复杂场景精度有所下降 Hybrid 13.2 51.6 保留大部分速度,同时接近 Slow 精度 这些数字来自论文消融设置,并不等同于最终发布模型主表中的 12.7 BPS。
四、Hybrid 模式:只修复有问题的块
纯并行解码可能遇到两类不可靠输出:一类是类别边界附近的格式异常,另一类是密集目标之间的空间歧义。Hybrid 模式默认采用快速 MTP;检测到异常块后,丢弃该块并回退到最后一个已验证前缀,仅对问题区域执行 NTP 重解码,然后重新切回并行模式。
这比整段退回自回归更克制:正常框继续享受并行收益,只有局部异常承担额外延迟。本次本机测试的统计信息中
switch_to_ar=0,说明该样本没有触发 NTP 回退。五、数据中心策略:规模之外,更重要的是任务覆盖
LocateAnything-Data 包含约 1200 万张独立图像、超过 1.38 亿条语言查询和 7.85 亿个框。数据覆盖并不平均,而是围绕定位能力进行组合:
任务 查询占比 通用目标检测 66.9% GUI 元素定位 16.5% 指代表达理解 7.3% OCR 文本定位 3.6% 文档与场景布局 3.5% 点定位 2.2% 训练流程先进行世界知识对齐,再进行两阶段监督微调。第二阶段提高多目标图片的比例,重点补强拥挤场景和密集检测。这解释了模型为什么既能处理自由文本查询,又能在 VisDrone、Dense200 等密集场景中保持较好的实例分离能力。
六、论文中的主要结果
论文主结果在单张 NVIDIA H100、batch size 1、默认 Hybrid 模式下报告。BPS 表示每秒解码的边界框数量,不是每秒图片数。
指标 LocateAnything-3B 对照结果 解码吞吐 12.7 BPS Qwen3-VL-4B 为 1.1,Rex-Omni-3B 为 5.0 LVIS Mean F1 50.7 Rex-Omni-3B 为 46.9 COCO Mean F1 54.7 Rex-Omni-3B 为 52.9 Dense200 Mean F1 58.7 Rex-Omni-3B 为 58.3 VisDrone Mean F1 39.9 Rex-Omni-3B 为 35.8 DocLayNet Mean F1 76.8 Rex-Omni-3B 为 70.7 M6Doc Mean F1 70.1 Rex-Omni-3B 为 55.6 ScreenSpot-Pro 平均分 60.3 GUI-Owl-32B 为 58.0 HumanRef F1@0.95 68.8 Rex-Omni-3B 为 65.4 这些结果的价值不只是平均分更高。LVIS 的 F1@0.95 从 Rex-Omni 的 20.7 提升到 31.1,说明整框结构监督对高 IoU 精确定位尤其有帮助。论文还报告 LocateAnything-3B 在七个 point-based benchmark 上均取得表中最佳结果。
七、RTX 3090 本地实测
7.1 环境与输入
本次测试不是论文 benchmark,而是验证模型在普通工作站上的可运行性与单请求时延。
项目 配置 GPU NVIDIA GeForce RTX 3090 24GB,物理 GPU 1 Python 3.11.15,由 uv 管理 PyTorch 2.12.0+cu130 精度 BF16 注意力实现 PyTorch SDPA 模型 本地 LocateAnything-3B,约 7.3GB 生成模式 Hybrid 原始测试图为
1920 x 1001,图中蓝色 person 标注是官方素材自带内容,并非本次模型输出。进入模型前,图片被等比例缩放至1024 x 534。
原始输入 本次输出
原始输入 本次输出
原始输入 本次输出 本次查询仅要求定位“画面底部中间的大型绿色公交车”。右图中的红框和红色标签由本地可视化脚本根据模型输出绘制,蓝色 person 框来自原始图片。
7.2 输出坐标
模型原始回答:
<ref>the large green bus at the bottom center</ref> <box><621><694><767><988></box><|im_end|>坐标转换结果:
ata-draft-node="block" data
-draft-type="table"data-size="normal" data-row-style="normal">
坐标空间 (x1, y1, x2, y2) 归一化坐标 (621, 694, 767, 988) 推理图像素坐标 (635.90, 370.60, 785.41, 527.59) 映射回原图约值 (1192, 695, 1473, 989)
完整原始数据见 data/local_bus_result.json。
7.3 时间拆解
阶段 时间 模型加载 2.1793 秒 单次推理总耗时 0.7305 秒 模型内部生成 0.7161 秒 Prefill 0.6396 秒 Prefill 后解码 约 0.0765 秒 生成速度 23.7391 tokens/s 本次输出框数 1 模型统计 BPS 1.3964
一次性 CLI 命令还包含 Python 启动、依赖导入和 CUDA 初始化,墙钟时间约 5.8 秒。真正适合业务评估的是模型常驻后的 0.7305 秒,而不是每次重新启动进程的总时间。
这个样本只有一个框,绝大多数时间消耗在视觉 Prefill,因此不能用 1.3964 BPS 去反驳或验证论文的 12.7 BPS。论文数字来自 H100、COCO、batch size 1,并衡量密集框解码吞吐;本次数字来自 RTX 3090 的单图单框请求,硬件、图片和工作负载都不同。
7.4 显存边界
模型加载后约占用 7.23GB 显存。1024 x 534 输入的实测峰值约 8.51GB,可以稳定运行。另一次使用 2048 x 1206 图片、同样走 SDPA 时出现 OOM:视觉注意力还需申请约 10.11GB,而进程当时总占用已接近 19GB。
这表明 RTX 3090 部署的关键限制并不是 3B 权重,而是原生分辨率视觉注意力的二次方内存增长。当前可视化脚本默认把最长边限制为 1024;在没有 FlashAttention/MagiAttention 的 Ampere 环境中,这是比直接输入 2K 图片更稳妥的默认值。
八、如何复现实测
在本文所在目录执行:cd .. CUDA_VISIBLE_DEVICES=1 \ TOKENIZERS_PARALLELISM=false \ uv run --no-sync python visualize_locateanything.py \ --image ./assets/images/Smart_City.png \ --query "the large green bus at the bottom center" \ --task ground-single \ --max-size 1024 \ --max-new-tokens 128
脚本会在 results/locateanything/ 中保存带框 PNG 和对应 JSON。uv run --no-sync 会直接使用项目的 .venv,不需要先执行 source .venv/bin/activate。
九、结论与边界
LocateAnything 的核心价值是让输出结构决定解码结构:边界框本来就是一个耦合几何单元,就应当作为一个原子块训练和预测。PBD 提升了密集框生成的并行度,Hybrid 模式又为格式异常和空间歧义保留了局部自回归修复能力;大规模、多任务的 LocateAnything-Data 则补足了开放世界、GUI、OCR、布局和点定位的泛化覆盖。
本机实验确认 LocateAnything-3B 可以在 24GB RTX 3090 上以 BF16+SDPA 运行,模型常驻后的单图单目标定位约为 0.73 秒。但这只是一次功能与延迟验证,不代表标准数据集精度,也不能替代 H100 上的 BPS benchmark。面向实际系统时,应进一步使用无预标注图片建立测试集,分别统计准确率、P50/P95 时延、不同分辨率显存和多目标吞吐。
此外,仓库代码采用 Apache-2.0,但模型使用 NVIDIA License,仅允许非商业研究或评估用途。商业部署前必须单独确认模型授权。
参考资料
Shihao Wang et al. LocateAnything: Fast and High-Quality Vision-Language Grounding with Parallel Box Decoding, 2026.NVIDIA Research. LocateAnything 项目主页.NVlabs. Eagle / Embodied 源代码.NVIDIA. LocateAnything-3B 模型仓库.
本文中的方法图、数据图和论文结果图来自 LocateAnything 官方仓库;本地输入、标注结果和 JSON 数据已随本文目录一并整理,Markdown 中所有本地资源均使用相对路径。