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

21 KiB
Raw Blame History

可训练的多人 AV 融合:从视觉证据到 wearer 开口预测

日期:2026-08-28。状态:研究方案,尚未实现、训练或验证。 本文扩展逐人 Thinker 与事件评测计划,不再限定 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 个百分点;不能据此证明视觉社会理解。详见完整记录。

3. 直接相关文献及其适用边界

各独立笔记在文献目录,均标明阅读深度。以下是研究设计所用的证据,不是对我们数据集效果的承诺。

方法 / 发表信息 借鉴点 不应直接搬用的条件
MuVAP,作者仓库标注 Interspeech 2026 单路混合音频、逐人视觉、因果多人预测;最接近的结构性相关工作 官方仓库仍为 code coming soon;外部 ASD/VAP 预训练;第三人称可见人物设定,不直接覆盖不可见 wearer
SICNet,ICASSP 2024 第一视角 talking-to-me 与较长社会上下文 使用转写、提供的 diarization/框;在话语结束处分类,不是连续提前预测
AV-Dialog,ACL 2026 主会 将视觉目标人跟踪、流式理解和轮次事件共同训练 指定目标人的干扰对话不等同于自由多人分配;大规模预训练不适合作为本项目起点
FLoRA,Interspeech 2024 模态适配器、缺失模态处理;固定拒绝率报告误接受率 BART/T5 和私有 device-directed 数据;不是 Qwen 插件或 wearer 事件预测
Whisper-Flamingo,Interspeech 2024 在强音频模型内部通过零初始化门控 cross-attention 学习视觉增量 原任务是 AVSR/翻译;不是已验证的在线接话模型
LoCoNet,CVPR 2024 逐人时间结构与跨人互动;可用作专门 ASD 编码路线 原模型整段预测不等于流式因果;需要审计/修改 temporal conv 和 attention
MBT,NeurIPS 2021;LAVISH,CVPR 2023 少量 latent token 限制融合成本、保留各模态支路 分类任务结构启发,不是接话预测证据
InfoReg,CVPR 2025;InfoBridge,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 的某个身份编号学成固定说话倾向。

逐人 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 官方提供逐人发声和 Target_of_Speech。可以作为训练辅助监督及评测分层;禁止作为测试模型输入。 Optitrack、独立参与者麦克风或人工转写作为输入,均须另列 privileged 条件。

本轮新确认:Ego4D 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 附录报告 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 内部融合。