什么是 LivePortrait?
LivePortrait 是由快手科技开发的高效肖像动画框架,旨在从单一源图像合成逼真的视频。它使用源图像作为外观参考,并从驱动视频、音频、文本或生成中获取运动(面部表情和头部姿势)。
与主流的基于扩散的方法不同,LivePortrait 探索并扩展了基于隐式关键点的框架,以有效平衡计算效率和可控性。它专注于更好的泛化、可控性和实际使用的效率。即使与扩散方法相比,LivePortrait 的生成质量也很高,同时速度非常快 - 在使用 PyTorch 的 RTX 4090 GPU 上每帧约 12.8 毫秒。
欲了解更多详情,请访问
LivePortrait 的工作原理
从高层次看,LivePortrait 以源图像和驱动视频作为输入。它从源图像中提取外观,从驱动视频中提取运动。这些通过变形和生成模块结合在一起,合成保留源图像身份但遵循驱动视频的运动和表情的动画肖像视频。
LivePortrait 的关键组件是:
- 外观特征提取器:编码源图像的身份和外观信息。
- 运动提取器:从驱动视频帧中提取运动特征(面部关键点)。
- 变形模块:使用提取的运动变形源图像特征,将其对齐到驱动姿势和表情。
- 图像生成器:将变形的特征合成为最终的逼真动画帧。
- 拼接与重定向模块:可选地将生成的肖像拼接回原始图像,并允许控制特定的面部区域,如眼睛和嘴巴。
这些模块设计高效,协同工作以实现高质量、可控的 LivePortrait 动画。
如何使用 ComfyUI LivePortrait
感谢 节点和工作流程,在 ComfyUI 中创建逼真的肖像动画变得更加容易。以下是其 ComfyUI LivePortrait 工作流程的关键组件和参数的细分。
ComfyUI LivePortrait Img2Vid 工作流程的关键步骤
1. 加载 Live Portrait 模型
- 添加 "DownloadAndLoadLivePortraitModels" 节点
- 设置精度为 auto 或 fp16 以获得最佳性能
2. 选择 LivePortrait 的人脸检测器
- 您可以在 "LivePortraitLoadCropper" (InsightFace) 和 "LivePortraitLoadMediaPipeCropper" 节点之间选择
- InsightFace 更准确,但具有非商业许可证,而 MediaPipe 在 CPU 上更快,但准确性较低
- 两者都输出一个 "cropper",用于检测和裁剪面部
3. 加载和预处理 LivePortrait 的源图像
- 使用 "Load Image" 节点加载您的源肖像图像
- 使用 "ImageResize" 节点将其调整为 512x512
- 将调整大小的图像连接到 "LivePortraitCropper" 节点
- 还将您选择的人脸检测器的 "cropper" 输出连接到该节点
- "LivePortraitCropper" 节点中的关键参数
"dsize": 这设置了裁剪面部图像的输出分辨率
- 默认值为 512,意味着面部将被裁剪到 512x512 像素
- 更高的值将以更高的分辨率裁剪面部,但处理速度可能较慢
- 更低的值将更快,但可能会丢失一些细节
"scale": 这控制了面部裁剪的放大程度
- 默认值为 2.3,较高的值将更接近面部放大,较低的值将包括更多的头部/背景
- 您需要调整此值,以便裁剪包含整个面部和一些背景,但不要太多额外空间
- 良好的面部裁剪对于运动转移的效果非常重要
- 典型值范围为 1.8 至 2.5,具体取决于源图像的构图
"face_index": 如果图像中检测到多个面部,这选择要裁剪的面部
- 默认值为 0,选择第一个检测到的面部
- 如果要选择图像中的其他面部,请增加此值
- 检测到的面部根据 "face_index_order" 设置(默认值为从大到小)排序
"vx_ratio" 和 "vy_ratio"(可选):这些允许您垂直(vy)或水平(vx)偏移裁剪
- 值范围为 -1 到 1
- 例如,将 vy 设置为 0.1 将裁剪向上移动 10% 的帧大小
- 如果自动裁剪稍有偏移,这可以帮助调整
"face_index_order": 这设置了选择 face_index 时检测到的面部的排序方式
- 默认值为 "large-small",按从大到小的面部排序
- 也可以按从左到右、从上到下等排序
- 这仅在图像中有多个面部时相关
4. 加载和预处理 LivePortrait 的驱动视频
- 使用 "VHS_LoadVideo" 节点加载您的驱动视频
- 使用 "frame_load_cap" 原语调整 num_frames
- 使用 "GetImageSizeAndCount" 节点将视频帧调整为 480x480
- 您可以选择使用另一个 "LivePortraitCropper" 节点裁剪驱动视频帧
5. 应用 LivePortrait 的运动转移
- 添加 "LivePortraitProcess" 节点
- 将加载的管道、源图像裁剪信息、裁剪后的源图像和驱动帧连接到 "LivePortraitProcess" 节点
- "LivePortraitProcess" 节点中的关键参数
"lip_zero": 启用时,如果唇部参数低于某个阈值,这将归零唇部参数
- 这可以帮助减少不自然的唇部运动并改善唇同步
- 建议启用此功能,除非您特别希望保留所有唇部运动
"lip_zero_threshold": 启用 "lip_zero" 时设置归零唇部参数的阈值
- 默认值为 0.03,较高的值将归零更多唇部运动,较低的值将保留更多
- 如果您希望更改唇部运动的抑制程度,请调整此值
"stitching": 启用时,这将通过拼接过程将动画面部融合回原始图像
- 这可以帮助在动画面部和背景之间创建更无缝的过渡
- 建议启用此功能以获得最自然的结果
"delta_multiplier": 这通过一个乘数缩放运动参数
- 默认值为 1.0,较高的值将夸大运动,较低的值将减少运动
- 可以用于调整面部运动的整体强度
- 典型值范围为 0.8 至 1.5,具体取决于所需效果
"mismatch_method": 这设置了工作流程如何处理源帧和驱动帧数量不匹配的情况
- 选项有 "constant", "cycle", "mirror" 和 "cut"
- "constant" 将保持在最后一帧,"cycle" 将循环,"mirror" 将前后播放,"cut" 将停止
- 默认值为 "constant",如果希望源视频比驱动视频长或短时有不同行为,请更改此值
"relative_motion_mode": 这控制了如何将驱动视频的运动转移到源图像
- 选项有 "relative", "source_video_smoothed", "relative_rotation_only", "single_frame" 和 "off"
- 默认值为 "relative",使用相对运动转移
- "off" 将完全禁用运动转移
- 试验不同的模式,看看哪个模式最适合您的特定使用场景
"driving_smooth_observation_variance": 这控制了使用 "source_video_smoothed" 运动模式时驱动运动的平滑度
- 较高的值将更平滑地处理运动,较低的值将保留更多原始运动
- 默认值为 0.000003,如果希望更改传输运动的平滑度,请调整此值
6. 合成结果(可选)用于 LivePortrait
- 要将动画面部合成回源图像,请使用 "LivePortraitComposite" 节点
- 连接原始源图像、裁剪的动画图像、LivePortrait 输出数据和可选的蒙版
- 这将输出融合了动画面部的完整帧
7. 配置重定向(可选)用于 LivePortrait
- 要更精细地控制眼睛和嘴唇,请使用 "LivePortraitRetargeting" 节点
- 启用眼睛和/或嘴唇重定向并调整其乘数
- 将重定向信息连接到 "LivePortraitProcess"
请注意,本工作流程需要 Insightface 模型。Insightface 模型 (https://github.com/deepinsight/insightface/releases/download/v0.7/buffalo_l.zip) 许可证为非商业性质。
如果您对 LivePortrait Vid2Vid 感兴趣,请使用