跳转至

SL-HOI:精简化的开放词表人-物交互检测

会议: CVPR 2026
论文: CVF Open Access
代码: https://github.com/MPI-Lab/SL-HOI
领域: 目标检测 / 人-物交互检测
关键词: 开放词表HOI, DINOv3, 单VLM检测, 语义自举, 表征鸿沟

一句话总结

SL-HOI 只用一个冻结的 DINOv3(dino.txt 变体)做开放词表 HOI 检测——用 backbone 做精细定位、用文本对齐的 vision head 做开放词表交互分类,并通过"把交互查询和图像 token 一起塞进冻结 vision head"来弥合两者的表征鸿沟,仅训练少量参数就在 SWiG-HOI 和 HICO-DET 上刷到 SOTA。

研究背景与动机

领域现状:开放词表 HOI 检测要在一张图里定位所有"人-物对"并识别它们的交互动作,且要能识别训练时没见过的交互类别。当前主流靠预训练 VLM 来获得泛化能力,分两派:一派(VLM-collaborated)是"传统 HOI 检测器 + VLM"协作,VLM 主要负责把可泛化的交互表征喂给检测器;另一派(VLM-only)直接把一个 VLM 改造成既做检测又做分类的 HOI 检测器。

现有痛点:第一派要训练两个独立模型,结构复杂,而且两个模型之间的特征融合很难——因为跨模型表征存在巨大鸿沟(cross-model representation gap)。第二派通常基于 CLIP,但 CLIP 的训练目标是对齐"整图 vs 整句"的全局特征,提取不出做实例定位所需的细粒度区域特征,所以检测精度往往偏弱。

核心矛盾:HOI 检测同时需要两种性质相反的特征——精细的局部定位特征(找准人/物的框)和整体的关系语义特征(理解交互、并能开放词表泛化)。把这两件事拆给两个模型会带来跨模型鸿沟;塞进一个 CLIP 又顾此失彼。

切入角度:作者观察到 dino.txt(DINOv3 + vision head 的图文对齐变体)内部天然存在"功能分工":可视化最后一个自注意力块的注意力图发现,DINOv3 backbone 的注意力高度聚焦在小而具体的区域(适合定位),而 vision head 的注意力是整体性的、会聚合全图的关系上下文(适合交互分类)。既然一个模型内部就同时具备这两种互补特征,何必再外挂第二个模型?

核心 idea:用单一冻结 DINOv3 同时承担定位与分类——backbone 出细粒度特征做检测、vision head 做开放词表分类;并通过"让交互查询和图像 token 共享同一条冻结 vision head 的前向通路"来消除两者的表征鸿沟。整个 DINOv3 全程冻结,只加少量可训练参数。

方法详解

整体框架

SL-HOI 是一个建立在冻结 DINOv3(dino.txt 变体,ViT-L/16)之上的单阶段(one-stage)框架。输入一张图 \(I\in\mathbb{R}^{H\times W\times 3}\),冻结的 backbone 产出图像 token \(X_b\in\mathbb{R}^{N\times D}\),这些 token 同时供给两条分支:

  • 检测分支(沿用标准 HOI 检测解码器):先降维、加位置编码、过一个 detection adapter,再用一组人查询 \(Q_h\) 和一组物查询 \(Q_o\) 做交叉注意力,得到 \(E_h, E_o\) 回归人/物框。这条分支是脚手架,沿用已有设计。
  • 交互分类分支(本文核心贡献):把 \(E_h, E_o\) 逐元素平均、投影成初始交互查询 \(Q_r\);关键一步是把 \(Q_r\) 和 backbone 图像 token \(X_b\) 一起送进冻结 vision head(而不是只送图像 token),得到语义增强的查询 \(Q_r'\) 和被查询调制过的图像 token \(X_{\text{head}}\);最后用一个可学习的 cross-attention block 让 \(Q_r'\) 重新 attend 到 \(X_{\text{head}}\),得到 \(E_r\) 做开放词表分类。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400}}}%%
