ㅤ | info |
paper | |
code | |
model | |
demo | |
project | |
org | NVIDIA |
个人博客位置 |
TL, DR
LocateAnything讨论的是一个用AR的思路做检测的痛点:VLM做grounding / detection时,bbox是否一定要逐token自回归生成?
目前很多VLM将bbox表示为坐标token序列,例如:
在这种范式下,一个bbox至少需要多个token逐步生成。如果场景里有很多实例,decoding的代价会迅速上升。更关键的是,bbox本身是一个强结构化对象,之间存在天然的几何耦合关系。将其拆成一维token stream后,模型需要逐个预测坐标,既慢,也不一定符合bbox的结构。
LocateAnything的核心思路是:将一个box看成atomic unit,用Parallel Box Decoding(PBD)一次性预测完整bbox。
概括来看:
- PBD将bbox / point作为一个box-aligned block,而不是普通token序列。
- 训练时同时保留NTP序列和MTP block序列,避免直接并行训练破坏causal modeling能力。
- 推理时提供Fast / Slow / Hybrid三种模式。Hybrid默认并行解码,当遇到格式错误或空间歧义时,局部fallback到NTP。
- 数据侧构建了LocateAnything-Data,包含约138M query、785M boxes、12M unique images,覆盖detection、GUI、OCR、layout、referring、pointing等任务。
1 Motivation
对于VLM而言,visual grounding / detection通常被建模为一个生成任务。给定图片和文本prompt,模型输出目标区域的坐标。常见做法包括:
- Textual Digits:把坐标数值拆成文本数字,例如
1024 -> 1,0,2,4。
- Quantized Coordinate Tokens:将坐标离散到固定bin中,例如
<x_123><y_456><x_789><y_900>。
两者本质上都是把二维几何对象序列化为一维token序列。

这个设计有两个问题:
- decoding速度慢。如果一个bbox需要生成4个坐标token,再加上
<box>、</box>等结构token,那么实例数量一多,输出序列会很长。
- 坐标之间的结构关系没有被显式建模。对于box而言,共同决定一个空间区域,且要满足几何一致性。例如,,并且四个坐标共同对应同一个目标。如果按token-by-token方式生成,模型需要在一维序列里隐式学习这种结构。
直觉上,一个box更像一个“结构化整体”,而不是普通文本里的若干连续token。那么能不能让VLM将这个结构化整体一步生成?这就是LocatAnything研究的问题。
LocateAnything的核心创新点:
- 用Parallel Box Decoding重新定义bbox的生成方式。
- 用NTP + MTP的dual formulation进行训练。
- 用Hybrid inference解决并行解码中的不稳定问题。
下面具体来看。
2 Method
2.1 atomic unit的定义
传统NTP范式下,一个bbox被拆成多个token逐步生成:
LocateAnything没有直接沿用这种token-by-token建模方式,而是将输出组织为block sequence:
每个block都是一个固定长度的atomic unit。论文里设置block length为,刚好可以容纳一个bbox加上两个结构token:
如果某个block没有用满,就用
<null>补齐。论文中定义了4类block:
- Semantic Block:表示类别或referring expression中的语义内容。这里需要特别说明:If an expression exceeds the capacity of a single block, it is partitioned across multiple consecutive blocks.
- Box Block:表示bbox坐标。
- Negative Block:表示当前query在图片中没有对应目标。
- End Block:表示生成结束。

从上面不难看出,PBD的关键在于让MTP block与真实的结构化单元对齐。对于grounding任务而言,这个结构化单元就是bbox或者point。
2.2 如何实现atomic unit的并行生成
MTP本身不是LocateAnything提出的。很多language model已经尝试用MTP或block diffusion来减少decoding step。
但直接把这些方法迁移到bbox生成上会有问题。
普通MTP通常按照固定长度切分token block,例如每4个token或每8个token作为一个block。这个切分方式对自然语言可能还可以接受,但对bbox不一定合理。原因是bbox有明确边界,如果切分不对齐,就可能出现一个block中同时包含:
- 上一个bbox的末尾坐标
- 下一个bbox的类别token
- 结构token
- 另一个目标的坐标
这样模型学到的就是跨bbox边界的伪相关。

