未验证 提交 1ffa3fba 编写于 作者: Y YixinKristy 提交者: GitHub

Correct the link in the README (#376)

* revise video restore docs

* delete photos

* Update README.md

* Update install.md

* update readme

* Update README.md

* Update get_started.md

* Update get_started.md

* Update readme en

* Update get_started.md

* Update photo_color_en.md

* add wechaty demo

* Update README.md

* Update README_cn.md

* Update README_cn.md

* Update README_cn.md

* Update README_cn.md

* Update README_cn.md

* Update motion_driving.md
上级 0666e2e8
...@@ -91,7 +91,7 @@ GAN--生成对抗网络,被“卷积网络之父”**Yann LeCun(杨立昆) ...@@ -91,7 +91,7 @@ GAN--生成对抗网络,被“卷积网络之父”**Yann LeCun(杨立昆)
* 图像编码:[Pixel2Style2Pixel](./docs/zh_CN/tutorials/pixel2style2pixel.md) * 图像编码:[Pixel2Style2Pixel](./docs/zh_CN/tutorials/pixel2style2pixel.md)
* 分辨率提升 * 分辨率提升
* 单张图片超分:[Single Image Super Resolution(SISR)](./docs/zh_CN/tutorials/single_image_super_resolution.md) * 单张图片超分:[Single Image Super Resolution(SISR)](./docs/zh_CN/tutorials/single_image_super_resolution.md)
* 视频超分:[Single Image Super Resolution(SISR)](./docs/zh_CN/tutorials/single_image_super_resolution.md) * 视频超分:[Video Super Resolution(VSR)](./docs/zh_CN/tutorials/video_super_resolution.md)
* 语义分割 * 语义分割
* 人脸解析:[FaceParsing](./docs/zh_CN/tutorials/face_parse.md) * 人脸解析:[FaceParsing](./docs/zh_CN/tutorials/face_parse.md)
......
# First order motion model
## First order motion model原理
First order motion model的任务是image animation,给定一张源图片,给定一个驱动视频,生成一段视频,其中主角是源图片,动作是驱动视频中的动作。如下图所示,源图像通常包含一个主体,驱动视频包含一系列动作。 # First Order Motion
First Order Motion的任务是图像动画/Image Animation,即输入为一张源图片和一个驱动视频,源图片中的人物则会做出驱动视频中的动作。如下图所示,源图像通常包含一个主体,驱动视频包含一系列动作。
<div align="center"> <div align="center">
<img src="../../imgs/fom_demo.png" width="500"/> <img src="../../imgs/fom_demo.png" width="500"/>
</div> </div>
以左上角的人脸表情迁移为例,给定一个源人物,给定一个驱动视频,可以生成一个视频,其中主体是源人物,视频中源人物的表情是由驱动视频中的表情所确定的。通常情况下,我们需要对源人物进行人脸关键点标注、进行表情迁移的模型训练。 以左上角的人脸表情迁移为例,给定一个源人物,给定一个驱动视频,可以生成一个视频,其中主体是源人物,视频中源人物的表情是由驱动视频中的表情所确定的。通常情况下,我们需要对源人物进行人脸关键点标注、进行表情迁移的模型训练。
但是这篇文章提出的方法只需要在同类别物体的数据集上进行训练即可,比如实现太极动作迁移就用太极视频数据集进行训练,想要达到表情迁移的效果就使用人脸视频数据集voxceleb进行训练。训练好后,我们使用对应的预训练模型就可以达到前言中实时image animation的操作。 用下图可以简单阐述其中原理:
<div align="center">
<img src="https://user-images.githubusercontent.com/48054808/127443878-b9369c1a-909c-4af6-8c84-a62821262910.gif" width="500"/>
</div>
不仅可以做脸部表情动作迁移,这篇文章提出的方法只需要在同类别物体的数据集上进行训练即可,比如实现太极动作迁移就用太极视频数据集进行训练,想要达到表情迁移的效果就使用人脸视频数据集voxceleb进行训练。训练好后,我们使用对应的预训练模型就可以达到前言中实时image animation的操作。
## 特点
- #### 支持多人脸同时驱动
- **独家引入人脸检测算法,自动检测多人脸,实现多人脸表情同时驱动。**
## 联合人脸检测模型实现多人脸表情迁移 - 使用PaddleGAN提供的[人脸检测算法S3FD](https://github.com/PaddlePaddle/PaddleGAN/tree/develop/ppgan/faceutils/face_detection/detection),将照片中多个人脸检测出来并进行表情迁移,实现多人同时换脸。
使用PaddleGAN提供的[人脸检测算法S3FD](https://github.com/PaddlePaddle/PaddleGAN/tree/develop/ppgan/faceutils/face_detection/detection),将照片中多个人脸检测出来并进行表情迁移,实现多人同时换脸。 具体技术原理:
具体技术原理: 1. 使用S3FD人脸检测模型将照片中的每张人脸检测出来并抠出
2. 使用First Order Motion模型对抠出的每张人脸进行脸部表情迁移
3. 将完成表情迁移的人脸进行适当剪裁后贴回原照片位置
1. 使用S3FD人脸检测模型将照片中的每张人脸检测出来并抠出 同时,PaddleGAN针对人脸的相关处理提供[faceutil工具](https://github.com/PaddlePaddle/PaddleGAN/tree/develop/ppgan/faceutils),包括人脸检测、五官分割、关键点检测等能力。
2. 使用First Order Motion模型对抠出的每张人脸进行脸部表情迁移
3. 将完成表情迁移的人脸进行适当剪裁后贴回原照片位置
同时,PaddleGAN针对人脸的相关处理提供[faceutil工具](https://github.com/PaddlePaddle/PaddleGAN/tree/develop/ppgan/faceutils),包括人脸检测、五官分割、关键点检测等能力。 - #### 新增人脸增强效果
- **人脸增强特效使得驱动后的视频中人脸清晰度大大提升。**
- #### 丰富的在线体验应用
- 🐜**蚂蚁呀嘿**🐜:https://aistudio.baidu.com/aistudio/projectdetail/1603391
- 💙**520告白特辑**💙:https://aistudio.baidu.com/aistudio/projectdetail/1956943
- **复刻故人的微笑(▰˘◡˘▰)**:https://aistudio.baidu.com/aistudio/projectdetail/1660701
- 👨**父亲节特辑**:https://aistudio.baidu.com/aistudio/projectdetail/2068655
## 使用方法 ## 使用方法
### 1 人脸测试 ### 1. 人脸检测与效果增强
用户可上传一张单人/多人照片与驱动视频,并在如下命令中的source_image参数和driving_video参数分别换成自己的图片和视频路径,然后运行如下命令,即可完成单人/多人脸动作表情迁移,运行结果为命名为result.mp4的视频文件,保存在output文件夹中。 用户可上传一张单人/多人照片与驱动视频,并在如下命令中的`source_image`参数和`driving_video`参数分别换成自己的图片和视频路径,然后运行如下命令,即可完成单人/多人脸动作表情迁移,运行结果为命名为result.mp4的视频文件,保存在output文件夹中。
注意:使用多人脸时,尽量使用人脸间距较大的照片,效果更佳,也可通过手动调节ratio进行效果优化。 注意:使用多人脸时,尽量使用人脸间距较大的照片,效果更佳,也可通过手动调节ratio进行效果优化。
本项目中提供了原始图片和驱动视频供展示使用,运行的命令如下: 本项目中提供了原始图片和驱动视频供展示使用,运行的命令如下:
- 默认为单人脸: #### 运行命令如下:
``` ```
cd applications/ cd applications/
python -u tools/first-order-demo.py \ python -u tools/first-order-demo.py \
--driving_video ../docs/imgs/fom_dv.mp4 \ --driving_video ../docs/imgs/fom_dv.mp4 \
--source_image ../docs/imgs/fom_source_image.png \ --source_image ../docs/imgs/fom_source_image.png \
--ratio 0.4 \ --ratio 0.4 \
--relative --adapt_scale \ --relative \
--image_size 512 \ --adapt_scale \
--face_enhancement
```
- 多人脸:
```
cd applications/
python -u tools/first-order-demo.py \
--driving_video ../docs/imgs/fom_dv.mp4 \
--source_image ../docs/imgs/fom_source_image_multi_person.jpg \
--ratio 0.4 \
--relative --adapt_scale \
--image_size 512 \ --image_size 512 \
--face_enhancement \
--multi_person --multi_person
- driving_video: 驱动视频,视频中人物的表情动作作为待迁移的对象
- source_image: 原始图片,支持单人图片和多人图片,视频中人物的表情动作将迁移到该原始图片中的人物上
- relative: 指示程序中使用视频和图片中人物关键点的相对坐标还是绝对坐标,建议使用相对坐标,若使用绝对坐标,会导致迁移后人物扭曲变形
- adapt_scale: 根据关键点凸包自适应运动尺度
- ratio: 贴回驱动生成的人脸区域占原图的比例, 用户需要根据生成的效果调整该参数,尤其对于多人脸距离比较近的情况下需要调整改参数, 默认为0.4,调整范围是[0.4, 0.5]
- image_size: 图片人脸大小,默认为256
- multi_person: 表示图片中有多张人脸,不加则默认为单人脸
- face_enhancement: 添加人脸增强,默认为false
``` ```
添加人脸增强对比如下: #### 参数说明:
<div align='center'>
<img src='https://user-images.githubusercontent.com/17897185/126444836-b68593e3-ae43-4450-b18f-1a549230bf07.gif' width='700'/>
</div>
<div align='center'>
<img src='https://user-images.githubusercontent.com/17897185/126444194-436cc885-259d-4636-ad4c-c3dcc52fe175.gif' width='700'/>
</div>
| 参数 | 使用说明 |
| ---------------- | ------------------------------------------------------------ |
| driving_video | 驱动视频,视频中人物的表情动作作为待迁移的对象。 |
| source_image | 原始图片,支持单人图片和多人图片,视频中人物的表情动作将迁移到该原始图片中的人物上。 |
| relative | 指示程序中使用视频和图片中人物关键点的相对坐标还是绝对坐标,建议使用相对坐标,若使用绝对坐标,会导致迁移后人物扭曲变形。 |
| adapt_scale | 根据关键点凸包自适应运动尺度。 |
| ratio | 贴回驱动生成的人脸区域占原图的比例, 用户需要根据生成的效果调整该参数,尤其对于多人脸距离比较近的情况下需要调整改参数, 默认为0.4,调整范围是[0.4, 0.5]。 |
| image_size | 图片人脸大小,默认为256,可设置为512. |
| face_enhancement | 添加人脸增强,不添加参数默认为不使用增强功能 |
| multi_person | 当图片中有多张人脸请添加此参数,不加则默认为单人脸 |
#### 📣新增脸部增强功能
| 人脸增强前 | 人脸增强后 |
| :----------------------------------------------------------: | :----------------------------------------------------------: |
| <img src='https://user-images.githubusercontent.com/17897185/126444836-b68593e3-ae43-4450-b18f-1a549230bf07.gif' width='500'/> | <img src='https://user-images.githubusercontent.com/17897185/126444194-436cc885-259d-4636-ad4c-c3dcc52fe175.gif' width='500'/> |
### 2. 模型训练
#### **数据集:**
### 2 训练
**数据集:**
- fashion 可以参考[这里](https://vision.cs.ubc.ca/datasets/fashion/) - fashion 可以参考[这里](https://vision.cs.ubc.ca/datasets/fashion/)
- VoxCeleb 可以参考[这里](https://github.com/AliaksandrSiarohin/video-preprocessing). 将数据按照需求处理为想要的大小,即可开始训练,这里我们处理了256和512两种分辨率大小,结果对比如下: - VoxCeleb 可以参考[这里](https://github.com/AliaksandrSiarohin/video-preprocessing). 将数据按照需求处理为想要的大小,即可开始训练,这里我们处理了256和512两种分辨率大小,结果对比如下:
![](../../imgs/fom_512_vs_256.png) ![](../../imgs/fom_512_vs_256.png)
**参数说明:** #### **参数说明:**
- dataset_name.yaml: 需要配置自己的yaml文件及参数 - dataset_name.yaml: 需要配置自己的yaml文件及参数
- GPU单卡训练: - GPU单卡训练:
...@@ -109,14 +124,11 @@ python -m paddle.distributed.launch \ ...@@ -109,14 +124,11 @@ python -m paddle.distributed.launch \
--config-file configs/firstorder_fashion.yaml \ --config-file configs/firstorder_fashion.yaml \
``` ```
**在线体验项目**
* **多人脸通用:https://aistudio.baidu.com/aistudio/projectdetail/1603391**
* **单人脸通用:https://aistudio.baidu.com/aistudio/projectdetail/1586056**
## 生成结果展示 ## 生成结果展示
![](../../imgs/first_order.gif) <div align='center'>
<img src='https://user-images.githubusercontent.com/48054808/119469551-0a377b00-bd7a-11eb-9117-e4871c8fb9c0.gif' width='700'/>
</div>
## 参考文献 ## 参考文献
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册