flowchart TD
    A["输入图像 I"] --> B["冻结 DINOv3 backbone<br/>出图像 token X_b"]
    B --> C["检测分支<br/>adapter + 人/物查询解码<br/>→ 框 + 初始交互查询 Q_r"]
    B --> D["互补分工:单 DINOv3 同时供给定位与分类"]
    C --> E["语义自举<br/>[Q_r; X_b] 一起进冻结 vision head<br/>→ Q_r′ 与 X_head"]
    D --> E
    E --> F["层级精炼<br/>可学习 cross-attn:Q_r′ 重 attend X_head<br/>→ E_r"]
    F --> G["与类别文本嵌入算余弦相似度<br/>→ 开放词表交互类别"]

关键设计

1. 互补分工:用单一冻结 DINOv3 同时承担定位与分类

这一设计针对的是"两个模型→跨模型鸿沟 / 单 CLIP→定位弱"的两难。作者把 dino.txt 拆成两个互补部件并各取所长:DINOv3 backbone 经大规模自监督预训练、配合 Gram anchoring 保留稠密空间细节,注意力聚焦在小区域,因此拿它的 patch token 做 key/value、配一个小检测解码器来定位人和物;vision head(两个自注意力块,把 class token / register token / patch token 联合处理后投影到文本嵌入空间)注意力是整体性的、富含关系上下文,因此用它做开放词表交互分类。关键在于全部 DINOv3 参数都冻结,只加少量可训练参数(detection adapter、检测解码器、最后一个 cross-attention block),所以既保住了自监督特征的质量,又能快速适配 HOI 任务。这与 VLM-only 派的本质区别是:别人用的是 CLIP 这种"全局对齐"的 VLM,定位先天不足;SL-HOI 用的 DINOv3 backbone 本来就为稠密预测而生。

2. 语义自举:把交互查询塞进冻结 vision head 弥合表征鸿沟

这一设计针对核心痛点——交互查询 \(Q_r\) 和 vision head 输出之间仍存在表征鸿沟,直接做 cross-attention 效果不好。常规做法(late fusion)是单独用一个可学习解码器,让交互查询去 attend vision head 的输出特征;但查询和输出来自不同的表征空间,硬融合不顺。作者的做法是强制让两者共享同一表征空间:把交互查询 \(Q_r\) 和 backbone 图像 token \(X_b\) 拼在一起送进冻结 vision head 的自注意力层,即 \([Q_r';\,X_{\text{head}}]=\mathcal{F}_{\text{head}}([Q_r;\,X_b])\)。这一步零额外训练成本(vision head 冻结),却让交互查询直接走完 head 的预训练前向通路、与图像 token 充分交互,从而被对齐进 head 的文本-语义空间,得到语义增强的 \(Q_r'\)。一个额外好处是它同时产出被查询调制过的图像 token \(X_{\text{head}}\)——这些 token 已经带上了任务相关的交互线索,为下一步埋好伏笔。消融显示交互查询不只是"信息接收者",也是"信息给予者":若用 attention mask 阻断查询对图像 token 的影响(让 token 保持"纯净"),各项指标全面下降。

3. 层级精炼:用可学习 cross-attention 复用被查询调制的图像 token

这一设计的出发点是"精简架构应该榨干所有可用信息"——上一步顺带产出的 \(X_{\text{head}}\) 是宝贵的上下文特征源,不该丢掉。作者引入一个轻量可学习解码器 \(\mathcal{G}_{\text{decoder}}\)(单层 cross-attention + 一个 MLP),让语义增强后的查询 \(Q_r'\) 再去 attend 这些被自己调制过的 token:\(E_r=\mathcal{G}_{\text{decoder}}(Q_r',\,X_{\text{head}})\)。这构成一个"先粗对齐、再聚焦精炼"的层级过程:语义自举做的是冻结 head 里的全局语义对齐(提升 unseen/rare 泛化),层级精炼做的是针对 HOI 任务的可学习聚焦(提升 rare/non-rare)。定性分析把这一两阶段刻画为 Local-Global-Local 的推理流:自举阶段注意力铺得很广(继承 head 的图文对齐目标),精炼阶段注意力收回到显著的交互区域。最终 \(E_r\) 投影到文本空间,与所有交互类别的文本嵌入 \(E_t\) 算带可学习温度 \(\tau\) 的余弦相似度 softmax:\(p_{ij}=\dfrac{\exp(\tau\cos(e_r'^{(i)},e_t^{(j)}))}{\sum_{k\in\mathcal{R}}\exp(\tau\cos(e_r'^{(i)},e_t^{(k)}))}\),得到开放词表分类结果。

