跳到主要内容

AGILE:遮挡下的手-物交互跟踪(2026-02)

论文:AGILE(2026-02,据参考材料)
论文全名 / arXiv / 项目主页 / 代码:参考材料未提供,待补充

这篇论文解决什么问题

AGILE 做的是视频级的手-物交互(hand-object interaction)跟踪:输入一段手抓物体(例如瓶子)的视频,逐帧估计:

MANO 手模型参数(姿态、尺度、平移)
物体的 6-DoF pose(旋转 R_o、平移 T_o,可能带各向异性尺度 s_o)

核心难点是手对物体的严重遮挡:手抓住瓶子时,瓶子的大部分表面看不到,普通的外观 / 轮廓约束都会失效。

AGILE 的思路是组合多个互补的约束,逐帧做 test-time 优化:

手的位置/姿态     -> 2D 关节点重投影
物体轮廓 -> SAM2 mask 对齐
物体朝向/局部语义 -> DINO 3D-2D 语义对应
手-物相对关系 -> 交互稳定性(物体跟着手走)

一句话版本

AGILE 每帧先用手部关节点把 MANO 手拟合好,再在“手已固定”的前提下,用 mask、DINO 语义对应、抓取相对位置三个损失把物体 pose 拟合出来;当物体被手大面积遮挡时,让“手”充当物体的代理跟踪器。

两步逐帧优化

每帧的跟踪分两步:

Step 1:优化手

固定 RhR_hshs_h(手的旋转与尺度),主要优化手的平移 ThT_h,用关节重投影损失 LjointL_{\mathrm{joint}} 让 MANO 手投影后的 2D 关节点贴合图像检测到的关键点。

Step 2:优化物体

手 pose 已固定,优化物体的旋转、平移(RoR_oToT_o),用三个损失:

L_mask     物体轮廓对齐(SAM2 mask)
L_dino 物体表面点与图像语义位置对齐(DINOv3)
L_interact 抓取区域在手-物相对坐标中保持稳定

核心组件

组件作用
MANO手模型,提供 21 个 3D 手关节点 J3DJ_{3D}
SAM2提供物体的 2D 分割 mask MgtM_{\mathrm{gt}}
DINOv3提供稠密语义特征,建立“canonical 3D 点 ↔ 图像 2D 位置”的对应

四个损失

1. 关节重投影损失(管手的位置)

Ljoint=1Nji=1NjΠ(J3D(i))J2D(i)22L_{\mathrm{joint}} = \frac{1}{N_j}\sum_{i=1}^{N_j}\left\|\Pi\bigl(J_{3D}^{(i)}\bigr) - J_{2D}^{(i)}\right\|_2^2

其中:

  • J3D(i)J_{3D}^{(i)}:MANO 的第 ii 个 3D 手关节点;
  • J2D(i)J_{2D}^{(i)}:图像中检测到的对应 2D 关节点;
  • Π()\Pi(\cdot):相机投影,Nj=21N_j = 21

透视投影可以理解为:

[X,Y,Z][fxXZ+cx, fyYZ+cy][X, Y, Z]^{\top} \mapsto \left[f_x \frac{X}{Z} + c_x,\ f_y \frac{Y}{Z} + c_y\right]

这一项的本质:让 3D 手投影后与图像中的手一致。在 Step 1 中 RhR_hshs_h 固定,主要就是在优化 ThT_h

2. Mask 对齐损失(管物体的轮廓)

Lmask=ArenMgt22L_{\mathrm{mask}} = \left\|A_{\mathrm{ren}} - M_{\mathrm{gt}}\right\|_2^2

其中:

  • MgtM_{\mathrm{gt}}:SAM2 得到的真实物体 mask;
  • ArenA_{\mathrm{ren}}:当前 3D mesh 按 RoR_oToT_o 渲染出的 alpha silhouette。

它约束物体的投影位置、大小和轮廓:真实 mask 与渲染 silhouette 越重合越好。

为什么它能处理遮挡:AGILE 比较的是可见 silhouette,只要 GT mask 正确处理了遮挡边界,渲染物体的可见区域就会尽量贴合真实观察。

它的明显缺陷:mask 不太能约束物体朝向。例如近似圆柱的瓶子,R=0R = 0^{\circ}R=180R = 180^{\circ} 可能得到几乎一样的 silhouette,Lmask0L_{\mathrm{mask}} \approx 0 但 logo 方向完全错了。所以还需要 LdinoL_{\mathrm{dino}} 约束语义和纹理方向。

