VLMs spell out bounding boxes one digit at a time — slow and incoherent. LocateAnything emits a whole box in a single parallel step, advancing the speed-accuracy frontier with up to 2.5x higher throughput.
You ask a vision-language model: "Where is the dog?" It needs to answer with a box — four numbers that pin down a rectangle on the image. Sounds simple. But here is how today's VLMs actually do it.
They spell the box out loud. The model treats the box like a sentence and emits one token at a time: "1", "3", "0", then "6", "4", "7", then "9", "1", "1", then "8", "3", "2". Twelve forward passes through a multi-billion-parameter transformer just to say one box. Each pass waits for the previous one to finish.
Suppose a single forward pass of a 3B VLM takes ~30ms on a GPU. Consider a detection query that returns 10 objects. With coordinates normalized to [0, 1000] and emitted as quantized tokens (x1, y1, x2, y2 each one token), plus a <box> and </box> wrapper, that is roughly 6 tokens per object.
| Quantity | Value | How |
|---|---|---|
| Tokens per box | 6 | <box> x1 y1 x2 y2 </box> |
| Objects in the query | 10 | a moderately busy scene |
| Total decode steps (NTP) | 60 | strictly sequential |
| Wall-clock time | ~1.8s | 60 x 30ms |
That 1.8 seconds is dead time — the GPU is idle between tokens, waiting on the autoregressive dependency. For an embodied agent that must localize before it acts, or a labeling pipeline processing millions of images, this latency is fatal.
Some models (the "textual digit" family) don't even use one token per coordinate — they spell each digit. The number 1024 becomes "1", "0", "2", "4": four tokens for one coordinate, sixteen for one box. The throughput collapses further.
So we have two problems wearing one mask:
Here is the move. A box's four coordinates are not a sentence to be spelled out — they are an atomic unit that should be decoded all at once, in a single parallel step.
Generic multi-token prediction asks the model to fill in random masked positions. For a token stream like <box> 130 647 911 832 </box> <ref> cat </ref>, a random chunk might span the </box> boundary, mixing coordinate tokens with the next object's category. The model is forced to learn "what token usually follows what," capturing spurious co-occurrence rather than geometry.
By contrast, PBD always masks exactly the coordinates inside one box. The model's job becomes well-posed: "given the visual features and the prefix, fill in the four numbers that form THIS box." The supervision matches the structure of the answer. Result: both higher throughput and higher accuracy — usually a tradeoff, here a free lunch, because the structure was being thrown away before.
Before we can appreciate PBD, we need to understand how a VLM turns "where is the dog?" into a rectangle. The answer: it reuses the same next-token machinery it uses for text.
Continuous pixel coordinates are first normalized to a fixed range [0, 1000] (so the scheme is resolution-independent), then discretized into integer bins. Each bin becomes a special token in the vocabulary, e.g. <313>. A box is then the sequence <box> <313> <638> <345> <663> </box> — the model emits these just like words.
This is elegant: detection becomes "language modeling over a coordinate vocabulary." But it inherits language modeling's serial bottleneck.
Let the output be a sequence of blocks B = (b1, b2, ..., bN). Conditioned on visual features Z and a text query E, every generative localizer factorizes the joint probability the same way:
Reading it symbol by symbol:
The only thing PBD changes in this formula is the granularity of bi. NTP makes bi a single token (so N is large). PBD makes bi an entire 6-token box block (so N is ~6x smaller). Fewer factors in the product = fewer sequential steps.
LocateAnything is a native-resolution VLM:
Native resolution matters for localization: a 12x12 pixel traffic sign needs its high-frequency detail preserved, or the predicted box will be off by tens of pixels.
For parallel decoding to work, every step must produce a tensor of the same shape. You cannot batch and parallelize variable-length outputs cleanly. So LocateAnything reorganizes the entire output into fixed-length blocks of constant length L = 6.
A bounding box needs four quantized coordinates plus two structural tokens that bracket it: <box> x1 y1 x2 y2 </box>. That is 6 slots. Any block type that uses fewer than 6 meaningful tokens pads the rest with a <null> token, guaranteeing uniform tensor shapes for parallel decoding.
| Block | Purpose | Example contents (6 slots) |
|---|---|---|
| Semantic | Encodes the linguistic identity (the label / referring text). Long expressions span multiple consecutive Semantic blocks. | <ref> "hot" "dog" </ref> <null> <null> |
| Box | Four quantized coordinates of one bounding box. | <box> <313> <638> <345> <663> </box> |
| Negative | Explicitly says "the queried object is absent." Prevents hallucinated boxes. | <null>-padded sentinel |
| End | Terminates generation. | <eos> <null> ... |
Query: "find the hot dog." The model emits: a Semantic block carrying <ref> hot dog </ref>, then a Box block <box> 313 638 345 663 </box>, then an End block. Three blocks = three decoding steps in Fast Mode, versus ~12 token steps under NTP.
This is the heart of the paper. Below you can decode the same box three different ways — NTP, generic MTP, and PBD — and watch the decode steps, the wall-clock cost, and whether the output stays coherent. This reconstructs Figure 2 of the paper as an interactive race.
Let T = single forward-pass latency, N = number of objects. The decode-step counts are:
| Method | Steps for N boxes | At N=4, T=30ms |
|---|---|---|
| NTP | 6N (each of 6 tokens per box is one step) | 24 steps = 720ms |
| Generic MTP (chunk=3) | ~2N (but with re-decode penalty on errors) | ~8 steps + retries |
| PBD (Fast Mode) | N (one block per step) + framing | ~5 steps = 150ms |
That ~4.8x reduction in steps is where the paper's headline "up to 2.5x throughput" comes from after accounting for the larger per-step compute of predicting 6 tokens at once and KV-cache management.
Inside a PBD block, the four coordinate tokens attend to each other bidirectionally (next chapter). So when the model decides x1=313, the same step's prediction of x2 can "see" that decision and ensure x2 > x1. Generic MTP lacks this guarantee because its chunk doesn't respect the box boundary — half the chunk might belong to the next object entirely.
The single cleverest engineering piece. To train both an NTP stream (for causal reasoning) and an MTP stream (for parallel box prediction) in one forward pass, LocateAnything builds a specialized attention mask with three distinct behaviors.
If the NTP tokens could attend to the masked MTP block, the model would learn to copy the answer instead of reasoning toward it. At inference the MTP block doesn't exist yet (you're predicting it), so the cheat-path would create a train/test mismatch. The strict isolation guarantees the NTP behavior at training time is identical to inference time — which is exactly why the standard causal KV cache still works.
Parallelizing the output directly during training risks destroying the model's inherited causal reasoning. The fix: a dual-formulation training strategy that optimizes the same ground truth in two formats at once.
A single sequence is built by concatenation:
where ⊕ is concatenation. Defining each piece:
So xntp and xblk are literally the identical answer in two encodings: token-level and block-level.
Traverse xntp left to right; split and pad it according to the L=6 block rules. Then, within each block, keep the first token as a prediction anchor and replace all subsequent tokens with [mask]. The model must predict all masked tokens in the block in one step.
Both streams are supervised with cross-entropy, and the losses simply add:
Because both are computed in the same forward pass over xall (the mask keeps them isolated), training cost barely grows while the model becomes bilingual: it can decode serially (Slow Mode) or in parallel (Fast Mode) from the same weights.
def build_block_targets(ntp_tokens, L=6, MASK="[mask]", NULL="<null>"): # ntp_tokens: the flat target sequence, e.g. # ["<box>","<313>","<638>","<345>","<663>","</box>", ...] blocks = [] for i in range(0, len(ntp_tokens), L): chunk = ntp_tokens[i:i+L] while len(chunk) < L: # pad to constant length chunk.append(NULL) anchor = chunk[0] # keep first token as context masked = [anchor] + [MASK]*(L-1) # mask the rest target = chunk # supervise against the real tokens blocks.append((masked, target)) return blocks # L=1 collapses to plain next-token prediction.
Parallel decoding has an exploration-exploitation dilemma in hard scenes. LocateAnything names two failure patterns and builds a fallback for both.
<box><211></ref><911><887></box>.During Fast Mode, the model continuously validates syntactic integrity and monitors spatial confidence. A fallback is triggered when both conditions hold simultaneously:
Reading condition (2): if the five most likely coordinate tokens are {410, 415, 418, 470, 495}, the spread is 495 - 410 = 85 > 80 — the model is torn between two spatially distant answers. Combined with low top-1 confidence, that's a red flag.
On trigger, the compromised block is discarded, generation reverts to the last verified prefix, and that one problematic block is re-decoded with token-by-token NTP (higher precision). Once the block is finished, the model switches back to Fast Mode. Surgical, localized re-decoding — not a full restart.
| Mode | Decoding | Use case |
|---|---|---|
| Slow (NTP) | Token-by-token, maximum stability | High-precision labeling, final-pass dataset curation, offline eval |
| Fast (MTP) | Box-aligned blocks in parallel, maximum throughput | On-device robotics, embodied agents, latency-bound settings |
| Hybrid | Fast by default, falls back to NTP on unreliable blocks | Production pipelines needing both speed and accuracy |
Hybrid preserves most of the speed gains while keeping outputs robust — only the rare problematic block pays the NTP tax.
A fast decoder is useless without precise supervision. LocateAnything pairs PBD with LocateAnything-Data: 12M unique images, 138M natural-language queries, and 785M annotated bounding boxes across six task families.
| Task | Query share | What it teaches |
|---|---|---|
| General detection | 66.9% | The foundation — dense, precise coordinate alignment (83% of all boxes) |
| UI / GUI grounding | 16.5% | Locating buttons, menus — for embodied agents & GUI navigation |
| Referring comprehension | 7.3% | Linking complex language ("the red mug behind the laptop") to a region |
| Text / OCR localization | 3.6% | Tightly grounding text in images |
| Layout grounding | 3.5% | Document/scene structure (tables, figures, paragraphs) |
| Pointing | 2.2% | Fine-grained point-based localization |
Detection supplies 83% of the bounding boxes despite being 67% of queries — because one detection query ("find all objects") returns many boxes, while a referring query returns one. Dense box supervision is what teaches the model precise coordinate regression, so the authors deliberately weight it heavily. The other five tasks add diversity of intent: the same coordinate-prediction skill, exercised through UI, text, and language-referring lenses.
<313> learns a genuine notion of "about 31% across the image" rather than an arbitrary symbol. Data scale is what gives the discretized coordinates their geometric meaning.The headline: LocateAnything-3B advances the speed-accuracy frontier — higher throughput and higher localization quality, especially at strict IoU thresholds.
Earlier VLMs cluster at low throughput (~1 box/sec) with modest mean F1. LocateAnything sits to the upper-right: ~12.7 boxes/sec while improving mean F1 — the rare move that pushes both axes the good way.
| Method | Throughput (BPS) | LVIS Mean F1 | COCO Mean F1 |
|---|---|---|---|
| Qwen3-VL-8B | 1.0 | ~44.8 | ~45.7 |
| SEED1.5-VL | 1.0 | ~46.7 | ~51.4 |
| Rex-Omni-3B | 5.0 | ~46.9 | ~52.9 |
| LocateAnything-3B | 12.7 | ~50.7 | ~54.7 |
BPS = Boxes Per Second (decoding throughput). LocateAnything is ~2.5x the throughput of the next-fastest VLM (Rex-Omni-3B at 5.0) and ~12x faster than the dense 8B models — while topping mean F1.
The gains concentrate at strict IoU thresholds (e.g., F1@0.95), which demand pixel-precise boxes. This is exactly where the box-aligned, jointly-decoded coordinates pay off: predicting x1,y1,x2,y2 together with bidirectional intra-block attention keeps the rectangle internally consistent, so it snaps tighter to the object than four independently-sampled tokens would.
The paper evaluates across layout grounding, long-tail detection (LVIS has 1000+ rare categories), and GUI grounding — a deliberately diverse battery to show PBD isn't tuned to one benchmark. Outperforming SOTA "by a large margin" across all three is the evidence that box-aligned decoding is a general principle, not a COCO-specific trick.
LocateAnything sits at the intersection of three lineages: generative detection in VLMs, multi-token / semi-autoregressive decoding, and large-scale grounding data.
| Symbol / term | Meaning |
|---|---|
| B = (b1...bN) | Output as a sequence of blocks |
| P(B|Z,E) = ∏ P(bi|b<i,Z,E) | Block-level autoregressive factorization |
| L = 6 | Constant block length (4 coords + 2 structural tokens) |
| xall = xvis⊕xq⊕xntp⊕xblk | Concatenated dual-format input |
| L = Lntp + Lmtp | Joint cross-entropy objective |
| Trigger: ptop1<0.7 & spread>80 | Hybrid fallback condition |
| BPS | Boxes Per Second (throughput metric) |
| Fast / Slow / Hybrid | MTP-parallel / NTP-serial / adaptive modes |