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

254 lines
21 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.
# 可训练的多人 AV 融合:从视觉证据到 wearer 开口预测
日期:2026-08-28。状态:研究方案,尚未实现、训练或验证。
本文扩展[逐人 Thinker 与事件评测计划](speaker_aware_thinker_plan_2026-08-28.md),不再限定 train-free。
本轮只检查本地代码及公开一手文献,没有访问远程 GPU、下载模型、改变训练配置或提交 Git。
## 1. 研究目标与需要区分的变量
目标:在相同 wearer 开口事件召回率下,正确视觉降低第三方交谈期间的错误开口预测;同时,对 wearer 讲话的片段中,接话召回及提前量不退化。
这是离线行为预测目标,不等于已经证明 agent 会礼貌地选择不插话。
不要把以下四个轴混为一次实验:
1. 信息结构:人物平均,还是保留逐人身份、空间位置和时间。
2. 时序模型:单帧 MLP,还是有限历史 GRU/TCN/因果 attention。
3. 融合位置:最终 head,还是 Thinker 内部。
4. 监督:三路未来活动,还是额外的逐人活动、讲话对象及 wearer onset。
“换成 RNN”不自动找回已经被人物平均抹掉的信息;“放入 Thinker”也不自动获得 AV 对齐。
主要问题应是 **speaker/addressee-conditioned forecasting**,而不是预先指定必须由大模型胜出。
## 2. 已有实现与资产
- `extract_turn_local_features.py::extract_local`:`persons.features` 保存逐张 crop 的 2048D 空间池化向量;另有 `frame_times/frame_offsets/records`。可以先复用,不必重新提取全部局部特征。
- 现有 `visual` 又经过人物平均与最近 1s 时间平均;当前 `TurnPredictionHead` 是投影、拼接、MLP,没有逐人 RNN。
- `audio` 是最近 1s **混合音频**的编码器池化,每 200ms 更新;不是每人独立麦克风或分离音源。
- G 已经包含全局音视频。G+A 不是 audio-only;G+A+V 对 G+A 只能证明额外局部视觉的价值。
- `train_omni_turn_lora.py` 已有 PEFT、末 N 层 LoRA、gradient checkpointing、torchrun/DDP、冻结 Thinker 对照;`omni_cached_av.py` 可重建 pre-Thinker AV 序列。
- 该入口尚不包含本文提出的逐人 memory adapter、addressee loss 或事件评测。代码存在不代表已完成 L20 验证。
- 最终 G 状态 `.pt` 不能用来反向训练生成它的 Thinker。需要 pre-Thinker AV 缓存或在线编码;缓存的 encoder 若要训练,就必须重新在线计算。
现有单 seed 结果:G+A wearer AP 85.06554,G+A+V 85.08583,仅差 0.02029 个百分点;不能据此证明视觉社会理解。详见[完整记录](../results/easycom_encoder_only_1s_4ep_2026-08-28/README.md)。
## 3. 直接相关文献及其适用边界
各独立笔记在[文献目录](../literature_notes/README.md),均标明阅读深度。以下是研究设计所用的证据,不是对我们数据集效果的承诺。
| 方法 / 发表信息 | 借鉴点 | 不应直接搬用的条件 |
|---|---|---|
| [MuVAP](https://arxiv.org/html/2606.16731),作者仓库标注 Interspeech 2026 | 单路混合音频、逐人视觉、因果多人预测;最接近的结构性相关工作 | 官方仓库仍为 code coming soon;外部 ASD/VAP 预训练;第三人称可见人物设定,不直接覆盖不可见 wearer |
| [SICNet](https://www.amazon.science/publications/long-term-social-interaction-context-the-key-to-egocentric-addressee-detection),ICASSP 2024 | 第一视角 talking-to-me 与较长社会上下文 | 使用转写、提供的 diarization/框;在话语结束处分类,不是连续提前预测 |
| [AV-Dialog](https://aclanthology.org/2026.acl-long.1954/),ACL 2026 主会 | 将视觉目标人跟踪、流式理解和轮次事件共同训练 | 指定目标人的干扰对话不等同于自由多人分配;大规模预训练不适合作为本项目起点 |
| [FLoRA](https://www.isca-archive.org/interspeech_2024/palaskar24_interspeech.html),Interspeech 2024 | 模态适配器、缺失模态处理;固定拒绝率报告误接受率 | BART/T5 和私有 device-directed 数据;不是 Qwen 插件或 wearer 事件预测 |
| [Whisper-Flamingo](https://www.isca-archive.org/interspeech_2024/rouditchenko24_interspeech.html),Interspeech 2024 | 在强音频模型内部通过零初始化门控 cross-attention 学习视觉增量 | 原任务是 AVSR/翻译;不是已验证的在线接话模型 |
| [LoCoNet](https://arxiv.org/html/2301.08237),CVPR 2024 | 逐人时间结构与跨人互动;可用作专门 ASD 编码路线 | 原模型整段预测不等于流式因果;需要审计/修改 temporal conv 和 attention |
| [MBT](https://proceedings.neurips.cc/paper/2021/hash/76ba9f564ebbc35b1014ac498fafadd0-Abstract.html),NeurIPS 2021;[LAVISH](https://openaccess.thecvf.com/content/CVPR2023/html/Lin_Vision_Transformers_Are_Parameter-Efficient_Audio-Visual_Learners_CVPR_2023_paper.html),CVPR 2023 | 少量 latent token 限制融合成本、保留各模态支路 | 分类任务结构启发,不是接话预测证据 |
| [InfoReg](https://openaccess.thecvf.com/content/CVPR2025/html/Huang_Adaptive_Unimodal_Regulation_for_Balanced_Multimodal_Information_Acquisition_CVPR_2025_paper.html),CVPR 2025;[InfoBridge](https://openaccess.thecvf.com/content/ICCV2025/html/Li_InfoBridge_Balanced_Multimodal_Integration_through_Conditional_Dependency_Modeling_ICCV_2025_paper.html),ICCV 2025 | 模态竞争、过度对齐及互补信息保护 | 不能因我们 A 强就断言发生了优化失衡;冻结特征头与端到端 encoder 调节不同 |
另外筛选了 triadic VAP、gaze-enhanced turn-taking、噪声下视觉接话、3M-Transformer 和 LoRA-adapted MM-VAP。逐人麦克风、眼动仪、多视角以及非因果窗口均必须作为额外条件列明,而不能冒充单路 AV 基线。
### 最重要的新颖性限制
MuVAP 已经涉及单路音频、逐人视觉和多人未来活动;MSA 已有 speaker-aware attention。
因此“局部 crop + cross-attention/LoRA”本身不足以成为完整贡献。
我们的待验证差异是:不可见 wearer 的第一视角、对 wearer / 对第三方的关系、真实提前量,以及召回受约束的误开口评测。
是否达到某会议发表标准仍取决于实验质量、泛化和新颖性复核。
## 4. 路线 A:逐人因果时序旁路,优先实施
### 输入和结构
对每个时刻 t,读取截至 t 的 `persons`,按连续片段内的 local track 整理为人物序列,保留缺失 mask、框坐标和观测年龄。
使用同一组权重编码各人物,避免把 Session_4 的某个身份编号学成固定说话倾向。
```text
逐人 crop 向量 + bbox + 有效性/观测年龄
→ 共享的有限历史 GRU / causal TCN
→ 当前及历史人物 token
近期混合音频 + 全局 G
→ query → 对人物 token 的 cross-attention
→ 逐人发声 / 对 wearer 讲话的辅助预测
→ gated residual → 未来活动与 wearer onset/offset
```
建议第一版 d=256、1 层 GRU 或 2 层小型 attention、8s 有限历史。它们是工程初值,不是已调优配置。
GRU 必须从每个有限窗口起点重建状态,或另行标注持续记忆条件;仅 detach 梯度并不会把推理记忆限制在 8s。
第一轮仅把当前 G(t) 作为全局 query,不再对过去一串 G 做 RNN,否则每个 G 自带的历史会扩大有效上下文。
局部音频向量本身含 1s 历史;选择过去向量时要检查其原始波形起点,而非只看向量的结束时间。
必须另做相同有效历史的 G+A temporal 基线,防止把额外音频历史收益误归因于视觉。
2Hz 视觉在 5Hz 输出间使用最近可用观测及 age/mask,不能将重复的画面称为新的 200ms 视觉信息。
音频每人分支可以共享同一混合表示,但不能把它说成多个分离音源。
保持 G+A 基线作为残差起点:
`logits(t) = logits_GA(t) + gate(t) * delta_relation(t)`
gate 由输入预测,不由测试真值决定;增量可正可负。不能写成“别人讲话则禁止 wearer 开口”,因为真实对话有 overlap 和 backchannel。
先固定 G+A 分支训练增量,随后将联合训练作为单独消融。零初始化增量能保持初始基线,但不保证训练后的不退化。
### 训练目标
第一阶段只改变表示/结构,保持现有活动 loss。
第二阶段按顺序加入监督,而不是一次叠加多个新项:
1. 逐人当前活动 BCE:教会视觉与混合音频关联;overlap 是多标签。
2. 讲话对象监督:wearer / another participant / group / none,未知标注 mask;不要把 group 或缺失合并为负例。
3. wearer 专属 onset/offset:只针对 wearer 变化,区别于 R1/R2 的任意三路标签变化。
可用 `L_activity + λ_asd L_asd + λ_addr L_addr + λ_event L_event`,逐项 ablate、在训练侧确定系数。
不沿用“pos_weight=3 一定合适”的假设,先统计各监督的正例率与有效覆盖。
事件 head 可预测未来 K 个 200ms bin 内“第一次 onset”的 K+1 分类(含窗口内不开口),或离散 hazard。
“未来某点正在说话”和“未来发生开口”不是同一标签。onset 在当前静默的风险集训练/评测,offset 则相反。
这些真值风险集只用于监督/分析;实际系统不能查询未来/当前标注来触发决策。部署时需要预测状态或已知的 agent 自身发声状态。
### 何时放弃复杂化
若逐人分支对 ASD/讲话对象都没有可用预测能力,先查身份/时刻对齐、裁剪范围和视觉表示。
若辅助任务可行但 wearer 不改善,则应检查这些关系是否真正提供额外预测信息,而不是继续增加模型参数。
## 5. 路线 B:把局部证据放进 Thinker,作为主方法候选
### B1:有限 local memory + 门控 cross-attention
保留全局 AV 输入,把最近逐人向量组成独立 local memory,经共享投影与小型 resampler 压缩成有限 token。
保持人物身份边界;例如每人 4 个 latent,4 人约 16 个,加一组近期音频 token。
最初可用已有 pooled 向量;更细版本才重新缓存空间 token。可训练投影能适配 pooled 特征,但无法还原被池化丢失的信息。
在 Thinker 最后若干层加入:
`h' = h + tanh(alpha) * CrossAttention(LN(h), local_memory)`
alpha 初值为 0,先只训练 local adapter 和输出 head。
优先尝试仅作用于临时 readout query 的版本,让局部记忆影响本次读出,不回写历史 media KV;与“所有 token 都融合”分列实验。
memory 使用独立时间/track 编码及可用性 mask,不伪装成原视频网格位置。借鉴 Flamingo/Whisper-Flamingo 的结构,不声称这是原生 Qwen 功能。
### B2:adapter + 末层 LoRA
B1 有效后,再对最后 4 层 q/v 投影做 rank=8 LoRA;rank=16、最后 8 层为预算允许时的扩展。
额外必要基线:相同 LoRA、不输入局部人物特征。否则无法判断收益来自普通任务微调还是局部 AV。
训练只使用同一时刻的历史前缀,不在权重更新后复用旧权重产生的 Thinker KV。
冻结 AV encoder 可用现有 pre-Thinker cache;最终状态 cache 不可替代。
另可试输入端局部 prefix/mosaic + LoRA,作为较少改 transformer 的对照。
它需要更新媒体 token 组织、parser、TMRoPE 和预算审计;不应将多个同时刻人物串成不同视频时刻。
### 必须与路线 A 公平比较
固定原始输入、8s 历史、人物数、2FPS 起始采样、活动监督以及事件标签。
比较三条:G+A+person temporal branch;同输入的 Thinker adapter;adapter+LoRA。
报告参数、token 数、训练 GPU-hours、峰值显存、端到端每步 P50/P95 延迟及实际可用提前量。
仅最终 AP 更高但无法及时输出,不能称为更好的实时接话系统。
## 6. 路线 C:专门 AV 编码器 / 蒸馏,独立实验家族
Qwen 图像 encoder 的单帧语义并非为唇动、gaze 或 ASD 专门训练。
若路线 A 的表示诊断不理想,可引入 causalized TalkNet/LoCoNet 风格 AV 分支,保留逐人唇动时间结构,再与 G 融合。
首先用原始视频小规模对照 2、5/10、原模型所需高帧率;低帧率不应插值成所谓真实高帧率。
专门模型的 temporal conv、双向网络、全片归一化、未来 tracking 都须审计,不能直接把离线 ASD 特征作为因果特征。
这条路线改变了编码器/预训练数据,应与“只用 Qwen 编码器”分表;全局语义/长期历史与近期声学视觉运动可能互补,但需要验证。
不要一开始就声源分离:分离引入额外模型、时延、伪影和信号权限;在混合表示上先做人物归属更容易控制变量。
蒸馏属于后续加速:在相同过去前缀下由有效的 Thinker+local 教师给时序小模型软目标;额外完整未来教师只能作为 privileged teacher 协议。
未经验证的教师推断不能变成“真实社交意图”标签。
## 7. 把“不退化”落实为评测,而非口头保证
### 时间与事件
- 保存 input cutoff、源帧/音频最大时间、输出可用时刻、目标物理时间、segment ID。
- 旧特征 row i 的 cutoff=(i+1)/5;若标签 row j 的时间为 j/5,旧 i+1 对齐的真实 lead=0,不是 0.2s。须逐数据集审计,原标称指标保留,不混成新提前量。
- 事件预测提前窗口使用严格正 lead,例如预先指定 0.2/0.6/1.0s;合并连续告警并一对一匹配真值 onset。提前量按可用时刻计算,另报只按输入 cutoff 的理想值。
- 训练和评测窗口都不能跨原始缺片拼接断点。仅重置新分支还不足以保证已有 G 未跨断点;需要审计全局 cache 或排除受影响窗口。
### 分层定义
1. 第三方交谈:可见他人 A/B 有交替发言,讲话对象明确为对方或其他非 wearer,wearer 当前静默;如果预测窗口内真实开口,不算误报。
2. Addressed-to-wearer:当前/最近他人话语明确对 wearer,单独统计有真实 wearer onset 的事件召回、提前量,以及没有回应时的误报。
3. Group / Unknown:单列;不要挑掉难例后只汇报容易的子集。
两个人可见、others=1 或两个人同时发声,都不足以证明 A↔B 交谈。切片规则先根据训练侧冻结,测试侧不按预测效果挑选。
### 主要指标
- wearer onset 事件 AP、offset 事件 AP;保留原 10-horizon 活动 AP。
- `third_party_false_entries_per_minute @ wearer_onset_recall=r`,r 如 0.7/0.8/0.9 预先指定;达不到的目标召回应报告不可达。
- 同一阈值下 addressed-to-wearer 子集的 onset recall、提前量/延迟。
- 预设不退化容限 epsilon,报告配对差及区间;不能仅因 p>0.05 就宣称不退化。
- 按 session/连续对话块聚类 bootstrap,另报逐 session 结果。EasyCom 仅 3 个测试 session,区间稳定性有限,不能把相邻 5Hz 样本当独立重复。
固定全局召回仍可能牺牲 addressed 子集,所以两条约束必须同时报告。
测试集上完整预定义曲线的插值可用于描述匹配召回比较,但不能选出部署阈值再称独立验证。
继续保留原 4 epoch、无 dev 的对照;要确定实际阈值,用训练集内部交叉拟合/校准并明确协议,不能使用 Session_1–3 挑阈值、epoch 或 loss 权重。
可以后续研究训练侧约束优化:最小化第三方负例风险,同时约束 onset 总召回与 addressed 召回。
但权重/拉格朗日训练并不保证测试集满足约束;先验证表示与指标,不把它包装成已有有效 RL。
### 视觉对照与因果表述
- 同模型正确局部视觉、缺失局部视觉、仅使用更早的局部视觉、破坏跨时刻身份对应的局部视觉。
- 缺失/错配可能是分布外扰动,因此还要有从头训练的无局部视觉与匹配预算控制。
- 同步重排人物槽位应不影响 permutation-equivariant 模型;这种重排不是错误视觉。应破坏时间—身份或 AV 对应,并记录具体扰动。
- 若 G 固定,仅检验新增局部 V;要检验全部视觉,必须同步重算 G 的视觉输入,不能只删除旁路。
- 不从测试集选择最有利案例;案例按预定分层抽样,同时显示成功/失败与完整时间线。
- 上述输入干预支持模型是否利用视觉的证据,不证明人类未开口的心理因果动机。
## 8. 标注供给:先 EasyCom,再审计 Ego4D
[EasyCom 官方](https://github.com/facebookresearch/EasyComDataset#speech-transcriptions-and-voice-activity)提供逐人发声和 `Target_of_Speech`。可以作为训练辅助监督及评测分层;禁止作为测试模型输入。
Optitrack、独立参与者麦克风或人工转写作为输入,均须另列 privileged 条件。
本轮新确认:[Ego4D Social](https://ego4d-data.org/docs/benchmarks/social/)包含 LAM/TTM,并在 AV schema 中定义 `social_segments_talking` / `social_segments_looking` 和 `is_at_me`。
这修正了此前“尚未确认可用 addressee”的信息状态,但**没有确认远程 433 个 clip 的字段覆盖**。
下一步需按 clip_uid/source_clip_uid、时间和 split 对齐,统计已标注/缺失范围;字段缺失不能填作 negative,TTM=false 也不自动指出具体在对哪位第三方说话。
官方 TTM benchmark 包含 speaker-status 条件;本研究主模型只能用预测的逐人活动,不可直接拿 GT VAD 作输入。
本项目 346/87 EgoSpeak split 与官方 TTM split 不等价,监督预训练时检查 video/session/participant 重叠,避免把本项目测试 clip 用作辅助任务训练。
## 9. 8×L20 实施顺序与资源边界
以下是工程预算判断,不是实测吞吐。按每卡约 48GB 规划,执行前以 nvidia-smi 核实;DDP 复制模型,不将 8 张显存自动合并成一块。
| 实验 | 起步资源 | 可复用资产 | 优先级 |
|---|---|---|---|
| matched-recall 事件评测、字段覆盖审计 | CPU | 原预测、原始标注 | P0 |
| pooled-GRU vs person-GRU/cross-attention | 预期单卡可训;多卡分配独立 seed/消融 | 已有 G、A、persons | P1 |
| 加逐人活动、addressee、onset 监督 | 同上 | 同一输入;新增训练标签 | P1 |
| local memory adapter | 先单卡 microbatch=1 profiling,再 DDP | 冻结 AV 编码缓存;必要时重存局部 token | P2 |
| adapter + 最后 4 层 rank-8 LoRA | 同上;梯度累积/checkpointing | 现有 LoRA trainer 的基础设施 | P2 |
| 专门高帧率 ASD / AV encoder 适配 | 先 1 卡小样本,合适后分布式 | 原视频/框、外部预训练 | P3 |
| 从头复现 AV-Dialog 全流程、Omni 全参大规模预训练 | 不列为当前主线 | 数据/训练规模超出低成本验证 | 暂缓 |
[AV-Dialog 附录](https://arxiv.org/html/2511.11124)报告 stage 1 用 128×A100、stage 2 用 32×A100;这不是说 8 卡数学上无法训练,而是完整重现所需成本不适合本项目当前优先级。
先用现成 Qwen3B 做任务适配,不能把“训练参数少”当作“激活显存一定少”。
第一轮建议矩阵:
| ID | 设置 | 回答的问题 |
|---|---|---|
| A0 | G+A,原 MLP | 已有参考 |
| A0t | G+A temporal,无局部视觉、匹配有效历史及容量 | 音频时序增强能解释多少收益? |
| A1 | G+A+pooled V,有限历史 GRU | 时序建模本身是否足够? |
| A2 | G+A+person GRU/cross-attention,相同历史/容量 | 人物身份结构是否有价值? |
| A3 | A2 + 逐人活动监督 | 是否学到 AV 人物对应? |
| A4 | A3 + 讲话对象监督 | 交互关系是否降低第三方误报? |
| A5 | A4 + wearer 事件监督 | 是否改善事件而非仅活动 AP? |
| B0 | 无局部 memory 的相同 Thinker LoRA | 普通任务微调收益 |
| B1/B2 | local adapter / adapter+LoRA,同监督 | 内部融合是否优于强旁路? |
每项先 seed0 做数据/接口 smoke test;正式主比较至少相同 seeds 0/1/2,不按 seed0 测试提升挑方法。
8 卡优先分配独立消融与 seed;只有实测单次训练需要时再用全部 DDP。记录失败实验和计算成本。
## 10. 后续代码落点(尚未创建)
- 先扩展 `local_turn_features.py` 的读取契约,整理 track-level 序列;保留旧 pooled 接口不变。
- 拟新增 person temporal head;训练/推理配置显式保存 history、缺失处理、track 策略和监督覆盖。
- 复用 `derive_easycom_interaction_events.py` 的时刻/人物映射,新增讲话对象与 wearer 专属评测;不要复用 generic transition 指标名称。
- Ego4D 先新增 social coverage 审计,再决定是否共用 addressee loss。
- 内部融合在 `train_omni_turn_lora.py` / `omni_cached_av.py` 的基础上单独实现和测试;不先改全局提取结果的含义。
- 必测:未来媒体扰动不改变过去输出;有限历史/断点重置;人物排列等变;缺失与全空;overlap;时间匹配;阈值只用训练侧;adapter=0 与基线一致;更新权重后旧 KV 不复用。
推荐决策:先完成 A 路线和评测,确认视觉对应/讲话对象信号存在,再投入 B。若 A 的强基线已经实现目标,论文也不必强行要求 Thinker 内部融合。