LocateAnything: 把 bbox 当原子单元一次性并行输出

LocateAnything 总览
Fig. 1 — 上半: LocateAnything 在统一 VLM 下支持多任务定位 (multi-obj 检测、refer、UI grounding、layout grounding、detection、OCR)。下半: 三种 decoding 范式对比 — Textual Digit Decoding 把 "647" 当作字符串 "6", "4", "7" 一位位预测;Quantized Coordinate Decoding 用量化的整体 token (`<647>`) 但仍按 $(x_1, y_1, x_2, y_2)$ 顺序逐 token 出;Parallel Box Decoding (本文) 把整个 box 当一个 atomic block 一次 forward 全部预测。

1. 出发点 (Motivation)

主流 VLM 做 detection / grounding 走 next-token prediction (NTP) 路线:把 bbox 序列化成 token 流让 LM 一个个生成。两类常见编码:

两者共同病灶:2D 几何对象被强行 1D 化\(x_1, y_1, x_2, y_2\) 这 4 个数有强结构耦合 (必须 \(x_1 \lt x_2\)、必须围住同一物体),但模型逐 token 出时每一步独立决策,只能靠预训练分布慢慢学这个耦合。结果:精度受损 + 吞吐被卡 (每个 box 串行 6 步)。

直观的"修法" — Multi-Token Prediction (MTP): 一次预测多个 token。但通用 MTP (随机选 span、随机 mask) 与 bbox 的耦合结构对不齐:

举例 (Fig 2 in paper): 训练 MTP 时,如果随机 chunk 把跨 box 的 token 划进同一 chunk (比如 </box> <box> <122> 跨两个 bbox), 模型被迫学"跨 bbox 边界的 token 协同分布",这是一种虚假相关——真实任务里没有"上一个 box 的 </box> 决定下一个 box 的 x1"这种关联。MTP 学得越好,虚假关联越强,反而伤精度。

LocateAnything 的主张: MTP 必须按结构对齐。一个 bbox 就是一个 atomic unit,长度 L=6 (<box> + 4 坐标 + </box>),一次性并行预测,不许跨 box chunk。这就是 Parallel Box Decoding (PBD)

2. 方法 (Method)

2.1 Block-Based 输出格式

bbox 不再是 6-token 流,而是一个定长 L=6 的 block。整个生成过程变成一串 block 序列 \(\mathcal{B} = (b_1, b_2, \ldots, b_N)\)。每个 block 是4 类之一:

Fig 3: 架构 + 4 类 block
Fig. 3 — LocateAnything 架构 (Moon-ViT vision encoder + Qwen2.5 language decoder + MLP projector) + 4 类 atomic block: Semantic Block (语义/类别名,长查询占多个 block); Box Block (`` + 4 量化坐标 + ``); Negative Block (查询的物体不存在); End Block (生成终止)。 所有 block 长度统一 L=6,不足的位用 `` 占位——保证 tensor shape 整齐,便于并行 decode。

联合分布:

\[P(\mathcal{B} \mid Z, \mathcal{E}) = \prod_{i=1}^N P(b_i \mid b_{\lt i}, Z, \mathcal{E})\]

—— 翻译: 当前 block $b_i$ 条件依赖前面所有 block + 视觉 token $Z$ + 文本 query $\mathcal{E}$。**block 间 causal**(下一 block 看前面所有),**block 内 6 个 token 并行**。

2.2 训练: 同一 GT 双格式 + 两条流互不串话

直接训 MTP (一次性预测整个 block) 风险:破坏模型原本的因果 (NTP) 推理能力——因为预训练 LLM 是 NTP 的,直接换 objective 会 catastrophic forget。

解法:同一 GT 同时塞两种格式,构造一根超长拼接序列:

\[x_{\text{all}} = x_{\text{vis}} \oplus x_q \oplus x_{\text{ntp}} \oplus x_{\text{blk}}\]

Attention mask 的关键设计 (这是 paper 最巧妙的部分):

  1. NTP stream 看 shared context + 自身 (causal), 看不到 MTP block (防止 NTP 从 MTP 偷答案)
  2. MTP stream 看 shared context + 自身 block-causal, 看不到 NTP (防止反向)
  3. MTP block 内部 bidirectional (4 个坐标互相看,让模型捕捉几何耦合)
  4. MTP block 之间 causal (后面 block 看前面已生成 block, 防止重复或漏标)

总 loss: \(\mathcal{L} = \mathcal{L}_{\text{ntp}} + \mathcal{L}_{\text{mtp}}\)

注意: 推理时这个 mask 一致 — KV cache 兼容标准 causal,只是当前 block 内部 bidirectional + future masked。

2.3 推理: Fast / Slow / Hybrid 三模式

PBD 并不是免费午餐,有两类失败模式:

Fig 5: NTP 回退机制
Fig. 5 — 两种 MTP 失败模式: Format Irregularity (block 内部结构错乱,如 `<211><911><887>` 把 `` 插进了 box 里) 和 Spatial Ambiguity (密集物体下,MTP 预测的坐标处在两个物体中间,IoU 低)。Hybrid mode: 监测 (1) top-1 坐标 token prob < 0.7,或 (2) top-5 坐标 max-min 差 > 80 (在 0-1000 归一化空间) → 触发回退,丢弃该 block,改用 NTP 串行重 decode 这一个 block,完成后切回 MTP。

