这是PRN的官方python实现。
PRN 是一种以端到端方式联合回归密集对齐和 3D 面部形状的方法。更多关于Multi-PIE和300VW的例子可以在YouTube上看到。
主要特点是:
端到端,我们的方法可以直接从单个图像中回归3D面部结构和密集对齐,绕过3DMM拟合。
多任务通过回归位置图,可以获得3D几何形状以及语义。因此,我们可以毫不费力地完成密集对齐、单目 3D 面部重建、姿势估计等任务。
比实时更快该方法可以以超过 100fps(使用 GTX 1080)的速度运行以回归位置图。
强大的在不受约束的条件下对面部图像进行了测试。我们的方法对姿势、照明和遮挡都很稳健。
Python 2.7 (numpy, skimage, scipy)
TensorFlow >= 1.4
自选:
DLIB(用于检测人脸。如果可以提供边界框信息,则不必安装。)
OpenCV2(用于显示结果)
强烈建议使用 GPU。GPU(GeForce GTX 0)的运行时间为~01.1080秒,CPU(Intel(R)至强(R)CPU E0-2 v5 @ 2640.4GHz)的运行时间为~2.40秒。
git clone https://github.com/YadiraF/PRNet
cd PRNet
在百度驱动器或GoogleDrive上下载PRN训练模型,并将其放入Data/net-data
运行测试代码。(测试 AFLW2000 图像)
python run_basics.py #Can run only with python and tensorflow
使用您自己的映像运行
python demo.py -i <inputDir> -o <outputDir> --isDlib True
运行以获取更多详细信息。python demo.py --help
对于纹理编辑应用程序:
python demo_texture.py -i image_path_1 -r image_path_2 -o output_path
运行以获取更多详细信息。python demo_texture.py --help
本文的核心思想是:
使用位置图来表示面部几何和对齐信息,然后通过编码器-解码器网络进行学习。
因此,训练步骤:
生成位置图地面实况。
生成300W_LP数据集位置图的示例可以在generate_posmap_300WLP中看到
一个编码器-解码器网络,用于学习从RGB图像到位置图的映射。
重量掩码可以在文件夹中找到Data/uv-data
您可以自定义的内容:
位置贴图的 UV 空间。
您可以更改参数化方法,或更改 UV 空间的分辨率。
编码器-解码器网络的支柱
此演示使用残差块。VGG,移动网络也可以。
重量面罩
您可以更改权重以更多地关注项目需要更多部分。
训练数据
如果您扫描过3D面部,最好使用自己的数据训练PRN。在此之前,您可能需要使用 ICP 来对齐您的面网格。