3. DINO 语义对应损失(管物体的朝向 / 局部语义)

思路:用 DINOv3 特征建立“物体表面 3D 点 ↔ 当前图像 2D 位置”的语义对应,再反过来优化物体 pose。这比 mask 更细:mask 只管轮廓,DINO 管“物体某个具体部位应该投影到哪个位置”。

步骤:

第一步:在 canonical mesh 上采样 3D 点。

Pcan={pi}i=1NpP_{\mathrm{can}} = \{p_i\}_{i=1}^{N_p}

pip_i 是 canonical object coordinate 下的 3D surface points(例如瓶盖上的点、logo 上的点、瓶身上的点),固定贴在 mesh 上。

第二步:给每个 3D 点建一张 DINO similarity map。

把 mesh 渲染成一张图,取 pip_i 对应位置的 DINO feature fif_i;真实视频帧过 DINO 得到 FgtRHf×Wf×CF_{\mathrm{gt}} \in \mathbb{R}^{H_f \times W_f \times C}。然后让 fif_i 与真实图像每个位置的 feature 做相似度:

Si(x,y)=sim(fi, Fgt(x,y))S_i(x, y) = \mathrm{sim}\bigl(f_i,\ F_{\mathrm{gt}}(x, y)\bigr)

SiRHf×WfS_i \in \mathbb{R}^{H_f \times W_f} 就是一张热力图:“真实图像里哪个位置最像 mesh 上的这个 3D 点?”

第三步:按当前 pose 投影 3D 点。

正在优化 RoR_oToT_o,3D 点先经过(可能是各向异性的)尺度,再旋转平移:

Xi=Ro(sopi)+ToX_i = R_o\,(s_o \odot p_i) + T_o

注意这里用 \odot(逐元素乘),因为可能是 anisotropic scale,即 x / y / z 三个方向可分别缩放。再投影:

ui=Π(Xi)u_i = \Pi(X_i)

uiu_i 就是按当前 pose,“作者认为这个 surface point 应该出现在图像中的位置”。

第四步:在 similarity map 上查分数,加遮挡 mask。

如果 pose 是对的,pip_i 应该正好投影到真实图像中对应语义部位,Si(ui)S_i(u_i) 应该很高;pose 错了(例如 logo 点被投到瓶子背面),Si(ui)S_i(u_i) 就很低。

Ldino=1ViVMocc(ui)sample(Si,ui)L_{\mathrm{dino}} = -\frac{1}{|V|}\sum_{i \in V} M_{\mathrm{occ}}(u_i) \cdot \mathrm{sample}(S_i, u_i)

其中:

