ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SadTalker 进阶配置指南:inference.py 全参数解析与 talking head 效果调优

SadTalker 进阶配置指南:inference.py 全参数解析与 talking head 效果调优 SadTalker 进阶配置指南inference.py 全参数解析与 talking head 效果调优【免费下载链接】SadTalker[CVPR 2023] SadTalkerLearning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation项目地址: https://gitcode.com/GitHub_Trending/sa/SadTalker本篇基于 SadTalker 仓库中的 docs/best_practice.md 展开系统讲解 inference.py 中全部进阶配置参数的含义、默认值与组合方式--preprocess三种预处理模式、--still静止模式、--enhancer人脸增强、参考视频模式、4D free-view 与 3D 可视化等。读完你可以根据“半身/全身人像”“证件照式大头”“自由视角”等不同需求复制即用一组可运行的命令行并从源码层面理解每个参数背后到底改变了什么。SadTalker 的官方提示是当前模型仅适用于真人或接近真人的肖像图片动漫风格 talking head 生成方法尚未发布。这是所有配置选择的前提。一、inference.py 进阶配置总表下面是官方最佳实践文档给出的完整配置表默认值已与 inference.py 中 argparse 定义逐一核对名称配置项默认值说明Enhance Mode--enhancerNone使用gfpgan或RestoreFormer人脸修复网络增强生成的人脸Background Enhancer--background_enhancerNone使用realesrgan对整段视频做超分增强Still Mode--stillFalse沿用原图的姿态参数减少头部运动Expressive Mode--expression_scale1.0值越大表情动作越强save path--result_dir./results结果保存到指定目录preprocess--preprocesscrop在裁剪后的输入图上生成结果可选resize整图缩放到固定分辨率、full全图动画建议搭配--stillref Mode (eye)--ref_eyeblinkNone参考视频路径借用其中的眨眼动作使眉毛/眼部更自然ref Mode (pose)--ref_poseNone参考视频路径借用其中的头部姿态3D Mode--face3dvisFalse需要额外安装依赖详见 docs/face3d.mdfree-view Mode--input_yaw、--input_pitch、--input_rollNone从单图生成新颖视角 / 4D free-view talking head此外源码中还提供了一批文档表格里未列出但同样有用的参数inference.py--pose_style取值[0, 46)从 PoseVAE 中选择头部姿态风格--sizefacerender 渲染分辨率默认 256。README 中 2023.06.05 版本起新增了 512x512beta人脸模型--size 512会加载SadTalker_V0.0.2_512.safetensors由 src/utils/init_path.py 决定--batch_sizefacerender 批量帧数默认 2--old_version使用旧的.pth权重而非 safetensors 打包权重--verbose保留中间产物裁剪图、参考视频抽帧、系数文件等默认结束后清理--cpu强制 CPU 推理。二、--preprocesscrop / resize / full 三种输入处理模式系统会自动通过crop、resize、full三种方式处理输入图片实际命令行还接受extcrop、extfull两个扩展裁剪变体见 inference.py 的choices。2.1 crop 模式默认只依据面部关键点裁出人脸区域然后生成面部动画。此模式下表情与头部姿态动画都最真实自然。从源码看入口是 src/utils/preprocess.py 中的CropAndExtract.generatecrop与full分支都会调用self.propress.crop(...)src/utils/croper.py 的Preprocesser基于人脸检测框做透视裁剪并记录crop_inforesize分支则不裁剪直接取整图边界。裁剪后的帧统一缩放到pic_size默认 256后送入 3DMM 提取网络ResNet50net_recon拟合系数。2.2 resize 模式将整张图缩放到固定分辨率生成“整个画面都在说话”的大头视频适合产出类似证件照的效果。官方明确警告⚠️ 对全身人像图片效果很差。❌ 不适合 resize 模式全身像✅ 适合 resize 模式近景人像full_body_2.pngfull4.jpegresize_no.gifresize_good.gif2.3 full 模式全图动画模型自动处理裁剪区域后贴回原图因此必须搭配--still保持原始头部姿态否则贴回时会出现错位。输入--still--still--enhancerfull_body_2.pngexample_full.gifexample_full_enhanced.gif从源码结构看full 模式的三条底层差异值得注意渲染配置不同src/utils/init_path.py 中preprocess含full时加载facerender_still.yaml与mapping_00109-model.pth.tar否则加载facerender.yaml与mapping_00229-model.pth.tar——即 full 模式默认走一套“姿态保持”的 MappingNet系数维度不同src/generate_facerender_batch.py 中full 模式下源语义取 73 维比 crop 模式多 3 维相机对齐参数并把源图的姿态参数拼接到每帧生成系数尾部保证贴回时头部位置不变贴回逻辑src/facerender/animate.py 中 full 模式调用 src/utils/paste_pic.py 的paste_pic将生成的脸部动画透视贴回原图输出*_full.mp4。三、--still静止模式锁住姿态、减少动作--still的作用是让生成视频沿用原图的头部姿态从而减少头部运动——这正是 full 模式贴回成功的关键。官方文档补充Still 模式会同时停止眨眼和头部姿态运动。源码印证在 src/generate_facerender_batch.py 中still_mode为真时执行if still_mode: generated_3dmm[:, 64:] np.repeat(source_semantics[:, 64:], generated_3dmm.shape[0], axis0)即把音频生成的逐帧系数中第 64 维之后的姿态/平移部分全部替换为源图的对应值只保留音频驱动的表情部分前 64 维。一个典型的全图人像生成命令来自 README 与最佳实践文档python inference.py --driven_audio audio.wav \ --source_image video.mp4 or picture.png \ --result_dir a file to store results \ --still \ --preprocess full \ --enhancer gfpgan四、--enhancer与--background_enhancer分辨率与质感增强为了提升分辨率SadTalker 集成了 GFPGAN人脸修复与 Real-ESRGAN整图超分二者目的不同、可叠加--enhancer gfpgan 或 RestoreFormer只增强人脸区域--background_enhancer realesrgan对整段视频做背景整体超分。使用前确保依赖可用文档原文命令# make sure above packages are available: pip install gfpgan pip install realesrgan从 src/utils/face_enhancer.py 可以看到更多实现细节除文档列出的gfpgan、RestoreFormer外代码中还预留了codeformer分支标注# TODO:尚未完成接入传入其他值会抛出ValueError增强器采用逐帧生成器enhancer_generator_with_len而非一次性读入整段视频注释明确说明这是为了节省内存模型权重查找顺序为gfpgan/weights/model.pth→checkpoints/model.pth→ 在线 URL 下载。仓库随附了gfpgan/离线补丁gfpgan/weights见 scripts/download_models.sh因此配好离线补丁后生成过程不会触发下载--background_enhancer realesrgan使用 2 倍上采样的 RRDBNettile400, tile_pad10, halfTrue在纯 CPU 环境下会被自动禁用并给出告警“The unoptimized RealESRGAN is slow on CPU”增强发生在贴回之后src/facerender/animate.py 中对 full 模式先执行paste_pic再调用增强器因此全身动画的增强结果同时覆盖了人脸与背景。五、参考视频模式--ref_eyeblink与--ref_pose--ref_eyeblink video从参考视频中“借”眨眼动作让眉毛与眼部运动更自然--ref_pose video从参考视频中“借”整个头部姿态。references 视频循环机制官方说明“如果参考视频比输入音频短我们会循环该参考视频”。源码印证见 src/generate_batch.py参考视频抽帧后提取 3DMM 系数当refeyeblink_num_frames num_frames时用div/re计算整段重复加尾段补齐实现无缝循环拼接随后执行ref_coeff[:, :64] refeyeblink_coeff[:num_frames, :64]——从源码结构看前 64 维恰是表情系数含眼睑开闭因此眨眼模式本质上是用参考视频的表情系数覆盖生成表情。若同时指定--ref_pose与--ref_eyeblink指向同一视频inference.py 会直接复用已提取的系数避免重复抽帧。参考视频同样走CropAndExtract.generatesource_image_flagFalse逐帧提取系数因此参考素材也应是清晰的人脸视频仓库提供了示例examples/ref_video/如 WDA_AlexandriaOcasioCortez_000.mp4。六、4D free-view用--input_yaw / --input_pitch / --input_roll控制头部姿态三个参数用“关键帧角度列表”控制头部 yaw/pitch/roll 的随时间变化。例如--input_yaw -20 30 10表示输入头部的 yaw 从 -20 度变到 30 度再从 30 度变到 10 度。文档给出的完整命令python inference.py --driven_audio audio.wav \ --source_image video.mp4 or picture.png \ --result_dir a file to store results \ --input_yaw -20 30 10实现上src/generate_facerender_batch.py 的gen_camera_pose会只有 1 个角度时所有帧取该常量角度多个角度时先累加相邻关键帧的绝对角度差得到总转角按degree_per_frame degree_sum / (frame_num - 1)均匀分配到每一帧逐段np.arange插值若插值结果短于总帧数则用最后一帧角度补齐长于总帧数则截断。也就是说多关键帧之间是匀速线性插值帧数由音频长度决定25 fps。七、--face3dvis3D 人脸与 3D 关键点可视化该开关额外输出pytorch3d渲染的 3D 人脸动画与 3D 面部关键点。由于 3D 依赖安装较复杂官方单独写了环境教程 docs/face3d.md需要独立 conda 环境python 3.8 torch 1.11.0cu113 特定版本 pytorch3d requirements3d.txt并给出 gcc 版本问题时的LD_LIBRARY_PATH修复方法。运行方式python inference.py --driven_audio audio.wav \ --source_image video.mp4 or picture.png \ --result_dir a file to store results \ --face3dvis输出为3dface.mp4。源码路径inference.py 在--face3dvis时导入 src/face3d/visualize.py 的gen_composed_video基于已提取的first_coeff_path源图 3DMM与coeff_path音频驱动的逐帧 3DMM合成 3D 渲染视频随后继续正常生成 2D 结果。八、--result_dir与输出文件结构--result_dir默认为./results。从 inference.py 看实际保存目录为result_dir/$SOME_TIMESTAMP/按运行时刻%Y_%m_%d_%H.%M.%S生成最终视频被移动到result_dir/timestamp.mp4未加--enhancer输出timestamp.mp4full 模式先有*_full.mp4再按是否启用增强决定最终命名加--enhancer最终为timestamp_enhanced.mp4同时保留增强前的中间文件加--verbose可保留中间产物first_frame_dir裁剪图与.mat系数文件、参考视频抽帧目录等便于调试。九、常用配置组合速查需求推荐命令要素依据头像/近景人像自然表情与头部动作--preprocess crop默认--enhancer gfpgan第二节 2.1证件照式整脸大头视频--preprocess resize输入需为近景人像避免全身像第二节 2.2全身/半身人像全图动画--preprocess full --still --enhancer gfpgan第二节 2.3、第三节表情更夸张/更收敛--expression_scale 1.5/--expression_scale 0.5默认 1.0见 src/generate_facerender_batch.py前 64 维表情系数按该系数缩放更自然的眨眼/眉毛--ref_eyeblink ref.mp4参考视频短于音频时自动循环第五节指定运镜式转头轨迹--input_yaw -20 30 10等关键帧角度序列第六节高清整片输出追加--background_enhancer realesrgan仅 CUDA 生效第四节需要 3D 脸与 3D 关键点--face3dvis需先按 docs/face3d.md 装环境第七节最后重申适用范围以上所有技巧都建立在真人或类真人肖像输入之上文档开篇声明动漫风格生成官方尚未提供resize与full模式对构图有明确要求选择前先对照第二节的输入示例图判断。若安装或运行遇到报错可先查 docs/FAQ.md。【免费下载链接】SadTalker[CVPR 2023] SadTalkerLearning Realistic 3D Motion Coefficients for Stylized Audio-Driven Single Image Talking Face Animation项目地址: https://gitcode.com/GitHub_Trending/sa/SadTalker创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进