Files
icassp2027-experiment/docs/speaker_aware_thinker_plan_2026-08-28.md
T

314 lines
23 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 多人交互感知 Thinker:视觉证据、train-free 干预与 wearer 切换评测
日期:2026-08-28。状态:研究与实验计划,**尚未实现或验证下述新方法**。
本轮仅核查代码、官方论文和公开实现,没有启动远程提取、训练或人工/LLM 标注。
同日后续:[可训练多人 AV 融合调研与 8×L20 实验矩阵](trainable_speaker_fusion_survey_2026-08-28.md)
扩展了逐人时序旁路、局部 memory adapter、末层 LoRA,以及 matched-recall 评测。
新增 MuVAP、SICNet、AV-Dialog 等相关工作约束;本文保留此前 train-free 路线,不代表仍只推荐 train-free。
## 1. 主线与当前证据
建议将研究问题收敛为:**因果地利用逐人 AV 证据,预测 wearer 何时进入、保持或退出发言。**
“谁在说话”“在对谁说话”“wearer 接下来是否开口”是不同问题,需要分别验证。
观测到 wearer 未开口,不等于证明其主动决定不打断;离线人类行为预测也不等于闭环 agent 策略。
当前 [EasyCom 完整结果记录](../results/easycom_encoder_only_1s_4ep_2026-08-28/README.md)
显示,标称 0.2s、`causal_valid_only`、seed 0 下:
| 输入 | mAP | wearer AP | 十 horizon 平均 mAP |
|---|---:|---:|---:|
| G | 73.44637 | 77.86650 | 60.84861 |
| A | 79.69221 | 84.09982 | 60.50771 |
| A+V | 79.00727 | 82.69832 | 60.76303 |
| G+A | 81.72257 | 85.06554 | 65.10895 |
| G+A+V | 82.02661 | 85.08583 | 65.39978 |
G 为全局 Thinker,A 为最近 1s 混合音频编码器池化,V 为局部人物视觉池化。
G+A+V 相对 G+A 的 wearer AP 仅增加 0.02029 个百分点;不能据此声称已获得社会交互理解。
但这也不能证明视觉无用:当前 V 丢掉了大量逐人、空间和时间结构。
这些是单 seed、不同 head 容量/上下文条件的初步比较,不是已控制变量的显著性结论。
## 2. 已核查的代码与可用标注
- [局部提取器](../extract_turn_local_features.py):视觉为每张 crop 的空间 token mean,随后同帧逐人 mean、最近 1s 帧 mean;音频为有效 token mean。`persons` 仍保存逐人的池化向量、frame offsets、时间和框记录,但**没有保留完整空间/音频 token 序列**。
- [Thinker 输入与读出](../streaming_turn_model.py):`_multimodal_embeddings` 已通过原生 encoder/merger 构造媒体 embedding;`_read_open_state` 复制 cache、临时闭合、读出并丢弃分支,是候选干预入口。
- 同文件 `_open_media_pieces` 当前仅识别连续的 audio/video payload;直接插入独立 image token、人物 ID 文本或多路视频,不能假设无需改 parser/position IDs 就可运行。
- [现有 transition 定义](../easycom_head.py) `transition_targets_from_activity` 是三路活动中任意一项变化。R1/R2 的 transition AP **不是 wearer onset/offset AP**;others 改变而 wearer 不变也会产生正例。
- [已有交互事件工具](../derive_easycom_interaction_events.py) 读取逐人转写、帧区间和 `Target_of_Speech`,生成时序事件及 backchannel/interruption **proxy**;不能把 proxy 或 LLM 共识升级为人工语义真值。
[EasyCom 官方说明](https://github.com/facebookresearch/EasyComDataset#speech-transcriptions-and-voice-activity)
确认转写包含说话人、活动帧区间和估计的讲话对象:参与者 ID、`Group`、`None`。
因此 EasyCom 是“第三方交谈 / 对 wearer 讲话”诊断的优先数据集。
先统计每 session 的 ID 覆盖、Group/None、缺失和多目标情况,再冻结子集规则。
`Group` 不能当成“不对 wearer 说话”;官方 `None` 与字段缺失/无法确定必须分开。
Ego4D 先验证逐人活动、可见/画外和 wearer 状态泛化;本轮没有确认其具有与 EasyCom
等价的 addressee 标签,不能直接复制“谁在对谁说”的真值定义。
同日补充核查:[Ego4D Social 官方文档](https://ego4d-data.org/docs/benchmarks/social/)实际定义了
TTM/LAM,并列出 `social_segments_talking`、`social_segments_looking` 和 `is_at_me`。
这提供了监督线索,但尚未核对远程 433 个 clip 的覆盖;不等于已具有完整的逐人 A→B 对象标签。
需要核对 clip/source video、时间及训练测试划分,缺失标注不能填为负例,GT speaker status 不能作为主模型测试输入。
输入权限统一:继续使用现有视频混合音频;不把其他参与者独立头戴麦克风、真值 VAD、
转写、讲话对象或未来帧作为主实验输入。提供的框属于 `provided-boxes` 条件,
与在线 detector/tracker 条件分列;时间戳正确不代表已验证整个检测链是在线因果系统。
## 3. 路线 V:让逐人视觉成为 Thinker 的结构化证据
### V0:先建立同输入预算的视觉诊断
固定 3B、8s 历史、2FPS、5Hz 读出、同音频、同层融合与 head,比较:
1. 全图 + 音频(现有 Thinker 参考)。
2. 逐人 crops + 音频。
3. 全图 + 逐人 crops + 音频。
4. 同像素/token 预算的普通全图增强或重复视图控制。
保留全图是为了提供人物相对位置、头朝向和交互上下文。不要只留下嘴部或把“看向”
直接标成“正在对某人讲话”。2FPS 可先研究粗粒度朝向和交互组织,不能保证足够刻画唇动;
后续若加入 5/10FPS 局部窗口,应独立消融采样率、分辨率与 token 数,不把三者同时改变。
### V1:第一个可实现版本——固定人物槽位的视频拼图
每个真实采样时刻生成“全图 + P1/P2/... 的扩展头肩 crops”的确定性拼图,作为一帧
送入原生视频处理器;一个 chunk 仍只有一份同时间段音频。
这是代码生成的输入布局,不是 AI 生成/修改人物内容。
- slot 在同一连续片段内保持身份稳定;只按当前及过去可见信息分配,不按真值说话状态排序。
- 槽位数设上限,选择规则预先固定,报告被截掉的人数和遮挡率;无效槽位使用明确空白/mask。
- 不把“P1 在 t 的 crop、P2 在 t 的 crop”串成两个不同时间点;拼图坐标也不等于真实场景坐标。
- 总像素预算与普通全图相匹配,并另做“允许增加预算”的工程上限;比较中记录每步实际 token 数。
- 沿用项目的 2s 完整块提交与不足块重算读出协议,每次只读取截至 t 可获得的 AV。
不等待块结束后才回填更早的状态,不把本项目的 bounded replay 说成官方完整在线 API。
优点是先验证逐人证据是否有用,不立即重写多路媒体的 TMRoPE。
限制是拼图改变了自然图像布局且缩小全图;正负结果都需要上述预算和分辨率控制解释。
### V2:有效后才实现原生多视图 token 序列
按 `time × local_track` 保留各 crop 的原生视觉 token 和 grid 元数据,再与音频时间块组织。
同为 2048D 不代表当前 mean-pooled sidecar 是可直接替换的原生媒体 token;
需从原始 crop 重新编码,或新存未池化的 encoder/merger 输出。
必须测试 placeholder 数目、位置编码、缺失人物、跨块身份、尾块和 replay 一致性。
不能用新随机 connector 却声称 train-free,也不能从单个 mean 向量还原唇动/空间细节。
### 证明视觉意义的证据链
先分层回答三个问题,而不是只展示漂亮 attention 图:
| 层级 | 问题 | 推荐验证 |
|---|---|---|
| 感知 | 当前可见人物中谁在发声? | 逐人活动 AP/宏平均、可见覆盖率;允许多人同时发声和画外来源 |
| 交互 | 说话对象是 wearer、另一人、Group 还是未知? | 目标对象识别/置信度及人工核查;真值仅用于离线评测 |
| 行为预测 | wearer 下一段时间进入还是保持未发言? | onset 指标、第三方交谈子集的错误开口预测与召回权衡 |
“A 与 B 互相交谈”严格子集可要求:过去观察窗口出现 A→B 和 B→A 的标注话语,
A/B 都非 wearer,且两人的视觉证据有覆盖。单向 A→B、Group、未知目标另列。
评测使用离线标注划分场景不等于模型获得这些标签;已开始但尚未结束话语的完整转写/目标
也不进入测试 prompt。涉及未来话语的关系定义必须另标为事后分析,不能伪装成在线条件。
主要对照包括同一段音频下去掉人物视图、同一已观测窗口内错配人物/时间、非人物 crop 等。
扰动只作敏感性诊断,不等于真实世界因果干预;单个 attention 热图或流畅解释不是模型
真正利用社会关系的充分证据。成功需体现正确视觉相对这些控制的稳定优势。
## 4. 路线 F:冻结 Thinker,在内部重新利用局部证据
“train-free”在此特指 **Qwen 参数冻结、无新学习的 connector**;若仍训练预测 head,
整条 pipeline 不能称为完全零训练。超参数搜索/校准也需要公开数据来源。
### F0:近期证据重读分支,先不改 attention
从持久 cache 复制临时分支,使用原生 processor 把截至 t 的最近 1s 音频及人物视图
作为明确的“近期片段重读”输入,再读出预测特征,随后丢弃分支。
使用未池化、已投影到 Thinker 输入空间的媒体序列,不把侧路 2048D 均值直接加到 hidden state。
这是一项待实现的输入/读出改造,不是现有 `_read_open_state` 已支持的功能。
它会重复观察近期内容,必须记录原始时间段、正确生成模板和位置编码,且不把重读内容
作为新发生的事件写回永久时间线。增加“重复同一原始片段、但无局部组织”的等预算控制,
区分重读收益与局部结构收益;若无收益,及时停止这条分支。
### F1:最小的内部干预——只调整临时读出 query 的近期证据注意力
先在原有媒体序列上试,再与 F0 组合。记录 key 对应的模态、真实时间、人物区域;
只对临时读出 query 的部分 head 加有界的注意力偏置,指向近期音频或当前有效人物区域。
概念上为 `softmax(QKᵀ/√d + causal_mask + b_recent + b_person)`,不是给所有 head 无差别放大。
- 先做固定近期偏置与随机 head 控制,再研究内容相关 head 选择,避免复杂方法没有朴素对照。
- “偏向人物”不等于“识别谁发声”。声源—人物对应须来自可用 AV 的因果估计;
如用真值说话人关联,标为 oracle 上限。不能把 raw A/V 向量余弦直接假定为已校准的对应概率。
- 只改分支 query,可保持已提交媒体 KV 不变;若改媒体 token 的历史注意力,受影响 KV 和后续状态必须重算。
- 因果 mask 仍有效,不能为了 AV 对齐让 token 读取在当前 cutoff 之后的观测。
- 优先测试“零偏置严格复现基线”、cache 未被分支污染、额外时间/显存开销。
- FlashAttention-2 不一定支持所需 attention 输出/自定义 bias;小试可用 eager/兼容实现,
但性能比较必须同后端,另报原 FA2 基线,不能混淆算法开销与实现开销。
F0/F1 改变特征分布,应分开报告“沿用旧 head 的无适配迁移”和“同配置重训 head”。
后者仍是 frozen-backbone 比较,不是纯 inference-only 的整个系统。
### F2:对比解码作为诊断候选,不直接套到当前 head
TCD 用原音频与平滑音频的词表 logits 对比;ThinkOmni 用额外文本推理模型指导词表解码。
两者可作为局部证据问答诊断的参考,但当前项目主要读取 hidden state,不生成长回答。
不能将词表 logit 公式直接改成 `q_full + α(q_local − q_smooth)` 就声称复现论文。
如研究 hidden-state 干预,必须作为新假设单独消融,并计入额外前向开销。
HeadRouter 可借鉴“不同 head 对语义/声学信号作用不同”的机制及 Qwen 代码;
当前先不剪掉近期音频 token。压缩基准成绩不证明 pruning 会提高 onset/offset 预测。
## 5. 路线 E:wearer onset/offset 与第三方交谈期间的未进入
### 当前最小协议:先用 wearer ground truth 分析实际状态切换
现有 5Hz wearer 活动标签已经足以开展第一阶段实验,不必等待新增语义标注。由 wearer
二值活动可直接、无歧义地派生 `OFF→ON`(开口)、`ON→OFF`(停止)、`OFF→OFF`
(保持沉默)和 `ON→ON`(继续说话),用于统计事件数量、训练/评测 wearer onset/offset,
以及比较模型是否更准确地预测 wearer 的实际行为。
结合现有 others 活动或逐人语音时间,还可定义时间关系 proxy:other 活动期间 wearer
保持沉默、other 结束附近 wearer 开口、other 开口附近 wearer 停止、wearer 与 other
重叠进入。这些足以支持 floor state change 的描述性分析和模型分层评测;例如在相同 wearer
开口召回率下,比较 other 持续活动区间的 false-entry rate。`other A→other B` 暂不作为
模型输出类别,从 wearer 视角可先合并为 floor 尚未向 wearer 开放的上下文。
但 wearer ground truth 只说明“人实际做了什么”,不能单独证明其“正确理解了什么”或
“应该怎么做”。时间重叠也不能直接命名为 interruption:它可能是顺畅交接、backchannel、
合作性重叠或噪声。因此第一阶段应使用 `EOT/HOLD proxy`、`early-entry/overlap proxy` 等
保守名称,不把观察到的行为升级为规范性的正确决策或语义 INT 真值。
若后续要把主张提升为“模型理解 other 的 EOT/INT 并据此行动”,可能需要补充或核验:
1. other 的讲话对象:`other→wearer`、`other→other`、group/unknown;
2. floor 事件语义:EOT、继续持有、自然停顿、对 wearer 的 interruption;
3. wearer 的重叠开口类型:正常接话、backchannel、竞争性 takeover、失败尝试、噪声/歧义。
这些新增标签不是当前 wearer 状态切换实验的前置条件。优先用自动规则派生 EOT/HOLD 并
抽样质检;只有 interruption/backchannel 等语用区别需要重点人工复核。EasyCom 的逐人
时间和讲话对象字段适合做主语义子集;Ego4D 只在逐人轨迹、voice segment 或 `is_at_me`
实际有覆盖时参与相应分析,缺失项必须 mask,不能当作负例。
### E0:先统一物理时间,再谈预测提前量
保留历史 `EgoSpeak-compatible` 标称 horizon,不改写旧成绩。
新增记录每个预测的 `input_cutoff`、`target_timestamp`、`available_timestamp`,报告:
- 物理提前量 `target_timestamp − input_cutoff`。
- 在线可用提前量 `target_timestamp − available_timestamp`,后者需实测推理延迟。
- 实际事件时间差与 5Hz 栅格量化误差。
目前特征 row i 的 cutoff 为 `(i+1)/5`,预测映射到 `j=i+h`。
若该数据集的标签时间审计确认 `timestamp(j)=j/5`,真实提前量就是 `(h−1)/5`,
标称 0.2s 对应 0s;若标签使用其他约定,应使用审计后的映射而非猜测。
此前 EasyCom 首段匹配是重要证据,但不自动证明所有 session 或 Ego4D 的完整协议。
零/负提前量结果只作检测或延迟结果,不称为提前预测。
### E1:把 wearer 事件和全活动 transition 分开
令 `w[j]` 为 wearer 活动:
```text
onset[j] = (w[j-1] == 0) and (w[j] == 1)
offset[j] = (w[j-1] == 1) and (w[j] == 0)
```
先评 G、A、G+A、G+A+V 的已有预测,不为测量效果立即增加 transition loss。
可对固定 horizon 的流式 wearer 分数构造明确标名的上升/下降启发式和过阈值事件;
它们不是模型直接输出的事件概率。若比较同一 cutoff 的相邻未来步,必须先从保存的
`[target_time, class, horizon]` 数组还原共同预测起点,不能错用不同起点当同一次预测。
缺少当前步分数时,不能把真值当前状态偷偷填入模型输出;oracle-current-VAD 需单列。
若需要校准的“未来 H 内首次 onset”或 offset 概率,再增加 wearer 专属事件/hazard readout;
这是后续有监督消融,与原 R1/R2 all-label transition 不同。
未来某时刻的活动概率不等于期间至少发生一次 onset 的概率,尤其存在短 backchannel 时。
主要报告:
1. wearer-onset、wearer-offset 分别的 AP(明确 score 来源)、正例率和 AP/random。
2. 事件级 precision/recall/F1:分别用 ±0.2s、±0.4s 作为预注册容差,一对一匹配,重复报警不能重复计对。
3. 按真实提前量分层的 recall、错误报警次数/分钟、报警提前/滞后分布;允许迟到命中的 detection F1 与严格提前报警分开。
4. 在固定 wearer-onset recall 下比较 false-entry rate,以及 onset recall–false alarms/min 曲线。
5. 同时保留十 horizon 活动 AP/mAP,观察局部事件收益是否牺牲整体表现。
AP 采用项目一致的计算方式,不把梯形积分 PR-AUC 和 AP 混报。
阈值扫描可完整报告为描述性曲线;从测试曲线上读出的固定 recall 点不是已部署阈值。
操作阈值、平滑和去抖规则必须预注册,或仅在训练侧校准;不在 Session 1–3 选择最优。
保持既有 4 epochs、无 dev 的主协议时,预声明参数组合并完整报告,不能暗中 test-tune。
session 起点、未观测上下文、原始被删片段形成的断点均需 mask;不能把拼接边界当成真实交接。
先报告原始逐帧事件;若合并极短 VAD 间隙,另列敏感性分析,不能为了更高 F1 改真值。
原始 20FPS 标注可用于更精细时间审计,但 5Hz 输出不能宣称已获得低于 200ms 的时间分辨率。
### E2:对应用户想要的“别人互聊,wearer 没插话”
用讲话对象与参与者活动建立分层:
- 两位非 wearer 的定向交谈;
- 其他人对 wearer 讲话;
- Group / 未知对象;
- 可见说话人 / 画外说话人;
- 单人活动 / 多人重叠。
在每个场景内同时保留 wearer 开口与未开口样本,避免构造全为负例的漂亮子集。
“未来 H 内 wearer 没有 onset”可以作观察标签,不能直接命名为“合理不插话”。
场景条件尽量只用过去窗口定义,未来只用于行为结果标注;若只分析事后未进入负例,明确注明。
关键指标是:**在保持相同真实开口召回率时,第三方交谈子集的错误开口预测是否减少**。
同时报告对 wearer 讲话子集的开口召回、延迟和每组样本/事件数,防止模型只学会普遍压低 wearer。
控制/分层近期 wearer 活动、others 活动、语音能量和上下文长度,减轻普通 VAD/持续性差异混淆。
若语义上要区分 backchannel、抢话、顺畅交接,利用现有 proxy 工具筛选候选,再人工复核。
至少两名标注者、报告一致性与无法判断比例;不要求强行判定意图。
示例预先固定抽样规则,展示成功、失败和模态冲突,附过去输入截止线、逐人活动、讲话对象、
wearer 真值及预测曲线;不挑单个回答作为整体有效的证据。
## 6. 近期文献与我们的差别
| 工作 / 已核查发表状态 | 可借鉴点 | 不能直接推导的结论 |
|---|---|---|
| [MSA,CVPR 2026](../literature_notes/23_multi_speaker_attention_alignment.md) | 选择跨模态 head,并对同人区域/话语加偏置 | 原设定有身份话语转录;不是混合音频到逐人的在线对齐 |
| [EgoAVU,CVPR 2026](../literature_notes/24_egoavu.md) | 需要验证声音—视觉的对应,而非仅输入两种模态 | 官方是数据与 SFT 路线,不证明必须新增 connector |
| [AV-SpeakerBench,CVPR Findings 2026](../literature_notes/28_av_speakerbench.md) | 以说话人为单位,检查真正需要 AV 的问题 | 视频理解问答并非 200ms 轮次预测 |
| [TCD,ACL Findings 2026](../literature_notes/29_temporal_contrastive_decoding.md) | 在冻结音频语言模型上增强瞬态声学证据 | 词表解码干预不等于 hidden-state/head 的直接替代 |
| [ThinkOmni,ICLR 2026](../literature_notes/30_thinkomni.md) | Qwen2.5-Omni 的 train-free 推理增强确有实现思路 | 需要额外文本模型/解码;并非低延迟局部特征融合 |
| [Address levels,SIGDIAL 2026](../literature_notes/31_continuous_address_levels.md) | 讲话对象及其不确定性与接话/注视/反馈有关 | 关系分析不证明因果决策,不把 uncertain 当 not-addressed |
| [HeadRouter,作者宣布 ACM MM 2026 接收](../literature_notes/32_headrouter_audio.md) | 声学/语义 head 分工,有 Qwen 集成代码 | 用了校准数据;压缩效果不能当作本任务提升证据 |
| [多模态 turn/backchannel,ACL 2025](../literature_notes/16_multimodal_turn_taking_backchannel.md) | 分别观察 keep、turn、backchannel | 双人、词级协议与第一视角多人预测不同 |
截至本次核查,MSA 官方仓库的 zero-shot/LoRA 实现仍列为待发布;不能承诺直接运行原代码。
HeadRouter 有公开核心代码及 Qwen 集成,但没有在本项目环境安装/验证。
## 7. 实施次序、资源与停止条件
| 优先级 | 待做交付物(名称为提案,不是已有命令) | 进入下一阶段的条件 |
|---|---|---|
| P0 | `eval_wearer_events.py`、目标对象覆盖审计、事件报告 | 时间映射、valid mask、事件计数可人工复核;获得已有基线的事件表现 |
| P1 | `streaming_turn_model_people.py`,先 V1 拼图与预览 | 因果/尾块/缓存测试通过;同预算下有稳定感知或事件收益 |
| P2 | 临时读出干预模块,F0/F1 分开消融 | 零干预复现;不污染 KV;超出普通重读/随机 head 控制 |
| P3 | EasyCom 多 seed + Ego4D wearer/可见性复核 | 参数协议冻结后测试;不按测试表现反复改变子集 |
8×L20 优先按不同 clip/session 或固定消融分配独立 worker,而不是一开始做大规模微调。
先在训练 session 的少量有事件片段上做开发及边界检查,再运行完整 split。
分片不能丢历史:同一连续流不能任意切段后把冷启动结果当完整上下文结果。
正式复现保持 4 epochs、seed 0/1/2、同 split/head,并报告 token 数、参数量、显存和每步 p50/p95 延迟。
多卡吞吐提升不等于单流 200ms 实时性。统计采用 session/clip 层级的配对汇总或 block bootstrap,
不能把强相关帧当独立重复;EasyCom 仅三个测试 session,应展示逐 session 结果并谨慎解释区间。
停止/转向规则:
- V1 只在增加 token 后变好:先解释为输入预算收益,不声称人物组织创新。
- AV 关联指标改善但 wearer 事件不改善:研究定位为感知/grounding,不宣称 agent 时机控制提升。
- 所谓“不插话”收益来自 onset recall 降低:不支持社会选择性结论。
- F1 不能胜过简单近期偏置/重读,或延迟明显不合目标:保留为负结果,不强行堆复杂干预。
- 只有个例而无稳定分层指标/多 seed 证据:不能作为主贡献。
## 8. 可主张的论文贡献与暂不能主张的内容
值得争取的组合是:逐人 AV 证据的因果组织、冻结 Thinker 的可审计局部读出机制、
以及 wearer 进入/退出与 third-party-exchange 分层评测。
单独“加 crop”“加 attention bias”已有强相关先例,不能当作充分新颖性。
若证据成立,可表述为“在其他参与者交谈的情境中降低错误 wearer-entry 预测,同时保持
真实 entry 召回”。若要进一步表述为“agent 学会不打断”,还需真实动作、闭环交互及
用户体验/打断代价评测;现有 EasyCom/Ego4D 离线数据不能独立完成这项证明。