论文中用图2对比了三种方式:
- NTP:坐标逐个生成,慢。
- Standard MTP:并行预测多个token,但token block不和bbox结构对齐,容易产生不规则模式。
- PBD:一个bbox作为一个atomic block并行预测,结构更一致。(下文所指的MTP都是指该形式)
2.3 模型架构
LocateAnything的模型架构比较直接:
module | ㅤ |
Vision Encoder | Moon-ViT |
Connector | MLP projector |
Decoder | Qwen2.5 |
给定输入图片,vision encoder得到视觉token:
随后language decoder基于视觉token和文本query,生成box-aligned block sequence。
架构比较常规,理解的核心是如何设计training mask和inference策略。
2.4 Dual formulation training:同时训练NTP和MTP
如前文所言,用MTP训练,可能会破坏原本LLM/VLM的causal reasoning能力。LocateAnything采用了一个折中方案:同时构造NTP序列和MTP block序列,并联合训练。
输入序列可以写成:
其中:
- :视觉token。
- :文本query。
前两者构成shared context
- :标准NTP格式的target序列。
- :block-wise MTP格式的target序列。
- : 序列拼接。
构造时,作者从左到右遍历,按照block规则切分。每个block保留要预测片段前一个token作为anchor,其余位置替换为
[mask],让模型在同一步预测该anchor之后的多个future tokens。如果block size退化为1,那么这个MTP formulation就等价于普通NTP。
这里需要注意,LocatAnything的MTP的实现方式与deepseek中的不同。deepseek中,设置了多个预测head,针对一个token的输入,可以同时预测出个token。而LocatAnything中只有1预测head,它采取的方式是扩展输入,让多个位置在同一次forward中分别预测未来token。例如:
这里A是anchor token,后面的
<mask>用于占位(一个特殊的token),提供未来query position。每个位置仍然走同一个语言模型输出头。2.5 Attention Mask设计
dual formulation的核心难点是:NTP和MTP放在同一个sequence里训练,如何避免互相泄漏?
LocateAnything设计了一个heterogeneous attention mask,大体包含三类规则。

- NTP部分使用causal attention。NTP token只能看前面的token,不能看到,否则会发生label leakage。
- MTP block使用block-causal mask。即block的内部是双向attention,block之间是causal。这个思路与之前的block diffusion/semi-autoregressive LLM 比较接近。作者的观点是,这个方法可以让模型学习之间的几何耦合关系。这里有一个细节,next block可见的是原始的序列token,并非上一个包含
<mask>的block。这意味着推理的时候用了MTP的方式生成后,还要用生成的结果做一次prefill来更新kv-cache。
训练目标为:
这里面有一个细节。需要注意输入序列的位置坐标的设计。
虽然被物理拼接在后面,但它在语义上对应的是中的某一段未来token。因此position ids不会沿着拼接后的序列继续递增,而是回到原始label中的对应位置。
虽然被物理拼接在后面,但它在语义上对应的是中的某一段未来token。因此position ids不会沿着拼接后的序列继续递增,而是回到原始答案中对应的位置。
2.6 Hybrid inference
PBD虽然能提升速度,但并行解码在复杂场景中也会遇到失败模式。论文主要总结了两类:
1 Format Irregularity
在多类别、多实例场景中,模型可能在类别边界处犹豫,导致结构token混乱。例如:
这里
</ref>混进了box block,说明并行预测的结构不合法。2 Spatial Ambiguity
在规则排列的密集场景中,例如表格、算盘珠、排布整齐的小物体,MTP可能预测出两个物体之间的中间坐标,从而导致IoU很低。
LocateAnything用Hybrid Mode处理这个问题。

推理模式分为三种:
- Slow Mode:完全使用NTP,速度慢但最稳定。
- Fast Mode:完全使用MTP,吞吐最高。
- Hybrid Mode:默认用MTP,当检测到不可靠block时,丢弃该block并回退到最近的verified prefix,用NTP重新生成这个problematic block,之后再切回MTP。
触发fallback的条件包括:
- 格式违规。
- 空间歧义。论文中给出的判断规则是:top-1 coordinate token概率低于0.7,并且top-5 coordinate tokens在坐标空间内的max-min差值超过80。
这个策略有点像“局部纠错”。模型只对不稳定的block做NTP re-decoding,其他部分继续走MTP。
MTP阶段每轮构造如下输入:
模型读取最后
block_size个logits,得到一个候选block。候选block会经过两类校验:- 格式校验:例如box block是否满足
<box> x1 y1 x2 y2 </box>,
- 空间歧义校验:坐标位置的top-k候选如果跨度过大且置信度不够,就认为该坐标不稳定。
Fast Mode会直接commit候选block。Hybrid Mode遇到不稳定box时,会把它标记为
error_box,随后切换到AR。这里还需要处理KV cache。
MTP forward时,输入中包含duplicate anchor和
<mask>,但这些token不应该留在cache里作为后续真实前缀。否则下一轮生成会错误地基于<mask>的KV继续推理。因此源码在每轮forward后会截断cache,只保留已经commit的真实generated前缀:随后采样出的真实tokens会被append到
generated。下一轮forward时,prepare_inputs_for_generation会发现cache长度短于generated,于是把上一轮刚commit的真实tokens重新喂进去,补成真实KV cache。从这个角度看,MTP预测出的tokens最终仍然要变成真实前缀。源码把这一步合并到了下一轮forward里,相当于隐式完成了一次prefill。duplicate anchor也服务于这个机制:cache里的最后一个token提供历史K/V,当前window里的anchor提供预测第一个future token所需的query position。
2.7 LocateAnything-Data
除了模型结构,LocateAnything还有一个很重的数据工程部分。
数据规模:
- 12M unique images
- 138M natural language queries
- 785M annotated boxes