Mocc(u)={1,可见0,被遮挡M_{\mathrm{occ}}(u) = \begin{cases} 1, & \text{可见} \\ 0, & \text{被遮挡} \end{cases}

为什么前面有负号:优化器最小化 LL,但希望 similarity 越大越好,所以写成 similarity-\text{similarity}min(S)maxS\min(-S) \Longleftrightarrow \max S

为什么需要 MoccM_{\mathrm{occ}}:如果某个瓶身点被手挡住,Mocc=0M_{\mathrm{occ}} = 0 就不参与 loss,否则系统可能强迫一个“实际看不见的物体点”去匹配手上的 DINO feature,把 pose 拉错。所以只相信当前可见的 object points。

整体链条:

p_i (3D canonical) -> f_i -> S_i(x, y) -> 真实图像中的对应 2D 区域
p_i (3D canonical) -> 当前 pose 投影 -> u_i (2D)
要求:u_i 落在 S_i 的高响应区域

为什么用 DINO 而不是普通 RGB:RGB loss IrenderIgt\|I_{\mathrm{render}} - I_{\mathrm{gt}}\| 容易受光照、阴影、高光、曝光影响;DINO feature 偏语义和结构,亮一点 / 暗一点通常不会让 feature 完全失效,所以跟踪更稳定。

4. 交互稳定性损失(管手-物相对关系)

核心思想一句话:抓住物体以后,手和物体的相对位置应该基本保持不变。当物体被手严重遮挡、仅靠 mask / DINO 不够稳定时,用这个物理先验约束物体。

为什么把手变换到 object coordinate:

tt 帧手顶点在 camera coordinate 中是 vh,i(t)v_{h,i}^{(t)},物体 pose 是 Ro(t)R_o^{(t)}To(t)T_o^{(t)}。把手顶点变换到物体局部坐标:

v~h,i(t)=(Ro(t))(vh,i(t)To(t))\tilde{v}_{h,i}^{(t)} = \bigl(R_o^{(t)}\bigr)^{\top}\bigl(v_{h,i}^{(t)} - T_o^{(t)}\bigr)

这就是对 Xc=RoXo+ToX_c = R_o X_o + T_o 做逆变换 Xo=Ro(XcTo)X_o = R_o^{\top}(X_c - T_o)

如果手和物体真的一起刚性运动,那么虽然它们在 camera coordinate 中一直移动(vh(t)vh(t1)v_h^{(t)} \neq v_h^{(t-1)}),手相对于物体的位置应该基本不变:

v~h(t)v~h(t1)\tilde{v}_h^{(t)} \approx \tilde{v}_h^{(t-1)}

例子:手指一直捏着瓶盖,整体向右移动,手的 3D 坐标当然变了;但换到瓶子坐标系后,手指相对瓶盖的位置没变。

不是所有手顶点都该被锁住:

拇指、食指正在抓瓶子,小指离瓶子很远,显然不能要求整只手都与物体保持固定相对位置。所以给每个手顶点一个权重 wiw_i:靠近物体表面 wi1w_i \approx 1,离得远 wi0w_i \approx 0

用物体 SDF 判断远近:

di=max(0, Φ(v~h,i(t1)))d_i = \max\bigl(0,\ \Phi(\tilde{v}_{h,i}^{(t-1)})\bigr)

Φ(x)\Phi(x) 是带符号距离函数(表面 Φ=0\Phi = 0,外部 Φ>0\Phi > 0,内部 Φ<0\Phi < 0)。手点就在表面附近时 di0d_i \approx 0,离得很远时 di0d_i \gg 0

再把距离转成权重:

wi=1tanh(σdi)w_i = 1 - \tanh(\sigma\, d_i)
  • di=0d_i = 0tanh(0)=0\tanh(0) = 0wi=1w_i = 1,接触点强约束;
  • did_i \to \inftytanh(σdi)1\tanh(\sigma d_i) \to 1wi0w_i \to 0,远处手点基本不管;
  • σ\sigma 控制衰减速度。

最终:

Linteract=1Ni=1Nwiv~h,i(t)v~h,i(t1)2L_{\mathrm{interact}} = \frac{1}{N}\sum_{i=1}^{N} w_i \left\|\tilde{v}_{h,i}^{(t)} - \tilde{v}_{h,i}^{(t-1)}\right\|^2

含义:对上一帧靠近物体的手顶点,要求它们在 object coordinate 中的位置不要发生太大变化,contact region 在 object frame 中保持稳定。

它实际上怎么约束 object pose:

Step 2 中手 pose 已固定,vh,i(t)v_{h,i}^{(t)} 基本固定;但 v~h,i(t)\tilde{v}_{h,i}^{(t)} 依赖 Ro(t)R_o^{(t)}To(t)T_o^{(t)}。如果物体 pose 跑偏,手在 object coordinate 中的位置会突然变化,LinteractL_{\mathrm{interact}} 变大,优化器就会把物体拉回来。本质是:

物体应该跟着抓它的手一起运动

一个值得注意的细节:

这其实不是严格的 contact loss,而更像 relative-pose stability loss:它没有明确要求 finger surface = object surface,而是利用上一帧已经建立好的手-物相对关系,要求当前帧不要突然改变,因此非常适合 tracking。

遮挡下的分工

三个物体损失各管一件事:

L_mask     轮廓位置
L_dino 语义 / 朝向
L_interact 抓取时的物理相对关系

如果物体 80% 被手遮住:

  • LmaskL_{\mathrm{mask}}:可用信息变少;
  • LdinoL_{\mathrm{dino}}:可能找不到可靠 feature;
  • 但手依然能通过 2D joints 追踪。

于是 hand tracking → LinteractL_{\mathrm{interact}} → object tracking,手成为物体的“代理 tracker”。

值得注意的细节

  1. sopis_o \odot p_i 是逐元素(各向异性)缩放,不是整体标量尺度。
  2. DINO 对应比 photometric loss 对光照变化更鲁棒。
  3. LinteractL_{\mathrm{interact}} 是相对位姿稳定性 loss,不是严格接触 loss。
  4. MoccM_{\mathrm{occ}} 让 loss 只相信当前可见的物体点,避免被遮挡点把 pose 拉错。

官方资料

参考材料中未提供 AGILE 的论文全名、arXiv 编号、项目主页或代码链接,待补充。