资讯动态

PaddleGAN First Order Motion 图像动画完全指南:人脸表情/动作迁移、多人脸驱动、模型压缩与部署实战

发布时间:2026/9/27 21:59:23 来源:尧图企业网站定制
人工智能深度学习计算机视觉媒体生成视频处理图像处理【免费下载链接】PaddleGANPaddlePaddle GAN library, including lots of interesting applications like First-Order motion transfer, Wav2Lip, picture repair, image editing, photo2cartoon, image style transfer, GPEN, and so on.项目地址https://gitcode.com/gh_mirrors/pa/PaddleGAN点击查看免费下载本文聚焦 PaddleGAN 中的 First Order Motion一阶运动模型图像动画Image Animation应用。它以一张源图片通常是人物或人脸和一个驱动视频为输入让源图片中的主体学会驱动视频里的动作与表情输出一段动画视频。读完本文你将掌握在 PaddleGAN 中一键完成单人/多人脸表情迁移、理解relative、adapt_scale、ratio等核心参数的底层作用、用 VoxCeleb/fashion 数据集训练自有模型、基于 MobileNet 的模型压缩流程以及模型导出与部署到移动端的完整路径。一、First Order Motion 是什么任务定义与核心原理First Order Motion 解决的是Image Animation图像动画任务输入一张包含主体的源图片source image和一个包含系列动作的驱动视频driving video模型逐帧生成新视频使源图片中的主体按照驱动视频中的动作/表情运动。上图中左上角的人脸表情迁移是典型场景给定源人物与驱动视频生成的新视频里主体仍是源人物但其表情完全由驱动视频决定。该方法的通用性在于模型不需要为每个新对象重新训练只要在同类别物体的数据集上训练一次即可。例如在太极视频数据集上训练 → 实现太极动作迁移在人脸视频数据集 VoxCeleb 上训练 → 实现表情迁移。训练完成后用对应的预训练模型即可实时执行图像动画推理。其方法核心来自论文First Order Motion Model for Image AnimationNeurIPS 2019Siarohin 等即用自监督方式学习驱动视频与源图像之间的运动表征将运动分解为一系列稀疏关键点keypoints及其局部仿射变换Jacobian再通过稠密运动网络与遮挡感知生成器完成图像重绘——这就是First Order一阶即运动由关键点的一阶邻域变换近似描述名称的由来。在 PaddleGAN 中这套流程沉淀在 ppgan/models/firstorder_model.pyFirstOrderModel与 ppgan/modules/first_order.pyHourglass 编码器/解码器、金字塔感知损失、抗混叠插值等基础模块中。推理期的核心逻辑位于 ppgan/apps/first_order_predictor.py训练与推理统一由 tools/main.py 和 applications/tools/first-order-demo.py 驱动。PaddleGAN 实现的三大特点PaddleGAN 在原生 First Order Motion 之上做了三方面增强多人脸同时驱动独家引入人脸检测算法自动检测照片中的多张人脸并逐张做表情迁移实现多人同时换脸/动起来。具体技术流程为使用 S3FD 人脸检测模型位于 ppgan/faceutils/face_detection/detection检测出照片中每张人脸并抠出对抠出的每张人脸分别执行 First Order Motion 表情迁移将生成的新人脸适当剪裁后贴回原照片对应位置。推理脚本中对应的实现是FirstOrderPredictor.extract_bboxfirst_order_predictor.py它先用face_detection.FaceAlignment检测所有人脸框再按 IoU 去重合并得到每张人脸的边界框随后逐框裁剪、驱动、再贴回。PaddleGAN 还提供配套的 faceutils 工具集涵盖人脸检测、五官分割、关键点检测等能力。人脸增强效果对驱动后的视频帧施加人脸增强特效显著提升人脸清晰度。当命令行传入--face_enhancement时预测器会加载FaceEnhancement见 ppgan/faceutils/face_enhancement在每一帧生成结果上做增强处理first_order_predictor.py。丰富的在线体验应用官方在 AI Studio 上提供了多个可直接体验的项目包括蚂蚁呀嘿、520 告白特辑、复刻故人的微笑、父亲节特辑等创意玩法均以本文所述 FOM 技术为内核。二、快速上手单人/多人脸表情迁移推理2.1 运行命令PaddleGAN 仓库内置了演示用的原始图片与驱动视频位于docs/imgs/下直接在仓库根目录执行cd applications/ python -u tools/first-order-demo.py \ --driving_video ../docs/imgs/fom_dv.mp4 \ --source_image ../docs/imgs/fom_source_image.png \ --ratio 0.4 \ --relative \ --adapt_scale \ --image_size 512 \ --face_enhancement \ --multi_person将--source_image与--driving_video换成自己的图片与视频路径即可完成单人/多人脸动作表情迁移。运行结果默认保存为output/result.mp4。使用多人脸照片时建议选用人脸间距较大的照片效果更佳也可以手动调节--ratio进行效果优化尤其当多人脸距离较近时。2.2 参数说明核心表格参数使用说明driving_video驱动视频视频中人物的表情动作作为待迁移的对象。source_image原始图片支持单人图片和多人图片视频中人物的表情动作将迁移到该图片中的人物上。relative指示使用视频与图片中人物关键点的相对坐标还是绝对坐标。建议使用相对坐标若使用绝对坐标迁移后人物会扭曲变形。adapt_scale根据关键点凸包convex hull自适应运动尺度匹配源与驱动主体的大小差异。ratio贴回驱动生成的人脸区域占原图的比例。需要根据生成效果调整尤其多人脸距离较近时。默认值 0.4调整范围 [0.4, 0.5]。image_size图片人脸大小默认 256可设置为 512。face_enhancement添加人脸增强不添加该参数则默认不使用增强功能。multi_person当图片中有多张人脸时添加此参数不加则默认为单人脸。2.3 这些参数在源码里做了什么以上参数并非 UI 摆设其底层行为都可以在 applications/tools/first-order-demo.py 与 ppgan/apps/first_order_predictor.py 中一一对应relative与adapt_scale二者共同作用于关键点归一化函数normalize_kpppgan/utils/animate.py。当use_relative_movementTrue时模型先计算kp_driving - kp_driving_initial驱动视频首帧关键点作为基准再加上kp_source从而把驱动视频的相对运动搬到源图像上避免绝对坐标带来的形变当adapt_movement_scaleTrue时通过scipy.spatial.ConvexHull计算源/驱动关键点凸包面积之比sqrt(source_area) / sqrt(driving_area)来缩放运动幅度适应主体尺度差异。推理脚本中二者的传参关系见 first_order_predictor.py。image_size驱动视频每一帧都会被cv2.resize到image_size × image_sizefirst_order_predictor.py源人脸裁剪区域同样被缩放到该尺寸参与驱动因此该值直接决定计算量与清晰度。仓库同时提供 256 与 512 两档预训练权重vox-cpk.pdparams/vox-cpk-512.pdparams由预测器按image_size自动选择下载见 first_order_predictor.py。ratio与multi_person在多人脸模式下贴回阶段以每张人脸框中心为圆心、ceil(h × ratio)为半径画圆形蒙版cv2.circle只把圆形区域内的新脸拷贝回原图first_order_predictor.py因此 ratio 越大贴回区域越大、越可能覆盖邻近人脸单人模式下则直接把整块生成结果覆盖回原框。更多可用参数除了文档表格列出的参数脚本还支持--output输出目录默认output、--filename输出文件名默认result.mp4、--weight_path指定本地权重、--config指定模型结构 yaml、--face_detector人脸检测器可选sfd或blazeface默认sfd、--batch_size默认 1、--find_best_frame/--best_frame选取与源人脸对齐最佳的驱动帧作为动画起点、--cpu/--xpu切换 CPU/XPU 设备以及--slice_size将驱动视频切片规避 XPU 4G 字节张量限制等可满足更多定制化推理需求。三、人脸增强与多人脸效果与原理--face_enhancement开启后驱动视频中人脸清晰度会得到明显提升。其原理是在 FOM 生成每帧预测后串联一个专门的人脸增强器FaceEnhancement.enhance_from_batchfirst_order_predictor.py对贴回前的人脸区域做细节恢复弥补运动生成过程中的模糊与纹理损失。该功能依赖 ppgan/faceutils/face_enhancement/face_enhance.py 中的实现。多人脸模式则完整走检测 → 逐脸驱动 → 蒙版贴回链路见 1.2 节其中人脸框的合并采用 IoU 阈值 0.5 的贪心去重first_order_predictor.py保证同一张脸只被处理一次extract_bbox还会在原始检测框基础上按max(bh, bw)扩充边距水平方向 0.8 倍确保裁剪区域覆盖完整人脸与必要的上下文。四、模型训练从数据准备到单卡/多卡训练4.1 数据集FOM 支持训练任意同类别的图像动画模型仓库内置两种主流数据集配置fashion时尚视频数据集参考 UBC fashion 数据集处理为模型所需的分辨率后训练可用于服装/人体动作迁移。VoxCeleb人脸视频数据集参考 AliaksandrSiarohin 的 video-preprocessing 工具进行预处理。PaddleGAN 官方处理了256 与 512两种分辨率大小并给出训练结果对比。处理完成后将数据按dataroot指定的目录结构存放如data/first_order/Voxceleb/即可开始训练。4.2 训练参数说明训练入口为tools/main.py --config-file configs/xxx.yaml需要先配置自己的 yaml 文件及参数。仓库已提供两个现成配置configs/firstorder_fashion.yamlfashion 数据集150 epochsconfigs/firstorder_vox_256.yamlVoxCeleb 数据集100 epochs。以firstorder_vox_256.yaml为例核心配置项包括配置段关键项说明dataset.trainname: FirstOrderDataset数据集实现见 ppgan/datasets/firstorder_dataset.pydataroot数据集根目录如data/first_order/Voxceleb/frame_shape: [256, 256, 3]帧分辨率与通道数改为 512 可训练高清模型id_sampling: True按身份采样视频对人脸任务建议开启time_flip: True时间维度随机翻转增强时序增强num_repeats数据重复轮数transformsPairedRandomHorizontalFlip概率 0.5、PairedColorJitter等成对增强modelcommon_params.num_kp: 10关键点数量10 个稀疏关键点近似运动场common_params.estimate_jacobian: True是否估计每个关键点的局部仿射变换Jacobiangenerator.kp_detector_cfg关键点检测器Hourglass 编码器结构block_expansion、max_features、scale_factor、num_blocks、temperaturegenerator.generator_cfg遮挡感知生成器结构num_down_blocks、num_bottleneck_blocks、estimate_occlusion_map、dense_motion_paramsdiscriminator.discriminator_cfg多尺度判别器scales、sn: True谱归一化train_params.loss_weightsgenerator_gan / discriminator_ganGAN 对抗损失权重VoxCeleb 配置中 generator_gan 为 0feature_matching/perceptual特征匹配损失与金字塔感知损失多尺度列表 [10,10,10,10] / [10,10,10,10,10]equivariance_value / equivariance_jacobian关键点等变性损失保证运动表征的几何一致性lr_schedulerMultiStepDecayepoch_milestones学习率阶梯衰减三个网络generator/discriminator/kp_detector学习率均为 2.0e-44.3 训练命令GPU 单卡训练export CUDA_VISIBLE_DEVICES0 python tools/main.py --config-file configs/dataset_name.yamlGPU 多卡训练需要先将 ppgan/modules/first_order.py 中的nn.BatchNorm改为nn.SyncBatchNorm然后export CUDA_VISIBLE_DEVICES0,1,2,3 python -m paddle.distributed.launch \ tools/main.py \ --config-file configs/dataset_name.yaml从源码看ppgan/modules/first_order.py 已内置一个SyncBatchNorm封装当paddle.distributed.get_world_size() 1时自动使用同步批归一化否则回退到普通BatchNorm因此多卡训练时该模块中的归一化层会自动切换。实例单卡训练 fashion 模型export CUDA_VISIBLE_DEVICES0 python tools/main.py --config-file configs/firstorder_fashion.yaml实例多卡训练 fashion 模型export CUDA_VISIBLE_DEVICES0,1,2,3 python -m paddle.distributed.launch \ tools/main.py \ --config-file configs/firstorder_fashion.yaml训练过程中的重建损失Reconstruction loss会按validate.interval定期评估训练可视化与日志间隔分别由log_config.interval与log_config.visiual_interval控制。五、模型压缩MobileNet 剪枝从 229M 到 10.1M为满足移动端实时运行需求PaddleGAN 提供基于MobileNet 剪枝的模型压缩方案。压缩前后对比大小ML1 loss重建损失原始2290.041781392压缩10.10.047878753face keypoints 的评估指标可参考 AliaksandrSiarohin 的 pose-evaluation 工具。5.1 压缩模型推理使用压缩版配置firstorder_vox_mobile_256.yaml并加--mobile_net参数cd applications/ python -u tools/first-order-demo.py \ --driving_video ../docs/imgs/mayiyahei.MP4 \ --source_image ../docs/imgs/father_23.jpg \ --config ../configs/firstorder_vox_mobile_256.yaml \ --ratio 0.4 \ --relative \ --adapt_scale \ --mobile_net当指定--mobile_net且不提供--weight_path时预测器会自动下载压缩版权重vox-mobile.pdparamsfirst_order_predictor.py。5.2 压缩模型训练分阶段蒸馏压缩训练采用固定一方、蒸馏另一方的三阶段策略通过 configs/firstorder_vox_mobile_256.yaml 中的model.mode字段切换mode: kp_detector将mode设置为kp_detector训练压缩版 kp_detector固定原始 generator源码中会加载预训练原始权重并对 generator 参数设置stop_gradient见 firstorder_model.pymode: generator将mode设置为generator训练压缩版 generator固定原始 kp_detectormode: both将mode设置为both并把配置中的kp_weight_path与gen_weight_path改为前两步已训练好的模型路径联合微调源码会加载两份权重并拼接见 firstorder_model.py。训练命令export CUDA_VISIBLE_DEVICES0 python tools/main.py --config-file configs/firstorder_vox_mobile_256.yaml压缩版配置的关键差异体现在model段firstorder_vox_mobile_256.yamlname: FirstOrderModelMobile对应FirstOrderModelMobile实现firstorder_model.py同时声明generator压缩版各模块mobile_net: Truemax_features缩减至 256与generator_ori原始大模型max_features1024/512用于蒸馏对齐压缩版将普通 ResBlock/UpBlock/DownBlock 替换为深度可分离卷积版本MobileResBlock2d、MobileUpBlock2d、MobileDownBlock2d见 ppgan/modules/first_order.py这是体积骤降的主要来源。六、模型部署导出与 Paddle Lite 移动端推理6.1 导出模型FOM 推理包含两个网络关键点检测器kp_detector与遮挡感知生成器generator二者在导出时分别保存为独立的推理模型。使用 tools/export_model.py 导出# 导出 FOM 模型 python tools/export_model.py \ --config-file configs/firstorder_vox_mobile_256.yaml \ --load /root/.cache/ppgan/vox_mobile.pdparams \ --inputs_size 1,3,256,256;1,3,256,256;1,10,2;1,10,2,2 \ --export_model output_inference/参数说明--config-file模型结构配置此处使用压缩版配置部署时生成的配置文件名为firstorder_vox_mobile_256.yml--load待导出的预训练权重路径--inputs_size四个输入张量的尺寸分别对应源图像1,3,256,256、驱动帧1,3,256,256、关键点 value1,10,2、关键点 Jacobian1,10,2,2——与导出实现FirstOrderModel.export_model中paddle.jit.save的input_spec一一对应firstorder_model.py--export_model导出输出目录。预测模型将导出到output_inference/fom_dy2st/目录下包含model.pdiparams、model.pdiparams.info、model.pdmodel三个文件Paddle 静态图推理的标准三件套。6.2 Paddle Lite 部署导出静态图模型后可进一步转换部署到移动端FOM 模型的 Paddle Lite 部署说明见 deploy/lite/README.md官方提供 FOM-Lite-Demo 示例工程更多细节可参考 Paddle-Lite 文档。当前已知问题官方说明(a) Paddle Lite 运行效果略差于 Paddle Inference正在优化中(b) 单线程跑 Generator 时帧数多了会跑到小核而不跑大核移动端 CPU 调度问题。七、生成结果与参考文献7.1 生成结果官方提供的动画生成结果示例见docs/imgs/目录fom_demo.png、fom_dv.mp4、fom_source_image.png、mayiyahei.MP4、father_23.jpg等fom_512_vs_256.png展示了 512 与 256 分辨率训练结果的对比。读者可运行第二节的命令自行复现并观察输出效果。7.2 参考文献该技术源自以下论文PaddleGAN 实现与配置注释中均引用该文献见 firstorder_model.pyInProceedings{Siarohin_2019_NeurIPS, author{Siarohin, Aliaksandr and Lathuilière, Stéphane and Tulyakov, Sergey and Ricci, Elisa and Sebe, Nicu}, title{First Order Motion Model for Image Animation}, booktitle {Conference on Neural Information Processing Systems (NeurIPS)}, month {December}, year {2019} }八、附核心文件路径速查用途文件推理演示脚本含全部命令行参数applications/tools/first-order-demo.py推理预测器人脸检测、逐脸驱动、贴回、增强ppgan/apps/first_order_predictor.py训练/导出统一入口tools/main.py、tools/export_model.py模型定义训练损失、导出、Mobile 蒸馏ppgan/models/firstorder_model.py网络基础模块Hourglass、MobileNet 变体、抗混叠插值ppgan/modules/first_order.py关键点归一化relative / adapt_scale 实现ppgan/utils/animate.py数据集实现ppgan/datasets/firstorder_dataset.py人脸检测与增强工具ppgan/faceutils训练配置fashion / VoxCeleb / 压缩版configs/firstorder_fashion.yaml、configs/firstorder_vox_256.yaml、configs/firstorder_vox_mobile_256.yaml赞分享人工智能深度学习计算机视觉媒体生成视频处理图像处理【免费下载链接】PaddleGANPaddlePaddle GAN library, including lots of interesting applications like First-Order motion transfer, Wav2Lip, picture repair, image editing, photo2cartoon, image style transfer, GPEN, and so on.项目地址https://gitcode.com/gh_mirrors/pa/PaddleGAN点击查看免费下载相关推荐PaddleGAN 一阶运动模型First Order Motion图像动画实战指南人脸表情迁移、多人换脸、训练与端侧部署PaddleGAN 一阶运动模型First Order Motion图像动画实战指南人脸表情迁移、多人换脸、训练与端侧部署 导读 本文围绕 PaddleG人工智能深度学习计算机视觉媒体生成视频处理图像处理PaddleHub First Order Motion 图像动画模型视频驱动人脸动画的安装、API 与推理源码全解析PaddleHub First Order Motion 图像动画模型视频驱动人脸动画的安装、API 与推理源码全解析 导读 本文围绕 PaddleHub人工智能大模型微调模型推理服务Cilium 中 Azure Identityazidentity认证故障排查完全指南从错误代码到源码级定位Cilium 中 Azure Identityazidentity认证故障排查完全指南从错误代码到源码级定位 导读 本指南面向在 Cilium尤其是 c人工智能深度学习计算机视觉媒体生成视频处理图像处理上一篇NgRx Data 中的实体集合EntityCollection集合状态结构、变更追踪与源码实现解析下一篇MCP Toolbox for Databases 的 looker-get-filters 工具从 Looker Explore 提取 Filter-Only 字段的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