数据覆盖6类任务:
Task | Query占比 | 作用 |
General Object Detection | 66.9% | 提供基础bbox监督 |
GUI Grounding | 16.5% | 支持UI元素定位和agent操作 |
Referring Comprehension | 7.3% | 将复杂语言描述映射到空间区域 |
Text Localization | 3.6% | OCR和文本区域定位 |
Layout Grounding | 3.5% | 文档/场景layout理解 |
Pointing | 2.2% | 细粒度点定位 |
数据构建上,论文用了一个multi-target grounding data engine。

大体流程分为2个链路:
有标注的检测数据处理链路:
- 对每个gt box,用类别名prompt Qwen3-VL生成更丰富的object-centric query,包括属性、空间关系、推理线索。
- 将query输入Molmo预测candidate points。
- 因为gt box已知,只保留落在对应gt box内部的points作为可靠监督。
无标注图片的处理链路:
- 用Qwen3-VL直接从图像生成多样化query。
- query可以prompt Molmo预测point,再用SAM 3生成box。
- 或者直接prompt Rex-Omni生成box。
- 最后所有生成box再由Qwen3-VL做post-verification。
这里还有一个细节:作者显式构造negative samples。因为现有grounding / detection数据集大多是positive-only,如果只在这类数据上训练,模型容易在目标不存在时仍然输出box。LocateAnything通过negative block让模型学习“没有目标时不要乱框”。
3 Result
3.1 通用检测与密集检测
在LVIS和COCO上,LocateAnything-3B相对Rex-Omni-3B有明显提升:
- LVIS mean F1:46.9 -> 50.7
- COCO mean F1:52.9 -> 54.7
- decoding throughput:5.0 BPS -> 12.7 BPS
更重要的是密集检测场景。VisDrone上mean F1从Rex-Omni的35.8提升到39.9。Dense200上LocateAnything也达到58.7 mean F1。
这说明PBD不是只提升速度,对高IoU定位也有帮助。直觉上,这和box内部坐标被作为一个整体建模有关。
3.2 GUI / OCR / Layout / Referring
LocateAnything在多个open-world localization任务上也有不错表现:
- ScreenSpot-Pro:60.3 Avg,超过GUI-Owl-32B等UI专用模型。
- DocLayNet:76.8 mean F1。
- M6Doc:70.1 mean F1。
- TotalText:43.3 mean F1。
- HumanRef:78.7 mean F1。
- RefCOCOg test:77.6 mean F1。
3.3 Decoding速度
论文中默认Hybrid Mode在单张H100、batch size = 1下达到12.7 BPS。
对比:
- Qwen3-VL:1.1 BPS
- Rex-Omni:5.0 BPS
- LocateAnything:12.7 BPS
在目标框数量增加时,PBD的优势更明显。NTP方法会随着box数量增长产生明显latency bottleneck,而parallel decoding在dense scene下吞吐可以从约12 BPS提升到约25 BPS。

3.4 Ablation
1. PBD比Textual / Quantized coordinate更好。
在COCO消融中:
- Textual:49.1 F1,1.3 BPS
- Quantized:50.1 F1,3.9 BPS
- PBD Slow:52.1 F1,3.9 BPS
- PBD Fast:49.6 F1,16.9 BPS
- PBD Hybrid:51.6 F1,13.2 BPS
PBD Slow和Quantized吞吐一致,但F1更高,说明box-aligned formulation本身提供了更好的监督。
2. 普通MTP不如box-aligned MTP。
SDLM-B4/B6/B8和Block Diffusion这类structure-agnostic MTP会出现明显speed-accuracy trade-off。block size增大后吞吐提升有限,F1却持续下降。
PBD Fast在16.9 BPS下仍有49.6 F1,说明将MTP block和bbox结构对齐是有效的。
3. box output order
默认采用X-Y Corner Order,即先按左上角x坐标排序,再按y坐标排序。实验中这种排序方式F1最高。
3.5 Qualitative Result

从可视化结果看,LocateAnything在几个场景中表现比较稳定:
- attribute / part / spatial / reasoning query都能处理。
- 目标数量从少到多时,框仍然比较紧凑。
- 在遮挡、重复纹理、网格状密集布局中,框之间能保持较好的分离。
补充材料中也对REC、dense object detection和OCR做了定性对比,此处不做赘述。
4 小结
LocateAnything重新审视bbox在AR任务中的建模范式,将其从串行生成的coordinate tokens转为box-aligned atomic unit的生成,基于该设计实现精度和速度的均衡。
- 作者:莫叶何竹🍀
- 链接:http://www.myhz0606.com/article/locate_anything?target=comment
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章






