ITADN
cleardusk/3DDFA_V2
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

迈向快速、精确且稳定的 3D 稠密人脸对齐

License GitHub repo size

By Jianzhu Guo, Xiangyu Zhu, Yang Yang, Fan Yang, Zhen Lei and Stan Z. Li. The code repo is owned and maintained by Jianzhu Guo.

demo

[Updates]

  • 2021.7.10: 在 Gradio 上在线运行 3DDFA_V2。
  • 2021.1.15: 借用 Dense-Head-Pose-Estimation 的实现以加快网格渲染(速度提升约 3 倍,15ms -> 4ms),详见 utils/render_ctypes.py
  • 2020.10.7: 在 latency.py 中添加完整管线的延迟评估,只需运行 python3 latency.py --onnx,详见 Latency 评估。
  • 2020.10.6: 为 FaceBoxes 添加 onnxruntime 支持以降低人脸检测延迟,只需附加 --onnx 操作以启用,详见 FaceBoxes_ONNX.py
  • 2020.10.2: 添加 onnxruntime 支持以大幅降低 3dmm 参数推理延迟,在运行 demo.py 时只需附加 --onnx 操作,详见 TDDFA_ONNX.py
  • 2020.9.20: 添加包括姿态估计以及序列化为 .ply 和 .obj 在内的功能,见 demo.py 中的 poseplyobj 选项。
  • 2020.9.19: 添加 PNCC(Projected Normalized Coordinate Code)和 uv 纹理映射功能,见 demo.py 中的 pnccuv_tex 选项。

引言

本工作扩展了 3DDFA,命名为 3DDFA_V2,题为 Towards Fast, Accurate and Stable 3D Dense Face Alignment,已被 ECCV 2020 接收。补充材料见 此处。上方的 gif 展示了在实验室场景下追踪结果的摄像头演示。本仓库是 3DDFA_V2 的官方实现。

3DDFA 相比,3DDFA_V2 实现了更好的性能和稳定性。此外,3DDFA_V2 采用了快速人脸检测器 FaceBoxes 而非 Dlib。该仓库还包含一个由 c++ 和 cython 编写的简单 3D 渲染器。该仓库支持 onnxruntime,使用默认骨干网络回归 3DMM 参数时,以单张图像作为输入,延迟约为 CPU 上 1.35ms/图像。如果您对该仓库感兴趣,请在此 **google colab 上尝试!欢迎提出有价值的 issue、PR 和讨论 😄

快速入门

需求

参见 requirements.txt,已在 macOS 和 Linux 平台上测试。Windows 用户可参考 FQA 解决构建问题。请注意,本仓库使用 Python3。主要依赖项包括 PyTorch、numpy、opencv-python 和 onnxruntime 等。如果您使用 --onnx 标志运行演示以进行加速,可能需要先安装 libomp,例如在 macOS 上执行 brew install libomp

用法

  1. 克隆此仓库
git clone https://github.com/cleardusk/3DDFA_V2.git
cd 3DDFA_V2
  1. 构建 NMS、Sim3DR 和更快的网格渲染的 cython 版本
sh ./build.sh
  1. 运行演示
# 1. running on still image, the options include: 2d_sparse, 2d_dense, 3d, depth, pncc, pose, uv_tex, ply, obj
python3 demo.py -f examples/inputs/emma.jpg --onnx # -o [2d_sparse, 2d_dense, 3d, depth, pncc, pose, uv_tex, ply, obj]

# 2. running on videos
python3 demo_video.py -f examples/inputs/videos/214.avi --onnx

# 3. running on videos smoothly by looking ahead by `n_next` frames
python3 demo_video_smooth.py -f examples/inputs/videos/214.avi --onnx

# 4. running on webcam
python3 demo_webcam_smooth.py --onnx

跟踪的实现仅通过对齐完成。如果头部姿态 > 90° 或运动过快,对齐可能会失败。使用一个阈值来粗略检查跟踪状态,但它不稳定。

您可以参考 demo.ipynbgoogle colab 获取在静态图像上运行的分步教程。

