• 实习报告1——人脸三维重建方法


    人脸三维重建的主要问题

    1.细节重建
    2.纹理重建
    3.纹理和形状的联合重建

    目前由于单张图片缺少有效信息,很难通过单张图片重建图片的细节信息,需要配合先验算法或者神经网络对图片进行进一步处理。
    且,在隐私保护意思日益增强的今天,RGBD图片数据的缺少也对机器学习的训练产生的阻碍。

    通过论文学习,发现了一个模型,DF2NET,能够使用单张图片对人脸数据进行重建。

    对细节的重建

    在对细节的重建中,现有方案最常用的是3DMM模型,但是3DMM模型需要采用几百维的数据来表示几万个顶点的数据,会导致数据在重建过程中很难对细节进行无损的处理,在2D到3D的转换中会失真,并且需要很大的计算开销,在初始化的时候需要进行数据的对齐,也是一个耗时的过程。
    但是3DMM能够根据任意一张二维图像来预测一个三维的图形,这是其优势,只是单纯依靠3DMM无法处理人脸的细节,需要配合其他模型使用。

    还有SfS模型,通过光线的变换让图像的明暗细节产生变换,从而分析图像的形状,但是该模型会导致图像在明暗变换时只能判断形状,而很难去判断图像的凹凸性质,导致重建时需要使用其他技术进行还原,例如获取图像深度并在UV空间进行还原,如下图例子所示,SfS就没有很好的办法来分析凹凸性。
    在这里插入图片描述

    对纹理的重建

    在对纹理的重建中,主要使用了

    • 基于模型的方法
    • 基于图像的方法

    基于模型的方法效率比较低,3DMM模型就是使用的基于模型的方法,在他使用单张图片像3维图像进行变换时,受限于线性子空间,会产生纹理细节的丢失,而通过计算学习算法恢复的纹理会使其失去真实性,而且需要考虑形状、反射率、图片的照明参数,需要对参数进行进一步的设置。

    基于图像的方式能够捕获任意图像的纹理,无需考虑图像的形状、反射率图片和照明参数,但是可能会受限于图像的清晰度导致纹理没有很好的办法进行复原。

    基于图像的方法的复原步骤:

    1. 获得人脸的多个角度的图像和特征点
    2. 使用曲线标记人脸特征
    3. 产生三维模版人脸
    4. 通过给定的特征点在UV空间对人脸进行拟合

    在这里插入图片描述
    上图中,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:从不同清晰度的图像中恢复细节。(给阴影加权重)

    github链接为:https://github.com/xiaoxingzeng/DF2Net

    由于macos 不支持cuda,因此需要对torch模块中所有的cuda函数修改为cpu进行处理,当然也可以尝试使用mac os中支持的mps进行处理。

    通过运行demo程序,并对代码中的img_list进行修改(代码中的这个是错的,文件不全,需要进行修改),能够得到一个tensor格式的数据输出。请添加图片描述
    并在img目录下获得生成的图片。

    但是目前由于技术能力有限,没有得到3维的生成图像。

    这里对图像进行了测试:
    输入图像:
    在这里插入图片描述
    输出图像:
    在这里插入图片描述

    图像裁剪:
    在这里插入图片描述

    目前的分析得到的是demo程序仅支持对人脸进行识别和裁剪。
    但是仔细看输出图像,感觉输出图的分辨率被进行了压缩,损失了一部分像素,得到的图像效果不是很好,猜测三维重建的人脸信息也不会很理想。

    论文中给出的方案是针对图像的深度图进行还原,并经过D-Net和Fr-Net进行进一步细致化的处理。
    在这里插入图片描述
    但是测试效果的问题可能是图像的分辨率较低导致的,可以考虑配合超分辨率方案针对人脸进行细节的恢复。

    接下来测试了Facial_Details_Synthesis-master项目。
    这是从单一输入图像合成面部细节的代码库。

    github链接:https://github.com/apchenstu/Facial_Details_Synthesis/tree/def9bfe044790d771d15dc4a62bb47b78d7d6153

    这个存储库由 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版本的模块无法进行安装。正在尝试对代码进行测试和修复。请添加图片描述

  • 相关阅读:
    【空间-光谱联合注意网络:多时相遥感图像】
    Revit插件实现【快速扣减】的两种操作
    Netcode for Entities如何添加自定义序列化,让GhostField支持任意类型?以int3为例(1.2.3版本)
    MySql死锁
    通信基础(三):多路复用技术
    云计算的思想、突破、产业实践
    virtuoso 后仿 ADE L error
    走近科学之《spring security 的秘密》
    C++面试八股文:技术勘误
    kibana 导出es索引数据 和数据导入到索引
  • 原文地址:https://blog.csdn.net/qq_27180763/article/details/125895591