PersonaLive: 把肖像扩散模型压到能直播
内容提要
PersonaLive是澳门大学等机构提出的实时肖像动画方案,通过流式金字塔去噪,使不同噪声档位的帧共享一次UNet前向,实现4步去噪仅需1/4次计算,支持无限长视频流。它分离身份、姿态、表情三条条件通路,并用TensorRT融合加速。训练分三阶段,代码和权重已开源。
延伸解读
流式金字塔去噪:把串行变并行
传统扩散模型生成一帧需要多次串行去噪,而PersonaLive通过维护4个不同噪声档位的窗口,让它们共享一次UNet前向,从而将4步去噪的计算量摊平到每帧仅1/4次前向。这种思路本质上是软件流水线,将多步去噪从时间上的串行转为空间上的并行,大幅提升吞吐,同时保持队列长度恒定,支持无限长视频流。
条件解耦:身份、姿态、表情各走各路
PersonaLive将身份、姿态、表情三条条件通路完全分离,并注入到UNet的不同位置:身份通过参考图编码注入自注意力KV,姿态通过PoseGuider以残差方式加到conv_in输出,表情则通过低维交叉注意力(维度仅16)注入。这种设计让三者互不干扰,尤其表情细节不会被大幅头部运动冲淡,是实现自然表情迁移的关键。
TensorRT融合:从模块到整图优化
PersonaLive的TensorRT加速并非仅转换UNet,而是将PoseGuider、MotEncoder、UNet3D、DDIM一步和VAE解码五个模块融合成一张计算图,减少host往返。通过显存地址绑定(bind)实现滚动状态零拷贝自环,进一步降低延迟。但代价是引擎构建耗时约20分钟,且需针对本机重建,同时可能带来轻微画质波动。
训练与推理对齐:流式方案不掉质量的前提
Stage 3训练时,PersonaLive按4×4滑窗复现推理时的调度,让时序模块在训练时就见过“一批里各帧噪声档不同”的分布,并随机丢弃参考特征token以增强鲁棒性。这种训练与推理分布的一致性,是流式方案能保持生成质量的关键。此外,三阶段训练需手动切换yaml配置,且总耗时约48小时(8×H100),复现门槛较高。
Q&A
PersonaLive是什么?它解决了什么问题?
PersonaLive是澳门大学等机构提出的实时肖像动画方案,通过流式金字塔去噪,使不同噪声档位的帧共享一次UNet前向,实现4步去噪仅需1/4次计算,支持无限长视频流。它解决了扩散模型生成速度慢、无法实时直播的问题。
PersonaLive如何实现4步去噪只需1/4次计算?
PersonaLive采用流式金字塔去噪,维护一个包含4个窗口的队列,每个窗口4帧,但处于不同的噪声档位(t=0, 333, 666, 999)。每轮将新帧加噪到t=999入队,将4个窗口拼接成16帧的批,跑一次UNet3D,DDIM让每个窗口按自己的timestep前进一档,最老窗口到达t=0后出队解码。这样一次前向处理16帧,输出4帧,等效每帧1/4次UNet前向。
PersonaLive如何支持无限长视频流?
PersonaLive通过恒定队列长度实现无限长视频流。每轮输入4帧、输出4帧,队列长度不随时间增长,因此没有片段边界,也就没有拼接痕迹。
PersonaLive如何分离身份、姿态和表情条件?
PersonaLive将身份、姿态、表情三条条件通路完全分离,并注入UNet的不同位置:身份通过参考图编码后注入自注意力KV;姿态通过MotionExtractor预测关键点,绘制成彩色圆点图,经PoseGuider注入conv_in残差;表情通过裁剪人脸区域,经MotEncoder编码成token,注入交叉注意力。
PersonaLive如何防止身份漂移?
PersonaLive监控表情嵌入与历史的距离,当最小L2距离超过阈值17时,将当前帧的干净图再次通过Reference UNet,将特征追加到kv_bank,作为注意力锚点。全程最多追加3次,防止KV无限膨胀。
PersonaLive的TensorRT加速是如何实现的?
PersonaLive将PoseGuider、MotEncoder、UNet3D、DDIM一步、VAE解码五个模块融合成一张图,导出为ONNX,再用polygraphy构建fp16引擎。动态维度只留给参考特征序列长度,并利用bind()将输出显存地址直接设为下一轮输入地址,实现零拷贝,减少host调用。
PersonaLive的训练分哪几个阶段?
PersonaLive的训练分三个阶段:Stage 1图像级预热,随机采样timestep加噪,预测ε,计算latent MSE,并强化五官区域;Stage 2四步蒸馏加对抗精修,固定时间表[999, 666, 333, 0],损失包括MSE、LPIPS和StyleGAN2对抗损失;Stage 3时序模块微调,冻结其他模块,只训练temporal_modules,并复现推理时的滑窗调度。
PersonaLive的在线推理流程是怎样的?
在线推理时,FastAPI主进程只处理WebSocket协议和队列,推理在子进程中进行。浏览器端摄像头帧编码为JPEG通过WS上传,服务端转张量入队。子进程凑够4帧触发一次前向,输出帧转JPEG后通过asyncio队列推送,用EMA估计帧间隔并限速在10-30 FPS。
PersonaLive的局限性有哪些?
PersonaLive的局限性包括:延迟强依赖算力,下界是4帧采集加一次前向;TensorRT引擎需要本机重建,且画质有轻微波动;三阶段训练之间靠手改yaml衔接,复现门槛高;授权仅限学术研究,禁止用于有害内容。