三模式权衡:

Mode 机制 用途
Slow 纯 NTP 串行 离线高精度标注、最终评测
Fast 纯 MTP block 并行 端侧机器人 / embodied agent (latency 紧)
Hybrid 默认 MTP,异常时回退 NTP 生产 — 保留大部分加速 + 不会崩

2.4 LocateAnything-Data: 138M queries 多任务大数据

Fig 6: LocateAnything-Data 组成
Fig. 6 — 12M unique image,138M queries,785M bbox。任务分布: Detection 66.9% (Object365 / OpenImages / V3Det 等),UI grounding 16.5% (OSAtlas / GroundCUA / ScaleCUA),Referring 7.3% (RefCOCO 系列 + Flickr30kEntities),OCR 3.6%,Layout 3.5%,Pointing 2.2% (PixmoPoints)。**单一统一格式喂模型同时学这 6 个任务**。

数据引擎:138M 不是人工标的,是专家模型级联自动合成 + 验证(论文 §B,这是 §2.4 之前缺的关键细节)。

(1) 整合开源 + 清洗 + 负样本(§B.1):先收集 6 域开源检测/grounding 数据做统一格式清洗归一化。两个值得注意的处理:

(2) 多目标 grounding 数据引擎(§B.2,Fig 9)—— 一条专家模型流水线把"框 + query"自动造出来:

也就是说,LocateAnything 用 Qwen3-VL(出 query + 验证)+ Molmo(出点)+ SAM 3(点→框)+ Rex-Omni(出框) 这套现成模型的级联,把数据规模从"开源能拿到的"放大到 1.38 亿级。框的输出顺序按 X-Y Corner Order(先按左上角 x、再按 y 排序)—— 消融显示这个排序 F1 最高,定为数据构建默认。

(3) 规模统计(§B.4,Table 10,共 139M queries / 22M+ negatives,长尾的"每 query 目标数"分布):

#Queries #Negative 平均目标/query
Detection 93.35M 21.0M 6.29
GUI 23.01M 0 1.03
Referring 10.14M 93k 2.12
OCR 5.05M 0 11.89
Layout 4.86M 1.38M 4.92
Pointing 3.15M 353k 3.25

2.5 完整训练流程:4 阶段 progressive(base VLM → grounding SFT)

⚠️ 正文把后训练叫"Stage-1 / Stage-2 SFT",但 supplementary(Table 7)把整条流水线拆成 4 个 progressive stage:前两阶段先造 base VLM(此时完全不碰检测/grounding 数据),后两阶段才是正文说的那两段检测 SFT。底座 = Moon-ViT(原生任意分辨率)+ Qwen2.5 + MLP projector,3B。

阶段 目标 数据 可训练部分 LR / 步数 / GPU
Stage 1 视觉概念初始化 让 ViT 特征对齐文本 仅 caption 类数据(Table 8) 只训 MLP projector 2e-4 / 2000 / 64
Stage 2 综合多模态 建强 base VLM 全量通用集(数学/代码/科学/图表/OCR/VQA/纯文本/基础计数) 全部 4e-5 / 20000 / 256
Stage 3 检测&grounding(=正文 SFT-1) 注入 grounding 能力 138M LocateAnything-Data 全部解冻 4e-5 cosine / 25000 / 256
Stage 4 密集检测增强(=正文 SFT-2) 密集场景不崩 20% 前序 + 密集集(MOT20Det / SKU110K) 全部 1e-5 / 5000 / 256

3. 结论 (Key Findings)

Table 1: LVIS + COCO 结果
Table 1 — LVIS / COCO zero-shot 结果。LocateAnything-3B 关键数字: LVIS F1@0.95 = 31.1 (vs Qwen3-VL-8B 20.2, Rex-Omni-3B 20.7 — 涨 ~50% 相对)。 Throughput = 12.7 BPS (vs Qwen3-VL-8B 的 1.0, Rex-Omni-3B 的 5.0 — 比通用 VLM 快 12.7×, 比 SOTA detection VLM 快 2.5×)。 Mean F1@IoU LVIS = 50.7, COCO = 54.7,**全场最高**(open-set 设定下)。

关键数字 (从 Table 1 摘):

模型 Throughput LVIS F1@0.95 LVIS Mean COCO Mean
Qwen3-VL-8B 1.0× 20.2 44.8 45.7
Rex-Omni-3B 5.0× 20.7 46.9 52.9
SEED1.5-VL n/a 19.5 46.7 51.4
LocateAnything-3B 12.7× 31.1 50.7 54.7

核心发现: PBD 同时 提升精度和吞吐。一般 trick 都是 trade-off,这里两个都涨。原因是 PBD 让模型用 attention 显式建模 box 内部几何耦合,而 NTP 只能靠位置依赖间接学。

4. 实现细节 (Implementation Notes)

⚠️ 代码 + 模型未公开 (截至 2026/06/04)。论文给的链接 GitHub / HF Model / HF Demo 都是 placeholder,实际仓库无法访问。复现门槛极高,只能等 release。

5. 批判性总结 (Critical Assessment)

5.1 优点

5.2 不足 / 疑点

5.3 适用 vs 不适用

5.4 进一步阅读

讨论 / Comments

评论托管在本仓库的 GitHub Discussions, 需 GitHub 账号。