一篇教学综述 · 2018 — 2026.05
说不准的坐标
你让一个很强的 VLM「点一下图里那个红色按钮」,它经常点歪;
你问它「杯子在书的左边还是右边」,它有不小概率答反。模型明明
看见了图,为什么分不清上下左右、说不准像素位置?
这篇综述要讲的,是过去几年一条逐渐清晰的研究主线:不是
抛弃 patch / ViT,而是把「几何」从一个微弱的位置编码,升级成模型
的一等公民——reference point、box query、grounding token、
depth、参考系。预设读者:会基本的机器学习、微积分、线性代数。
不会目标检测、不懂 VLM 也没关系,我们从零讲起。
~50 篇论文 · 6 个交互演示 · 8 个家族 · 最后更新 2026-05-30
阅读路径建议
零基础:从 §1 顺着读,前四节会把「patch 怎么变成有
位置的 token」「为什么坐标会说不准」彻底讲清楚,再进各家族。
懂检测/VLM:直接从 §10「把坐标放进 query」的 DETR
家族开始,那是整条线最成熟的几何归纳偏置。
只想看最新:跳到 §17 MolmoPoint、§20 LocateAnything
与 §36 Frontier——2026 年的工作集中在那里。
§1这到底是个什么问题
今天绝大多数强 VLM 的视觉前端长得一样:用一个 CLIP / SigLIP /
DINOv2 类的 ViT encoder 把图像切成 patch,得到一串
visual token,再喂给 LLM。位置信息靠一份 2D positional
encoding(位置编码,简称 PE)注入。这套范式在「这是不是一只
猫」这类语义任务上非常好用。
但只要任务从「是什么」转向「在哪里 / 谁在谁旁边 / 点哪个
像素」,它就开始漏。研究界这两年逐渐形成一个共识,可以浓缩成一句
话:
关键想法 · 一句话
「图里有 2D 位置编码」并不等于「模型会用
空间信息」。坐标准不准,取决于几何是显式地参与了推理,还是被
压成了一份微弱、易被语义淹没、换分辨率就失效的弱信号。
所以这条研究线的名字不该叫「抛弃 patch」,而该叫
几何显式化(geometry-explicit):把坐标、box、mask、
depth、参考点、指针 token 变成模型能直接读写的对象,而不是让 LLM 从
patch embedding 里「猜」一串数字。后面八个家族,都是在回答同一个问题
的不同侧面——怎么把几何放回模型的推理回路里。
§2一个 patch 怎么获得位置
先把对象本身讲清楚。ViT 把一张 $H\times W$ 的图按 $P\times P$
(典型 $P=14$ 或 $16$)切成不重叠的 patch,每个 patch 拉平后过一个
线性层变成一个 $d$ 维向量 $x_i$。它本身不含位置——把
patch 打乱顺序,这些向量完全一样。位置是额外加上去的:
$$ z_i \;=\; \underbrace{x_i}_{\text{语义内容}} \;+\; \underbrace{p_i}_{\text{位置编码 PE}} $$
$p_i$ 就是第 $i$ 个 patch 的位置编码。它有两种常见形态:一是一张可学
的查找表 $p_i = \text{Embed}(\text{row}_i, \text{col}_i)$(绝对
2D PE),二是用 sin/cos 频率把坐标编码进去。关键在于,它
只是被加在内容向量上的一个偏置。把这句话刻在脑子里——后面几乎
所有失败都源于此。
直觉
把 $z_i = x_i + p_i$ 想成「一句话写在一张便利贴上,便利贴贴在墙上某个
位置」。语义 $x_i$ 是话的内容,位置 $p_i$ 是它贴在哪。问题是:当一堆
便利贴叠在一起、内容的字体又特别大时,「贴在哪」这件事很容易被忽略。
那「坐标」是怎么输出的?
反过来,当你要 VLM 给出一个位置——比如一个检测框——主流做法是
把坐标当成文本写出来。模型自回归地吐出字符串,像这样:
# 主流 VLM 怎么"说"一个框:把坐标当普通文字逐 token 生成
# 这就是后面所有"别让 LLM 写坐标"工作要攻击的 baseline。
prompt = "Where is the red button? Answer with a box."
output = vlm.generate(prompt, image)
# output 是一串文本 token: "" "0" "." "5" "1" " " "0" "." "3" ...
# ↑ 一个 (x1,y1,x2,y2) 被拆成几十个 1D 字符 token
box = parse_floats(output) # 模型必须自己学会: 数字字符串 ↔ 像素位置
# 而且 x1 在 y2 之前生成 —— 框的 2D 几何被强行串成 1D
注意这里已经埋下两颗雷:(1) 一个二维的框被拍扁成一串一维字符
token,几何耦合被破坏;(2) 模型得隐式学会「数字 $0.5$ ↔ 图中
央那一列像素」这个抽象映射。下面这个演示,先让你看见这个映射
本身有多脆。
§3有 PE ≠ 会用空间
那加了 PE 为什么还不行?2025 年有一篇很关键的诊断工作
Beyond Semantics 给出了机制级答案:在 LLaVA 这类模型里,
visual token 的 embedding 范数(norm)远大于 text token,
于是 RoPE 注入的位置信号被这个巨大的语义范数压过去了。换句话
说,视觉 token 在 LLM 眼里几乎退化成一袋无序的语义
(bag-of-tokens),位置那一维存在、但被淹没。
| 隐式 patch + 2D PE | 几何显式化 |
| 位置如何表示 | 加在内容上的弱偏置 $p_i$ | query 的参考点 / box / depth / token |
| 输出坐标的方式 | 当文本逐 token 写数字 | 指向 visual token / 原子框 / 框回归头 |
| 换分辨率 | PE 要插值,映射易崩 | 归一化坐标 / RoPE 外推,稳 |
| 几何耦合 | (x,y,w,h) 被串成 1D | 框作为一个整体被预测/更新 |
| 能否分前后远近 | 单张 RGB 几乎不能 | 显式引入 depth / 参考系 / 3D |
| 谁在用 | 通用语义 VLM 默认 | 检测、grounding、GUI、机器人 |
这张表是全站的地图:左列是被挑战的范式,右列是八个家族
各自「往哪个角落上螺丝」的方向。记住右列五件事——参考点、原子坐标、
归一化、几何耦合、depth/参考系——后面每张卡片都在其中某一格里深耕。
§4四个痛点
把上面的失败归一归,正好是四个互相独立的痛点。它们是全站的
枢纽:后面每一篇论文,我都会标它主要打哪个 (a)/(b)/(c)/(d)。
痛点 (a):patch→pixel 的隐式映射很脆
让 LLM 输出文本坐标,等于要它隐式学会「归一化数字 ↔ 具体哪个 patch /
哪个像素」。训练分辨率固定时还行,一换到更高分辨率或新长宽比,这个映射
就系统性失效(GUI-Cursor 2025 明确报告了这点)。Demo 1 让你
亲手把它推崩。
痛点 (b):坐标当文本,几何被拍扁
一个框 $(x_1,y_1,x_2,y_2)$ 是四个互相约束的数,但自回归
解码把它们串成一维 token 流,强行规定「先 $x_1$ 再 $y_2$」的假顺序。
早一个 token 错,后面整框跟着歪;而且逐 token 解码慢。Demo 2
会演示这条链。
痛点 (c):位置信号被语义范数淹没
上一节那张诊断——visual token 大范数压过 PE 的弱信号。哪怕 encoder
特征里其实有空间信息,到了 LLM 这一层也用不上。这是「为什么有 PE
还说不准」最底层的答案。
痛点 (d):只有 2D,没有前后远近与参考系
「上下左右」只是 2D 关系。机器人、自动驾驶、室内导航还要 front/back、
near/far、occlusion,以及一个常被忽略的杀手:参考系——
「杯子的左边」到底是你的左、还是杯子的左?单靠 2D PE
无论怎么改都解决不了。Demo 5 专门演示参考系怎么把同一句话变成四种答案。
§5ViT + 2D PE · 被挑战的范式本身
ViT
— An Image is Worth 16×16 Words
痛点 (a)(c):把图切 patch、加一份可学 1D/2D PE,是后面一切的起点,也是一切问题的源头。
关键想法 把图像当成一串 16×16 的「词」:切 patch → 线性投影 → 加位置编码 → 标准 Transformer。证明了纯 attention 在足够数据下能超过 CNN,从此 patch token 成为视觉前端的事实标准。它的 PE 是一份可学查找表,绑定固定网格大小——这正是后面 RoPE / NaViT 要修的地方。
把 NLP 的 Transformer 几乎原样搬到视觉,代价是位置只剩一份外加的弱编码。
§6CoordConv · 卷积天生「坐标盲」
CoordConv
— An Intriguing Failing of CNNs and the CoordConv Solution
痛点 (a)(c):让普通 CNN 把一个坐标 (x,y) 画成对应位置的一个亮点——它会失败。
关键想法 卷积是权值共享 + 平移等变的:同一个 filter 在每个位置都一样跑,输出只依赖局部像素图案,从不依赖绝对位置。所以网络结构上就没有任何随「在图里哪」变化的输入特征,自然学不会坐标回归。CoordConv 的解法朴素到好笑:在输入上额外拼两个常数通道——一张归一化的行坐标图 $i$、一张列坐标图 $j$(可选第三张半径 $r$)——把绝对位置直接喂进去,于是同样的任务用更少参数就完美泛化。
第一次干净地点破:patch / conv 特征「坐标盲」是结构性的,不补坐标通道就治不好。
§7DETR · 把检测变成「集合预测」
DETR
— End-to-End Object Detection with Transformers
痛点 (b):检测器全是手工组件(anchor 生成、NMS、规则匹配),能不能端到端?
关键想法 用一组 $N$ 个可学的 object query 并行解出 $N$ 个框,配 Hungarian 二分匹配损失逼出唯一预测,干掉 anchor 和 NMS。但要命的是:这些 query 是纯内容向量、没有任何几何含义,decoder 得从零学「该看哪」,于是收敛慢到要 ~500 epoch。后面整条 DETR 家族,本质都是在回答「怎么把几何放回 query 里」。
把检测重写成 Transformer 的集合预测,第一次让「框」成为可被网络直接生成的对象——但 query 还没有坐标。
§8Pix2Seq / Kosmos-2 · 坐标当 token 的源头
这两篇是「坐标即语言」的祖宗,也是第四部所有工作反对的baseline。
Pix2Seq
— A Language Modeling Framework for Object Detection
痛点 (b):能不能不要检测专用头,把检测直接当「生成下一个 token」?
关键想法 把每个框写成序列 $[y_{\min},x_{\min},y_{\max},x_{\max},\text{class}]$;坐标先归一化到 $[0,1]$,再量化进固定数量的 bin(~2000 个,每个 bin 当一个离散词),用纯交叉熵生成。这就是 Demo 2 里那个「咔咔吸附」的量化接口。
第一次把坐标变成词表里的离散 token——优雅,但有损,且逼模型隐式学 patch→pixel 映射。
Kosmos-2
— Grounding Multimodal LLMs to the World
痛点 (b):怎么把 grounding 塞进一个会聊天的生成式 MLLM?
关键想法 把图切成 $P\times P$ 个 bin,给词表新增 $P\times P$ 个 location token;一个框 = 起点 loc token + 终点 loc token,包住被指的文字 span。于是坐标和语言共享同一条自回归流、同一个损失。
把 Pix2Seq 的离散坐标搬进对话 LLM,做成内联的 <loc> token——grounding 第一次进了聊天框。
§9Perceiver · 直接 attend 像素 + 傅里叶坐标
Perceiver / Perceiver IO
— General Perception with Iterative Attention
痛点 (a):能不能不预设 patch 网格,直接处理大量 raw pixel?
关键想法 用一个小的 latent 数组去 cross-attend 巨大的字节数组(像素),把二次复杂度降到线性;位置用傅里叶特征(坐标的 sin/cos)作为连续坐标信号注入,而不是每个 patch 一个可学向量。Perceiver IO 更进一步:用output query 解码——每个输出元素一个携带自身坐标的 query,可以「按坐标查询」任意结构的输出,思路上接近 NeRF / implicit field。
最早认真挑战 patch-grid 假设的架构之一:位置是连续坐标函数,输出靠坐标 query——但缺 CLIP 级的大规模 VLM 生态。
这是「把坐标放进 query/attention」最成熟的一条线,源头是检测而非 VLM。
核心想法:别给每个 token 一个弱 PE,而让 query 自带明确的空间
语义——参考点、anchor、box——并让 attention 围着这些坐标采样或
迭代。
Deformable DETR
— Deformable Transformers for End-to-End Detection
痛点 (a)(b):DETR 的全局 attention 收敛慢、吃不起高分辨率多尺度特征,小物体差。
关键想法 给每个 query 配一个 2D reference point $p_q\in[0,1]^2$,attention 只在它周围采样少数 $K$ 个点(典型 $K=4$),而不是和所有 patch 全局比对。这是「reference point」第一次登场,也是把显式局部几何装进 attention 的起点。
把全局 attention 换成围绕参考点的稀疏采样:收敛快一个量级,复杂度与特征图大小无关。
拆解 · deformable attention 在算什么
对一个 query 特征 $z_q$、参考点 $p_q$、特征图 $x$,$M$ 个 head、每 head
$K$ 个采样点,deformable attention 是:
$$ \mathrm{DeformAttn}(z_q,p_q,x)=\sum_{m=1}^{M} W_m\!\left[\sum_{k=1}^{K} A_{mqk}\cdot W'_m\, x\big(p_q+\Delta p_{mqk}\big)\right] $$
关键在 $\Delta p_{mqk}$(采样偏移)和 $A_{mqk}$(注意力
权重):它们都由 $z_q$ 过一个线性层直接吐出来——这个线性
层输出 $3MK$ 个数,$2MK$ 个给偏移(每点 x,y),$MK$ 个给权重(对 $K$
个点 softmax,$\sum_k A_{mqk}=1$)。因为采样点是小数坐标,$x(\cdot)$ 用
双线性插值取值。每个 query 的代价是 $O(K)$,与特征图分辨率
无关——这才吃得起多尺度高清特征。
§11Anchor / Conditional DETR · 给 query 一个物理含义
Anchor DETR
— Query Design Based on Anchor Points
痛点 (c):DETR 的可学 query embedding 是黑箱,没有清晰的物理含义,难优化。
关键想法 把每个 object query 直接做成一个 2D anchor point,于是每个 query 有明确的「我负责这个位置附近的物体」含义;再给每个 anchor 配几个 pattern 处理「一个区域多个物体」。
把不可解释的 learned query 换成有坐标的 anchor point——query 第一次「知道自己该看哪」。
同期的 Conditional DETR(ICCV 2021,
2108.06152)从另一面入手:
从 decoder embedding + 参考点学一个条件空间 query,把每个 head 引
到框的某条边上,解耦内容与位置,收敛快 6–10 倍。两篇合起来确立了一个原则:
query 的「位置部分」该由坐标显式生成。
§12DAB-DETR · 把框本身当 query
DAB-DETR
— Dynamic Anchor Boxes are Better Queries for DETR
痛点 (b)(c):anchor point 还是没尺度,query 缺宽高先验。
关键想法 干脆用一个完整的 4D anchor box $(x,y,w,h)$ 当 decoder query,并逐层更新它;box 的 w,h 还反过来调制位置 attention(大物体给更宽的注意力footprint)。框从「输出」变成了「参与推理、被一层层精修的状态」。
从 anchor point 升级到 anchor box:query 同时带了位置和尺度,且每层读进一个框、看一圈、吐出更紧的框。
拆解 · 「框作为 query,逐层精修」
一个 query 就是归一化框 $b=(x,y,w,h)$。它在 logit(sigmoid 逆)空间被逐层
更新:
$$ b^{(l)}=\sigma\!\Big(\sigma^{-1}\big(b^{(l-1)}\big)+\Delta b^{(l)}\Big) $$
其中 $\Delta b^{(l)}$ 是第 $l$ 层回归出的框增量。框的中心当作该层
deformable attention 的参考点,框的 w,h 调制位置 attention。
下面是 DAB / DINO 风格 decoder 的教学伪代码——整条 DETR 家族的「主干」长这样:
# 框作为 query 的 decoder(DAB / DINO 风格)。教学版,非性能优化。
boxes = init_anchor_boxes() # (N,4): (cx,cy,w,h) ∈ [0,1]
content = init_content_queries() # (N,C): 内容向量
for layer in decoder_layers: # 典型 6 层
ref = boxes # 参考点 = 当前 anchor box
pos = pos_embed(ref) # 把 (cx,cy,w,h) 做成 sinusoidal 位置嵌入
q = content + pos # query = 内容 + 位置(框)
content = self_attn(q, q, content) # query 之间互相协调
content = deform_cross_attn(content, # 在框中心周围采 K 个点
ref_point=ref[:, :2],
modulate_wh=ref[:, 2:], # w,h 加宽注意力
value=encoder_features)
dbox = box_head(content) # (N,4) 增量(logit 空间)
boxes = sigmoid(inverse_sigmoid(boxes.detach()) + dbox) # 精修这个框
score = cls_head(content)
# 每层都加监督;最终框来自最后一层
§13DN-DETR / DINO · 把这条线推到 SOTA
DN-DETR
— Accelerate DETR Training by Introducing Query DeNoising
痛点 (b):收敛慢的根源是二分匹配不稳——训练早期 query↔GT 的分配老在翻。
关键想法 加一个去噪辅助任务:把 GT 框加噪声当额外 query 喂进去,让 decoder 学着还原干净框(一条绕开匹配的捷径),训练立刻稳。
在 DAB 的 box-query 上加去噪,专治匹配不稳——纯训练技巧,不改架构。
DINO
— DETR with Improved DeNoising Anchor Boxes
痛点 (b):把 DAB+DN 这条线统一、补齐,冲 SOTA。
关键想法 三件套:对比去噪(正负噪声 query 教会「这里没物体」)、mixed query selection(用 encoder top 特征初始化 anchor box,而非静态学一份)、look-forward-twice(让梯度穿过两层框更新)。第一个登顶 COCO 的 DETR 类模型。注意:此 DINO 与自监督的 DINO 同名但无关。
把 box-query + 去噪推到检测 SOTA;要选一份代码走查整条家族,就读 DINO 的 decoder。
§14MDETR / Grounding DINO · 让语言来选 query
MDETR
— Modulated Detection for End-to-End Multi-Modal Understanding
痛点 (b)(d):grounding / referring 需要能读懂自由文本的检测器,不是固定类别表。
关键想法 把文本 encoder 和图像特征早融合,再跑 DETR decoder,用 token 预测 + 对比对齐损失把 query 对到文本 span 上——检测被 caption「调制」。
把 DETR 从固定类别解放出来:检测以文本为条件,短语 grounding 第一次端到端。
Grounding DINO
— Marrying DINO with Grounded Pre-Training
痛点 (b)(d):让 DINO 开放词汇——用类名或 referring expression 检测任意对象。
关键想法 三处紧融合:cross-modality feature enhancer、language-guided query selection(文本来挑哪些 encoder 特征当 decoder 的 anchor box 种子)、cross-modality decoder。box-query 家族现在由语言选 query,也是 Grounded-SAM 背后的开放词汇骨架。
在 DINO 的 box-query 上接语言条件,把封闭检测变成开放词汇 grounding。
§15Shikra / Ferret · VLM 里的文本坐标基线
进入 VLM 时代。最朴素的做法仍是让 LLM 把坐标当数字写。先看
两个代表性基线,再看 2025–2026 怎么把它彻底换掉。
Shikra
— Unleashing Multimodal LLM's Referential Dialogue Magic
痛点 (b):MLLM 不会在对话里指/引用一个区域。
关键想法 最纯粹的「LLM 写 x1 y1 x2 y2」基线——直接以普通数字文本输出坐标,不加新词表、不接检测器。简单、通用,但完全继承痛点 (a)(b)。
证明 MLLM 不靠任何专用模块也能做 referring dialogue——代价是坐标全靠隐式学。
Ferret
— Refer and Ground Anything Anywhere at Any Granularity
痛点 (b):只支持框太死,点、涂鸦、多边形怎么办?
关键想法 混合区域表示:离散坐标 token + 在区域上采样的连续特征融合,于是点 / 框 / 涂鸦 / 多边形都能当输入。
把单一框接口扩成任意形状的区域——开始往「连续特征」而非纯数字靠。
§16Groma / ChatRex · 用「选索引」代替「回归坐标」
Groma
— Localized Visual Tokenization for Grounding MLLMs
痛点 (b)(c):让 LLM 自己回归坐标太弱。
关键想法 把定位挪进视觉 tokenizer:先把图分解成一堆 ROI,编码成 region token;grounding 变成「引用某个 region token」,而不是吐数字。
把「写坐标」换成「指一个已编码的区域」——定位的脏活交回视觉侧。
ChatRex
— Taming MLLM for Joint Perception and Understanding
痛点 (b):回归和理解在同一个 LLM 里互相打架。
关键想法 解耦检索:一个通用 proposal 网络先给出框,LLM 只输出框的索引,把回归彻底变成选择题。
沿着 Groma 再走一步——LLM 连区域都不编码,只负责「选第几个框」。
§17MolmoPoint · 用 grounding token 直接指 visual token
这是 2025–2026 最贴合本文主题的一条线的旗舰:把「指哪里」变成模型内部的视觉操作,而不是背数字。
MolmoPoint
— Better Pointing for VLMs with Grounding Tokens
痛点 (a)(b):文本坐标 pointing 既要学复杂坐标系,又要 ~8 个 token 才点一个点。
关键想法 用层级式 grounding token 直接选 visual token,不写坐标。三个特殊 token 由粗到细:<PATCH> 在 visual token 上 attend 选出粗 patch,<SUBPATCH> 用更底层 ViT 特征细化,<LOCATION> 读出精确点。一个点从 8 token 压到 3 token,还更好学,PointBench 70.7%。
从 Molmo 的文本 2D-pointing,升级成「指针 token 直接 attend 视觉 token」的 coarse-to-fine 指点。
它的前身 Molmo / PixMo(Ai2, CVPR 2025,
2409.17146)已经会「指点」,
但还是用文本 2D 坐标格式 + PixMo 指点数据集训练;MolmoPoint 才把
接口换成视觉 token 指针。下面这个演示,让你看清「attention 指点」和「写数字」
的差别。
§18GUI-Actor · 坐标无关的 GUI grounding
GUI-Actor
— Coordinate-Free Visual Grounding for GUI Agents
痛点 (a)(c):GUI 里把 dense 像素坐标回归到 coarse ViT patch,空间-语义对齐弱、还表达不了「多个/模糊目标」。
关键想法 用 attention-based action head 取代坐标回归:一个专门的 <ACTOR> token 当 query,它对所有 visual patch token 的 attention 分布本身就是定位信号——一次前向取 top-K patch 当候选。再用一个轻量 verifier 给候选打分,点击点 = 打分加权的 patch 质心,于是不改 patch 大小也能 sub-patch 精度。7B 在 ScreenSpot-Pro 上 44.6,超过 UI-TARS-72B。
把「输出一个坐标数」换成「让一个 token 去 attend 该点的 patch」——Demo 4 演示的正是这个 head。
拆解 · attention head 怎么读出一个点
# GUI-Actor / pointer head:定位 = 一个特殊 token 的 attention 分布
actor = hidden_state_of("") # (d,) 专门的指针 token
attn = softmax(actor @ visual_tokens.T / tau) # (Npatch,) 在 patch 上的注意力
# 不生成任何数字坐标:直接读 attention
topk = attn.topk(k) # 候选 patch(可表达多目标/歧义)
score = verifier(image, topk.patches) # 轻量 VLM 给每块打 P(命中)
click = weighted_centroid(topk.centers, score) # 加权质心 → sub-patch 精度
§19RULER / GETok · 给模型一套「空间词汇」
RULER
— Improving GUI Grounding with Explicit Position-to-Coordinate Mapping
痛点 (a):隐式 patch→pixel 映射在没见过的高分辨率屏上会崩。
关键想法 往输入里插一排RULER token——像地图网格线一样的显式坐标标尺,与图像 patch 共享位置嵌入。模型于是「参考最近的标尺做有界算术」,而不是从抽象特征里硬回归坐标;再配 Interleaved M-RoPE 对称编码宽高。光微调就把 ScreenSpot-Pro 31.1%→37.2%。
不换接口,而是在图上「画网格线」让模型有参照物——直接打痛点 (a) 的分辨率泛化。
GETok
— Grounding Everything in Tokens for Multimodal LLMs
痛点 (b):图像的自回归 tokenization 限制了精确 2D grounding。
关键想法 造一套可学的空间词表:grid token 把图像平面切成结构化锚点,offset token 在锚点内迭代精修。把空间关系嵌进 token,完全不改自回归架构,SFT 和 RL 都能用。
把坐标显式化为「网格锚点 + 偏移」两类 token,等于给 AR 模型补了一套原生 2D 空间词汇。
§20LocateAnything · 并行原子框解码
LocateAnything
— Fast and High-Quality VL Grounding with Parallel Box Decoding
痛点 (b):逐 token 解码坐标既破坏框的几何耦合,又是串行推理瓶颈。
关键想法 Parallel Box Decoding:把每个框/点抬升为定长的原子单元,一步并行预测整组 $(x_1,y_1,x_2,y_2)$。因为四个坐标是联合约束的,串成 1D token 流就强加了假顺序、让早 token 的错误滚雪球;并行原子解码让监督对齐到这个耦合结构,顺带 ~2.5× 提速。
从「逐 token 写框」变成「一步吐一整个框」——Demo 2 勾选项里塌掉的那个框,正是它要消灭的。
§21Rex-Omni · 把检测做成「预测下一个点」
Rex-Omni
— Detect Anything via Next Point Prediction
痛点 (b):能不能用一个统一的「点」接口,把检测 / OCR / pointing / 关键点全包了?
关键想法 在 Qwen2.5-VL 上把所有任务统一成预测下一个点(离散坐标 token),再用几何感知的 RL 奖励闭合「离散↔连续」的缝、消重框。零样本在 COCO/LVIS 上能掰手腕 Grounding DINO。
承认坐标 token 这条路、但用 RL 奖励把它的几何短板补上——和 LocateAnything 是「修 vs 换」的两种答卷。
§22Slot Attention / VinVL · 先绑定物体
很多「分不清上下左右」的失败,根子不在像素坐标不够细,而在模型没稳定
绑定:哪个对象在哪个区域、和谁有什么关系。对象级表示能缓解它。
Slot Attention
— Object-Centric Learning with Slot Attention
痛点 (d):怎么从一张特征图里无监督地「数出」几个对象槽位?
关键想法 迭代式 attention 产出 $K$ 个可交换的 slot,每个 slot 通过竞争性 attention 绑定一个对象。「先把哪个物体在哪绑好,再谈关系」的原始 primitive。
把 CNN 特征整理成一组对象槽位,而非一张匿名特征图——对象-关系推理的干净起点。
更早的 VinVL(CVPR 2021,
2101.00529)则是「物体中心」的工程
祖先:用更好的 object-attribute 检测器产出 region feature,证明更强的区域
特征直接抬高下游 VL 任务——「先看到物体」在 LLM 时代之前就被验证过。
§23SAM / SAM 2 · 可提示分割
SAM / SAM 2
— Segment Anything (in Images and Video)
痛点 (d):能不能有一个「用 point / box / mask 提示就给你高质量 mask」的通用接口?
关键想法 image encoder + prompt encoder + mask decoder,支持点 / 框 / mask 提示输出高质量 mask,1B mask 数据集零样本迁移。SAM 不是 VLM,但它的 promptable 范式成了后面无数 region-centric VLM 的基座;SAM 2 加了视频 + 流式记忆。
把「分割」从固定类别变成「按几何提示生成」——几何(点/框/mask)第一次成了标准输入接口。
§24LISA · 用 <SEG> token 把语言接到像素
LISA
— Reasoning Segmentation via Large Language Model
痛点 (b)(d):要的不是「分割猫」,而是「分割图里能装水的东西」这种需要推理的 mask。
关键想法 让 LLM 吐一个特殊 <SEG> token,用它的 embedding 去条件一个 SAM 式 decoder 产出 mask。语言推理和像素 mask 第一次被一个 token 缝起来。
把 grounding 的输出从「框 / 数字」换成「一个能驱动分割器的 token」——pointer-token 思路在 mask 上的版本。
§25AURORA · 感知 token(视觉版 CoT)
另一条很有潜力的思路:别让 VLM 直接答空间问题,先让它生成可检查的空间中间表示(depth / mask / box token),再推理。
AURORA
— Perception Tokens Enhance Visual Reasoning in MLLMs
痛点 (c)(d):让 LLM 从 patch embedding 里「想象」深度和坐标,不可检查也不准。
关键想法 给 MLLM 加一类感知 token(perception token),是视觉版的 chain-of-thought:对 depth,训一个 VQ-VAE 编码深度图,把学到的 codebook 索引当离散 token 让 LLM 逐 token 吐出——模型字面意义上「画」出一张粗深度图,再据此推理;对 box 则用结构化坐标 token。BLINK +10.8%、CVBench +11.3%。
把「隐式想象几何」换成「显式生成可监督的深度/框中间 token」——空间版 CoT。
拆解 · 把一张深度图变成 LLM 能吐的 token
# 感知 token:用 VQ-VAE 把 dense depth 压成离散 codebook 索引序列
z = depth_encoder(depth_map) # 连续特征
idx = vq_codebook.nearest(z) # (h*w,) 量化成 codebook 索引
tokens = [""] + idx.tolist() + [""] # 当普通 token 接进序列
# LLM 像写字一样自回归生成这些 depth token,再据此回答空间问题:
answer = llm.generate(question, image_tokens + tokens)
# 关键:中间的几何是"画出来、可监督、可检查"的,而不是藏在 embedding 里
§26Perceptio / 视觉 CoT · 把感知 token 做深
Perceptio
— Perception Enhanced VLMs via Spatial Token Generation
痛点 (c)(d):感知 token 还能更稳、更细到 2D+3D 吗?
关键想法 在 InternVL 上「先吐空间 token,再答题」:从强单目深度教师蒸馏出一个 VQ-VAE 深度码本(更稳),并把 SAM2 分割 token 和深度 token 一起自回归生成;再加 marker / token / count 复合损失稳住生成。RefCOCO 系 +0.8~1.4 cIoU,BLINK 空间 +10.3%。
比 AURORA 更进一步:蒸馏深度码本 + 加分割 token + 稳定化损失,把感知 CoT 做到 2D/3D 双管。
同期 Chain-of-Visual-Thought(CoVT,
2511.19418)走连续路线:
从分割 / 深度 / DINO / 边缘等轻量专家蒸馏出约 20 个连续视觉
token,在隐空间里做视觉 CoT,CV-Bench depth +14~16%。离散(Perceptio)还是
连续(CoVT),是这条线眼下的主要分叉。
§27SpatialVLM · 用数据引擎教会 3D 空间
「上下左右」只是 2D。要真正分清 front/back、near/far、occlusion,必须显式
引入 depth / camera / 3D。这一部是物理世界空间准确性的根本方向。
SpatialVLM
— Endowing VLMs with Spatial Reasoning Capabilities
痛点 (d):VLM 做不了 metric 3D 推理(距离、尺寸),因为训练数据本身没 3D 标注。
关键想法 不改架构,改数据:搭一条引擎,用开放词汇检测 + 分割抠出物体区域,用单目 metric depth 把每个区域抬成 metric 点云,再 canonicalize 到真实米制坐标系;从 3D 算出距离 / 高度 / 左右 / 「X 能否穿过 Y」当 GT,模板化成 ~20 亿条空间 QA。能力来自合成数据,而非新结构。
第一次系统性证明:VLM 缺的不是架构,是大规模带 3D ground-truth 的空间监督。
§28SpatialRGPT · 区域级 + depth 插件
SpatialRGPT
— Grounded Spatial Reasoning in VLMs
痛点 (d):VLM 不会做区域为单位的相对方向 / 距离。
关键想法 两件事:用 3D scene graph 学区域表示;给冻结 VLM 的视觉 encoder 接一个轻量 depth 插件。推理时吃用户给的 region proposal(框 / mask),还能当机器人的区域级奖励标注器。
把 depth 做成可插拔模块接进现成 VLM,并显式吃区域提示——比纯 2D PE 多了一条几何 stream。
§29RoboSpatial · 参考系才是隐藏杀手
RoboSpatial
— Teaching Spatial Understanding to Robotics VLMs
痛点 (d):通用数据缺机器人级空间监督,尤其是参考系的处理。
关键想法 1M 图 + 5K 3D 扫描 + 3M 关系,每条 QA 都在三种参考系下提问,训 2D 和 3D VLM 做 affordance / 关系 / 操作。它把一个长期被糊弄的问题摆上台面:「杯子左边」到底以谁为原点。
不止补 depth,更显式标注「以谁为参考系」——坐标再准,参考系错了照样答错。
拆解 · 什么是参考系(reference frame)
参考系 = 量「左右前后」时用的原点 + 坐标轴。同一句「杯子的左边」,
三种参考系给三种答案:egocentric(以相机/你为准,「左」=你的左)、
object-centric(以杯子自身朝向为准,杯子有自己的「正面」)、
world-centric(以房间/重力等固定全局轴为准)。一个正面朝你的
杯子,它自己的左恰好是你的右——这就是歧义的来源。Demo 5 让你
亲手切换参考系,看同一句话的「左边」区域怎么翻面。
§30SpatialBot / RoboPoint / VSI-Bench · 配套生态
SpatialBot · RoboPoint · VSI-Bench · SpatialLM
— depth-API、可操作点、视频空间基准、点云→结构化场景
痛点 (d):3D 空间能力需要配套的输入接口、可操作输出、和能照出短板的基准。
关键想法 SpatialBot 喂 RGB+depth 并开放 Depth API 让模型主动查像素深度;RoboPoint 直接预测可操作的 2D 关键点 affordance;VSI-Bench / Thinking in Space 是视频空间智能基准,发现「语言 CoT 没用、显式认知地图才有用」;SpatialLM 吃点云直接吐结构化 3D 场景(墙/门/带朝向的物体框)。
从「单模型」扩成「输入(depth)+输出(point/scene)+评测(VSI)」的完整 3D 空间栈。
§31几何感知 encoder · 在融合语言前就懂空间
FiT3D · Geometric Distillation · VEGA
— 把 3D 几何蒸进视觉 encoder,再喂 VLM/VLA
痛点 (c)(d):与其在 LLM 端补空间,不如让视觉 encoder 在融合语言之前就带几何 awareness。
关键想法 FiT3D 用 3D Gaussian 监督把 DINOv2 特征「3D 化」;Geometric Distillation 从 MASt3R / VGGT 蒸出对应关系、相对深度、cost-volume 进 VLM encoder;VEGA 把 VLA 的视觉 encoder 对齐到这类空间感知特征,且对齐投影在推理时可丢弃(零额外开销)。
把「几何显式化」从输出/接口层下沉到 encoder 表示层——让 visual token 一出生就带 3D。
引用诚实性 · ⚠️
VEGA(2605.10485)与 GR3D(§36, 2605.30307)的
arXiv ID 已经 arXiv API 核对存在、作者与方向吻合;但「VEGA 用 DINOv2-FiT3D 作
teacher」「GR3D 这个别名」这两个细节是单一摘要来源,正式引用前建议再扫一眼
PDF。本站对 2026 年的工作统一打 mustard 标签提示「新、
待二次确认」。
§32Vision Mamba / VMamba · 不用 attention 的 backbone
Vision Mamba · VMamba · V2M
— 2D state-space 视觉骨干
痛点 (a):self-attention 二次复杂度吃不起高清 dense 视觉;是不是非 attention 不可?
关键想法 用线性复杂度的 state-space(Mamba)替代 attention。Vim 用双向 Mamba block;VMamba 的核心是 2D Selective Scan(SS2D);V2M 则批评前两者仍把 2D flatten 成 1D,主张把 SSM 的递推本身推广到二维。
证明「视觉表示学习不一定需要 self-attention」——但它仍处理 patch token,「有方向 scan」≠「能精确输出坐标」。
拆解 · SS2D 怎么把 1D 扫描救回 2D 局部性
把 $H\times W$ 特征图按行主序拍成 1D,两个上下相邻的像素会相隔 $H$
步,1D 因果 SSM 会当它们很远、永远建不起这条邻接。VMamba 的
cross-scan 让 SSM 沿四条互补路线各扫一遍——
左→右、右→左、上→下、下→上——再把四张输出图逐元素合并回 2D。四次
扫描给每个 token 四套不同的因果邻居,合并后它的状态就聚合了来自四个方向的
上下文,以线性代价近似 attention 的全局感受野。
§332D RoPE / M-RoPE · 用旋转编码位置
RoPE-ViT · M-RoPE (Qwen2-VL)
— 把相对位置做成旋转
痛点 (a)(c):可学绝对 2D PE 绑死网格大小、换分辨率要插值、还会被语义淹没。
关键想法 RoPE 不是加一个位置向量,而是按位置旋转 query/key 的每个 2D 子块。关键代数事实:$\langle R(m\theta)q,\,R(n\theta)k\rangle=\langle q,\,R((n-m)\theta)k\rangle$——注意力分数只依赖相对偏移 $n-m$。2D RoPE 把维度分两组,一组按 $x$ 转、一组按 $y$ 转(axial);Qwen2-VL 的 M-RoPE 再把位置索引本身推广成 $(t,h,w)$ 三元组,文本三者同步、图像 patch 拿各自的 $(t,h,w)$。
从「加一份绑死网格的可学表」换成「按坐标旋转、天然外推到新分辨率」的连续位置函数。
拆解 · 为什么旋转 = 相对位置 + 能外推
对比着记:绝对 2D PE 是一张和内容相加的查找表,编码绝对
格子、绑死网格大小、换分辨率必须插值(常常有损)。RoPE 因为是
坐标的连续函数、且分数只看 $n-m$,把整张图平移一个常数 $\Delta$,每个
$n-m$ 不变($(n+\Delta)-(m+\Delta)=n-m$),所以它天然平移等变、也天然外推。
§34位置信号被淹没 · 这条线的诊断书
Beyond Semantics
— Rediscovering Spatial Awareness in Vision-Language Models
痛点 (c):VLM 明明有 PE、encoder 特征也含空间信息,为什么空间推理还是差?
关键想法 给出机制级答案:visual token 的 embedding 范数远大于 text token,把 LLM 的 RoPE 位置信号压了下去,视觉 token 退化成一袋无序语义。他们设计三个探针(位置敏感度、跨模态平衡、RoPE 敏感度)定位问题,并用「归一化 visual embedding 范数 + 取中层特征」直接修复。
不是又造一个模型,而是诊断出「为什么有 PE 还说不准」的根因——全站痛点 (c) 的出处。
§35NaViT / 等变 ViT · 原生分辨率与方向一致性
NaViT · SigLIP 2 / NaFlex
— 原生分辨率 / 任意长宽比
痛点 (a):固定分辨率方resize 既浪费算力又扭曲长宽比,伤害 grounding / 文档。
关键想法 NaViT 用「Patch n' Pack」把不同分辨率/长宽比的图打包进一条序列、配 factorized PE 做原生分辨率训练;SigLIP 2 / NaFlex 让一个 ViT 支持多种序列长度、保持原生长宽比。直接缓解痛点 (a) 的分辨率脆性。
不再把所有图压成正方形——让 encoder 见到的位置网格更贴近真实几何。
GE-ViT
— E(2)-Equivariant Vision Transformer
痛点 (d):关心旋转/翻转一致性时,绝对位置 attention 不具平移等变,难学几何等变。
关键想法 造一个群等变的位置编码算子,对平移、旋转、反射(E(2) 群)给出可证明的等变性。注意区分:你通常不想要旋转不变(那会抹掉「按钮在左上还是右下」),而想要等变——图转了,内部表示和输出坐标按同样方式转。
把「位置该怎么变换」从隐式学习变成结构上的群等变约束——方向敏感任务的另一条思路。
§36Frontier 2026 · 两大阵营的收敛
把窗口收到 2025-09 → 2026-05,会看到一个清晰的格局:还没有
单一架构取代 ViT+2D PE,但形成了两大阵营 + 一层连接组织。下面
几张卡是这个窗口里、尚未被前面家族收编的最新工作(全部 mustard)。
SR3D → GR3D
— 统一 2D grounding 与单目 3D 的空间 VLM
痛点 (d):2D grounding 与 3D 推理各做各的,没统一。
关键想法 SR3D 用共享的 2D/3D 视觉 token 空间、给 2D 特征注入 3D 位置嵌入,野外视频无需 GT 3D 即可用。后续 GR3D 把三种 grounding 拢进一个模型:显式 2D、隐式 2D(推理途中往文本流插 region token)、区域提示的单目 3D 框。这对工作是当前「坐标原生 + 3D」最连贯的研究线。
把第六部的 depth/参考系思路,和第四部的 region/pointer token 思路,缝进同一个模型。
N3D-VLM · LocateAnything3D · G²VLM · HiSpatial
— 原生 3D grounding 与几何统一
痛点 (d):把 2D 标注抬到原生 3D、并和重建/几何统一。
关键想法 N3D-VLM 用 depth 把 2D 标注抬成 3D,联合训 3D 定位 + 3D-CoT;LocateAnything3D 把单目 3D 检测做成「下一个视线」式 next-token;G²VLM 把几何基元的重建与推理统一;HiSpatial 做层级 3D 空间理解,自称在 RoboSpatial / SpatialRGPT 基准上超 Gemini-2.5-Pro / GPT-5(强主张、单一来源,幅度待核)。
把「3D-aware VLM」从单点能力推向「原生 3D 定位 + 几何统一」的成体系尝试。
MHRoPE / MRoPE-Interleave · Circle-RoPE
— 重新审视多模态位置编码
痛点 (c):M-RoPE 的设计(位置一致性 / 全频段 / 文本先验)到底哪些重要?
关键想法 Revisiting 提出 MHRoPE(按轴分头)与 MRoPE-Interleave(轮转分配通道),系统分析 MRoPE 设计原则——Qwen3-VL 已采用 MRoPE-Interleave;Circle-RoPE 用锥形解耦图像与文本位置,削减跨模态位置偏置。这是连接两大阵营的「位置编码」基础设施。
把 M-RoPE 从「Qwen2-VL 的一个 trick」上升为可分析、可改良的设计空间。
2026 全景 · 一句话
两大阵营:(1) grounding/pointer-token 阵营(MolmoPoint、
GUI-Actor、GETok、RULER)保留 LLM,但把「写文本坐标」换成「选 token / 原子
块」——其中 LocateAnything 的并行原子框解码是 2026 最具架构辨识度
的一笔;(2) 3D 位置嵌入阵营(SR3D→GR3D、N3D-VLM)把 3D PE 注入
视觉 token 空间。连接两者的是新一轮 M-RoPE 研究(MHRoPE / MRoPE-Interleave)
与几何感知 encoder(FiT3D / Geo-Distill / VEGA)。
§37仍然没解决的问题
把整条线扫一遍,留下来的硬骨头大致是这几块:
- 没有公认的「坐标原生 VLM」架构。截至 2026,强 VLM 仍以 patch/ViT 为底,几何显式化是「外挂」而非「内生」。一个像 ViT 之于分类那样的事实标准还没出现。
- 离散 vs 连续的感知 token 之争未决。Perceptio(离散 VQ)和 CoVT(连续)谁更对,还没定论;离散可监督但有损,连续可微但难解释。
- pointer/atomic token 的开放性。grounding token 在固定 patch 网格上指点,遇到极端高清、超长宽比、密集小目标时的上限还没摸清。
- 3D 监督仍依赖单目深度估计的质量。SpatialVLM 一系的 GT 来自 off-the-shelf depth/detection,深度估计错了,合成 QA 就错。
- 参考系仍是脆点。RoboSpatial 把问题摆上台面,但「自动从语言判断该用哪种参考系」远未鲁棒,跨 embodiment 更难。
- 等变 vs 不变没被通用 VLM 认真对待。方向敏感任务想要等变、不想要旋转不变,但主流训练配方里几乎没有这一约束。
- 几何感知 encoder 的可移植性。FiT3D / VEGA 这类「把 3D 蒸进 encoder」很漂亮,但能否在不损通用语义的前提下规模化、即插即用,仍待验证。
总结一句话
整条线可以浓缩成两件事:(a) 怎么把坐标放进去 → 参考点 /
box query / grounding token / depth / 参考系;(b) 怎么把坐标取出来
→ 别让 LLM 写文本数字,改成指 visual token、原子并行解框、或生成可监督的感知
token。所有论文,都是在「显式几何进、显式几何出」这张图的某个角落上一颗螺丝——
而「完全非 patch 的通用 VLM」还没成为主流,「几何显式化的 VLM」已经是明确趋势。
§A名词表 · Glossary
| 术语 | 解释 |
| patch / visual token | 把图切成的小方块,过线性层后成为喂给 Transformer 的一个向量。 |
| 2D positional encoding (PE) | 给每个 patch 注入其 (行,列) 位置的编码,常以「加在内容向量上」的弱偏置形式存在。 |
| grounding | 把语言指称对应到图像中的具体区域 / 框 / 点 / mask。 |
| reference point | Deformable DETR 给每个 query 配的 2D 锚点,attention 只在其周围采样。 |
| box query | DAB-DETR 把 (x,y,w,h) 整个框当成 decoder 的 query,逐层精修。 |
| deformable attention | 围绕参考点采少数 K 个点、双线性插值取值的稀疏 attention,复杂度与分辨率无关。 |
| pointer head / grounding token | 用一个特殊 token 的 attention 分布或选择来「指点」,而非输出文本坐标。 |
| atomic / parallel box decoding | 把一个框当定长原子单元一步并行解出,保持 (x,y,w,h) 的几何耦合。 |
| perception token | 把 depth / seg / box 等中间几何表示编码成 LLM 能生成的离散/连续 token(视觉版 CoT)。 |
| reference frame | 量「左右前后」用的原点+坐标轴:egocentric / object-centric / world-centric。 |
| RoPE / M-RoPE | 用旋转编码位置,使注意力分数只依赖相对偏移;M-RoPE 把索引推广成 (t,h,w)。 |
| SS2D / cross-scan | VMamba 沿四个方向各扫一遍再合并,给 SSM 补回 2D 局部性。 |
| equivariance / invariance | 等变=输入变换则输出按同样方式变换;不变=输出不随输入变换改变。方向任务要前者。 |
| metric depth | 以米为单位的绝对深度(区别于相对深度),3D 空间推理的关键输入。 |
§B推荐阅读顺序
这是教学顺序,不是时间顺序——按「理解链条」而非发表年份排。
- CoordConv(§6)—— 先建立「patch/conv 天生坐标盲」的直觉,全篇地基。
- DETR(§7)—— 看「query 没有几何」的原始病灶。
- Deformable DETR(§10)—— reference point 第一次登场,配 Demo 3。
- DAB-DETR(§12)—— 「框作为 query 逐层精修」,整条家族的主干伪代码。
- Pix2Seq / Kosmos-2(§8)—— 理解「坐标当 token」的 baseline,才懂后面在反对什么。
- Beyond Semantics(§34)—— 「为什么有 PE 还说不准」的机制诊断书。
- MolmoPoint + GUI-Actor(§17–18)—— pointer head 的两个代表,配 Demo 4。
- LocateAnything(§20)—— 并行原子框解码,回收 Demo 2 的痛点。
- SpatialVLM + RoboSpatial(§27, §29)—— 3D 与参考系,配 Demo 5。
- 2D RoPE / M-RoPE(§33)—— 用旋转把相对位置做对,配 Demo 6。