损失函数 / 训练策略

DINOv3 全程冻结,仅训练 detection adapter(\(L_E=2\) 层自注意力)、检测解码器(\(L_D=3\) 层,人/物各 \(N_q=64\) 个查询)、以及交互分类前的 1 层 cross-attention 解码器(特征维 \(D=1024\))。优化器 AdamW、学习率 \(1\times10^{-4}\),8 卡 RTX 4090。两个数据集训练目标不同:SWiG-HOI 用 batch 内负样本的对比目标,HICO-DET 则对整个类别集合做分类。

实验关键数据

主实验(开放词表设置)

SWiG-HOI(约 5,500 关系类、其中 >1,000 类训练时未见),mAP%:

方法 Unseen Rare Non-rare Full
THID 10.04 12.82 17.67 13.26
CMD-SE 10.70 14.64 21.46 15.26
INP-CC 11.02 16.74 22.84 16.74
SGC-Net 12.46 16.55 23.67 17.20
MP-HOI-L(带检测预训练) - 18.59 25.76 16.21
SL-HOI(本文) 19.04 24.69 30.62 24.67

Unseen 类比次优 SGC-Net 高 6.58%,Full 类高 7.47%;即便对手用了 Swin-Large / CLIP-ViT-L 等更大 backbone 加额外预训练,也没能拿到同等收益——说明增益来自架构设计而非单纯堆 backbone。

HICO-DET 开放词表(mAP%,注意 COCO 物体标签会让"带检测预训练"组占便宜):

方法 Backbone Unseen Seen Full
INP-CC(无检测预训练) CLIP-ViT-B/16 17.38 24.74 23.13
BC-HOI(带检测预训练) ResNet50+BLIP-2-ViT-G/14 42.31 40.67 40.99
SL-HOI(本文) DINOv3-ViT-L/16 40.53 42.99 42.49

对比"无检测预训练"组,SL-HOI 在 unseen/seen/full 分别大涨 17.26% / 14.65% / 15.27%;即便对上"带 COCO 检测预训练"的强基线,也在 seen/full 上各高 2.16% / 1.50%(仅 unseen 略逊于 BC-HOI)。闭集 HICO-DET 上同样全面超过 SOTA BC-HOI(Full +2.04%)。

消融实验

组件叠加分析(SWiG-HOI,mAP%):

配置 Unseen Rare Non-rare Full
Baseline(late-fusion 解码器) 16.55 21.66 27.75 21.82
+ 语义自举 18.09 23.27 28.83 23.28
+ 层级精炼(完整 SL-HOI) 19.04 24.69 30.62 24.67

设计变体对照(验证两点关键选择):

配置 Unseen Rare Non-rare Full 说明
Late Fusion (Head only) 16.55 21.66 27.75 21.82 仅 attend head 输出
Late Fusion (Multi-Scale) 15.73 21.63 28.49 21.77 attend backbone+head 输出
Semantic Bootstrapping 18.09 23.27 28.83 23.28 走 head 内部冻结通路
Ours w/ Attention Mask 17.28 24.64 29.81 24.01 阻断查询调制图像 token
Ours(完整) 19.04 24.69 30.62 24.67