例如,运行 python3 demo.py -f examples/inputs/emma.jpg -o 3d 将得到以下结果:

demo

另一个例子:

demo

在视频上运行将给出:

demo

更多结果或演示可查看:Hathaway.

功能(迄今为止)

2D sparse2D dense3D
2d sparse2d dense3d
深度PNCCUV 纹理
depthpnccuv_tex
姿态序列化为 .ply序列化为 .obj
poseplyobj

配置

默认骨干网络为 MobileNet_V1,输入尺寸为 120x120,默认预训练权重为 weights/mb1_120x120.pth,详见 configs/mb1_120x120.yml。本仓库提供了另一个配置 configs/mb05_120x120.yml,其 widen factor 为 0.5,模型更小且速度更快。你可以通过 -c--config 选项来指定配置。发布的模型如下表所示。请注意,论文中 CPU 上的推理时间是使用 TensorFlow 评估的。

ModelInput#Params#MacsInference (TF)
MobileNet120x1203.27M183.5M~6.2ms
MobileNet x0.5120x1200.85M49.5M~2.9ms

令人惊讶的是onnxruntime 的延迟要小得多。不同线程数下 CPU 上的推理时间如下所示。结果是在我的 MBP(13 英寸 MacBook Pro 上的 i5-8259U CPU @ 2.30GHz)上测试的,使用的是 1.5.1 版本的 onnxruntime。线程数通过 os.environ["OMP_NUM_THREADS"] 设置,更多详情请参阅 speed_cpu.py

ModelTHREAD=1THREAD=2THREAD=4
MobileNet4.4ms2.25ms1.35ms
MobileNet x0.51.37ms0.7ms0.5ms

延迟

onnx 选项大幅降低了整体 CPU 延迟,但人脸检测仍占据大部分延迟时间,例如,对于 720p 图像,延迟为 15ms。3DMM 参数回归对于单个人脸大约需要 1~2ms,而密集重建(超过 30,000 个点,即 38,365 个点)对于单个人脸大约需要 1ms。跟踪应用可能受益于快速的 3DMM 回归速度,因为并非每一帧都需要进行检测。延迟是在我的 13 英寸 MacBook Pro(i5-8259U CPU @ 2.30GHz)上测试的。

默认 OMP_NUM_THREADS 设置为 4,您可以通过设置 os.environ['OMP_NUM_THREADS'] = '$NUM' 或在运行 python 脚本前插入 export OMP_NUM_THREADS=$NUM 来指定它。

demo

FQA

  1. 训练数据是什么?

    我们使用 300W-LP 进行训练。您可以参考我们的 论文 以获取有关训练的更多详细信息。由于训练数据 300W-LP 中闭眼图像较少,因此在闭眼时眼部关键点不准确。网络摄像头演示中的眼部部分效果也不佳。

  2. 在 Windows 上运行。

    您可以参考 此评论 以了解如何在 Windows 上构建 NMS。

致谢

其他实现或应用

引用

如果您的工作或研究受益于本仓库,请引用以下两个 bib 文件 : ) 并 🌟 本仓库。

@inproceedings{guo2020towards,
    title =        {Towards Fast, Accurate and Stable 3D Dense Face Alignment},
    author =       {Guo, Jianzhu and Zhu, Xiangyu and Yang, Yang and Yang, Fan and Lei, Zhen and Li, Stan Z},
    booktitle =    {Proceedings of the European Conference on Computer Vision (ECCV)},
    year =         {2020}
}

@misc{3ddfa_cleardusk, author = {Guo, Jianzhu and Zhu, Xiangyu and Lei, Zhen}, title = {3DDFA}, howpublished = {\url{https://github.com/cleardusk/3DDFA}}, year = {2018} }

联系方式

Jianzhu Guo (郭建珠) [Homepage, Google Scholar]: guojianzhu1994@foxmail.comguojianzhu1994@gmail.comjianzhu.guo@nlpr.ia.ac.cn (此邮箱即将失效)。