1.细节重建
2.纹理重建
3.纹理和形状的联合重建
目前由于单张图片缺少有效信息,很难通过单张图片重建图片的细节信息,需要配合先验算法或者神经网络对图片进行进一步处理。
且,在隐私保护意思日益增强的今天,RGBD图片数据的缺少也对机器学习的训练产生的阻碍。
通过论文学习,发现了一个模型,DF2NET,能够使用单张图片对人脸数据进行重建。
在对细节的重建中,现有方案最常用的是3DMM模型,但是3DMM模型需要采用几百维的数据来表示几万个顶点的数据,会导致数据在重建过程中很难对细节进行无损的处理,在2D到3D的转换中会失真,并且需要很大的计算开销,在初始化的时候需要进行数据的对齐,也是一个耗时的过程。
但是3DMM能够根据任意一张二维图像来预测一个三维的图形,这是其优势,只是单纯依靠3DMM无法处理人脸的细节,需要配合其他模型使用。
还有SfS模型,通过光线的变换让图像的明暗细节产生变换,从而分析图像的形状,但是该模型会导致图像在明暗变换时只能判断形状,而很难去判断图像的凹凸性质,导致重建时需要使用其他技术进行还原,例如获取图像深度并在UV空间进行还原,如下图例子所示,SfS就没有很好的办法来分析凹凸性。

在对纹理的重建中,主要使用了
基于模型的方法效率比较低,3DMM模型就是使用的基于模型的方法,在他使用单张图片像3维图像进行变换时,受限于线性子空间,会产生纹理细节的丢失,而通过计算学习算法恢复的纹理会使其失去真实性,而且需要考虑形状、反射率、图片的照明参数,需要对参数进行进一步的设置。
基于图像的方式能够捕获任意图像的纹理,无需考虑图像的形状、反射率图片和照明参数,但是可能会受限于图像的清晰度导致纹理没有很好的办法进行复原。
基于图像的方法的复原步骤:

上图中,a给出了图像的多个角度和特征点,B标记了人脸的特征,C给出了3维的人脸模型,D给出了在特征点数量为13的时候的三维人脸重建的模型拟合情况,E给出了特征点数量在119时的三维人脸重建的模型的拟合情况。
这里首先介绍DF2NET方法,该方法模型图如下:

他使用了D-Net、F-Net、Fr-Net三个网络进行叠加对单个图像进行处理。
1.D-Net:通过2D图片获得深度图
2.F-Net:输入2D图像和深度图,输出精炼过的深度图(恢复高频细节)
3.Fr-Net:从不同清晰度的图像中恢复细节。(给阴影加权重)
由于macos 不支持cuda,因此需要对torch模块中所有的cuda函数修改为cpu进行处理,当然也可以尝试使用mac os中支持的mps进行处理。
通过运行demo程序,并对代码中的img_list进行修改(代码中的这个是错的,文件不全,需要进行修改),能够得到一个tensor格式的数据输出。
并在img目录下获得生成的图片。
但是目前由于技术能力有限,没有得到3维的生成图像。
这里对图像进行了测试:
输入图像:
输出图像:

图像裁剪:

目前的分析得到的是demo程序仅支持对人脸进行识别和裁剪。
但是仔细看输出图像,感觉输出图的分辨率被进行了压缩,损失了一部分像素,得到的图像效果不是很好,猜测三维重建的人脸信息也不会很理想。
论文中给出的方案是针对图像的深度图进行还原,并经过D-Net和Fr-Net进行进一步细致化的处理。
但是测试效果的问题可能是图像的分辨率较低导致的,可以考虑配合超分辨率方案针对人脸进行细节的恢复。
接下来测试了Facial_Details_Synthesis-master项目。
这是从单一输入图像合成面部细节的代码库。
这个存储库由 5 个独立的部分组成:DFDN、emotionNet、landmarkDetector、proxyEstimator和faceRender。

该方法采用了对抗网络的方式来恢复面部的细节。
该方法考虑到了法线、光照、阴影、反照率、情绪、表情、姿势、面部纹理,并对人脸的面部表情进行了先验处理,通过表情库判断用户情绪来重建人脸细节。
如果在重建过程中出现了损失,则通过训练的方法来恢复面部细节。
这里是用的模型是BFM模型,模型的链接:https://faces.dmi.unibas.ch/bfm/bfm2017.html
目前该方法的测试在eos-py模块的安装中出现了一些问题,暂时没有解决,初步怀疑是Cmake和visual stdio没有进行绑定,导致eos-py 0.16.1版本的模块无法进行安装。正在尝试对代码进行测试和修复。