学习目标:
学习基于PaddleGAN实现的动作迁移模型:First order motion model。
First order motion model原理:
First order motion model的任务是image animation,给定一张源图片,给定一个驱动视频,生成一段视频,其中主角是源图片,动作是驱动视频中的动作,源图像通常包含一个主体,驱动视频包含一系列动作。
以人脸表情迁移为例,给定一个源人物,给定一个驱动视频,可以生成一个视频,其中主体是源人物,视频中源人物的表情是由驱动视频中的表情所确定的。通常情况下,我们需要对源人物进行人脸关键点标注、进行表情迁移的模型训练。
但是这篇文章提出的方法只需要在同类别物体的数据集上进行训练即可,比如实现太极动作迁移就用太极视频数据集进行训练,想要达到表情迁移的效果就使用人脸视频数据集voxceleb进行训练。训练好后,我们使用对应的预训练模型就可以达到前言中实时image animation的操作。
检测环境:
上一篇已介绍了环境配置,这里对环境进行一下验证,查看已安装的模块。
coda activate paddle_env
pip list
安装imageio-ffmpeg模块
pip install imageio-ffmpeg
准备素材:
应用PaddleGAN中提供的First Order Motion模型,将驱动视频中的人物A的表情迁移至图片中人物B的脸上,完成表情「迁移」
1.准备一个mp4格式的视频,含人脸正面表情(我自己录了一段,就不展示了);
2.准备一张含人脸正面的图片(与视频中人脸不同,网上下载的万历皇帝);
我创建了一个image_data文件夹存放素材,文件目录上传位置如图:
生成命令使用说明:
用户可以上传自己准备的视频和图片,并在如下命令中的source_image参数和driving_video参数分别换成自己的图片和视频路径,然后运行如下命令,就可以完成动作表情迁移,程序运行成功后,会在ouput文件夹生成名为result.mp4的视频文件,该文件即为动作迁移后的视频。本项目中提供了原始图片和驱动视频供展示使用。具体的各参数使用说明如下:
driving_video: 驱动视频,视频中人物的表情动作作为待迁移的对象
source_image: 原始图片,视频中人物的表情动作将迁移到该原始图片中的人物上
relative: 指示程序中使用视频和图片中人物关键点的相对坐标还是绝对坐标,建议使用相对坐标,若使用绝对坐标,会导致迁移后人物扭曲变形
adapt_scale: 根据关键点凸包自适应运动尺度。
代码在applications下执行,命令如下:
python -u tools/first-order-demo.py --driving_video ../image_data/hou001.mp4 --source_image ../image_data/wanli.jpg --ratio 0.4 --relative --adapt_scale --output ../image_data/output/
执行查看结果:
为方便后续修改,将命令行写成shell脚本,命名为1image_to_video.sh,放在applications目录下
执行命令
sh 1image_to_video.sh
在PaddleGAN/image_data/output文件夹下,查看result.mp4,(传MP4比较麻烦,通过python的moviepy模块转换成了gif图)效果如下:
使用moviepy为生成的视频加上音乐:
如果想要加入音乐,可以用moviepy模块。
pip install moviepy
不详细介绍了,over.