关键发现

  • 两个组件分工明确:语义自举主要靠共享冻结 head 的语义空间,显著拉高 unseen/rare(泛化);层级精炼靠复用被任务线索调制过的图像 token,主要提升 rare/non-rare。二者叠加相对 baseline 累计 +2.49%/+3.03%/+2.87%/+2.85%。
  • "走 head 内部通路"才是关键,而非简单的多尺度融合:用可学习解码器去 late-fuse(哪怕融合 backbone+head 两路输出)都不如把查询直接送进冻结 head 的自注意力块——后者真正把 head 的泛化能力迁移过来了。
  • 交互查询是双向的:加 attention mask 阻断查询对图像 token 的影响后各项掉点,证明查询不仅"接收信息"也在"塑造"图像表征。
  • adapter 层数不是越深越好:detection adapter 取 2 层最佳(Full 24.67%),层数再多反而会破坏 DINOv3 的预训练特征——与原始 DETR"越深越好"的结论相反,原因是 backbone 冻结、adapter 是在适配已学好的特征而非从头学。

亮点与洞察

  • "一个模型内部的功能分工"是最漂亮的观察:通过注意力图可视化直接看出 backbone(聚焦/定位)与 vision head(整体/语义)的天然互补,从而论证"无需外挂第二个模型",把架构动机讲得很扎实。
  • 零成本弥合鸿沟的 trick 可迁移:当两组特征(如查询 vs 输出 token)来自同一个冻结大模型但表征不对齐时,不要在外面硬融合,而是把它们拼起来一起喂进这个冻结模型的前向通路,让模型自己把它们对齐——这套"借冻结模块前向通路做对齐"的思路对很多"冻结大模型 + 少量适配"的任务都有启发。
  • 冻结 backbone 下 adapter 深度反直觉:DETR 经验在"backbone 冻结"场景失效,提醒做迁移适配时不能照搬端到端训练的超参直觉。

局限与展望

  • 作者承认用 ViT backbone 的 DINOv3 计算开销可能高于传统 CNN-based HOI 检测器。
  • 方法强绑定 dino.txt 这一特定 VLM(需要"backbone + 文本对齐 vision head"的双部件结构);换成不具备这种内部分工的 VLM 时,"互补分工 + 走 head 内部通路"的范式是否还成立,⚠️ 论文未讨论。
  • HICO-DET unseen 类仍略逊于 BC-HOI(用了 BLIP-2-ViT-G/14 这种更大的 VLM + COCO 检测预训练),说明在极端未见类上,更大 VLM + 检测预训练仍有优势,SL-HOI 的"精简"在这一格上有取舍。

相关工作与启发

  • vs VLM-collaborated 派(HOICLIP / UniHOI 等):他们用"传统 HOI 检测器 + VLM"两个独立模型协作,结构复杂且跨模型特征难融合;SL-HOI 只用一个 DINOv3,从根上消除跨模型鸿沟。
  • vs VLM-only 派(THID / CMD-SE / INP-CC 等基于 CLIP):他们也用单 VLM,但 CLIP 全局对齐导致定位特征弱;SL-HOI 换成 DINOv3——其 backbone 本就为稠密预测保留细粒度空间细节,定位更强。
  • vs late-fusion 基线(HOICLIP 式 3 层解码器融合):late fusion 只在 head 输出后做融合;SL-HOI 让查询走进 head 内部的冻结自注意力通路,并复用被查询调制的中间 token,信息利用更充分。

评分

  • 新颖性: ⭐⭐⭐⭐⭐ "单 DINOv3 同时做定位+分类"并用"塞进冻结 head 前向通路"弥合鸿沟,角度新颖且论证扎实
  • 实验充分度: ⭐⭐⭐⭐⭐ 两个 benchmark、开放+闭集、组件叠加/设计变体/层数三类消融齐全
  • 写作质量: ⭐⭐⭐⭐ 动机由注意力可视化驱动、逻辑清晰;公式与符号偶有跨页断裂但不影响理解
  • 价值: ⭐⭐⭐⭐ 精简架构 + 少量可训练参数即达 SOTA,"借冻结模块前向通路对齐异质特征"的思路可迁移