Bootstrap

人脸三维重建

人脸三维重建调研

目标

根据某人一张或多张二维人脸图像重建出三维人脸模型(这里主要讨论单张)。

人脸三维重建发展概述

三维人脸重建主要有两种思路:model-basedmodel-free

model-based以[A Morphable Model For The Synthesis Of 3D Faces,1999](A Morphable Model For The Synthesis Of 3D Faces)为基准,旨在训练相对于平均人脸的参数,通过参数来改变平均脸,从而生成新的三维模型。在CNN被广泛应用之前主要使用非线性优化来拟合参数,这类研究很多。这类方法主要依赖训练集的人脸数据,不同人种的识别效果影响很大,对新的数据容错率尚待考虑。[详写]

model-free是通过神经网络,通过二维图像特征点计算回归三维人脸坐标,这类方法是现在主流方法,但是一定程度上丢失了人脸自身的性质。二维图像特征点一般通过人脸对齐的方法实现,人脸对齐也是主要通过CNN来实现。

自从ResNet在15年被提出后,很多网络都通过ResNet的思想来加快训练和模型效果。

3月底的人脸三维重建想法

3月底人脸重建模型精度高,面片数越高效果越好。

主要有两种方案:

方案一项目通过回归UV为位置坐标,以及加权损失函数,实现了18年state-of-the art的模型,且该方法的检测速度较快,有助于产品落地,且demo运行效果不错,面片数约8万,对于遮挡不严重、角度不要过大的识别效果不错。虽说Github上只有训练好的模型和模型思想,且项目的作者给出了一些可定制的训练想法,以及提高精度的方式。

我的想法是复现该论文的网络,并进行持续改进和优化。该论文的效果与运行速度相对较优

可以采用的数据集有300W-LPFlorence其他数据集。这些数据集主要是欧美脸,从其他根据欧美脸重建出来的亚洲脸模型看,效果并不是很差,有一定的使用价值。

采用的框架:Pytorch,Tensorflow是目前主流深度学习框架,但是Pytorch的上升趋势很明显,后来出现的Pytorch因为其更易使用而深受欢迎

语言主要采用Python、Matlab。

方案二

项目通过回归模型直接计算三维点云,根据二维特征点,计算三维投影偏差,

在线可运行网页

缺点:预测时间比较长,需要学习torch框架

源码使用语言:python、lua、matlab

框架:torch

初步时间安排如下:

  • 1月14号~1月18号:源码阅读、相关论文细读、相关知识的学习以及网络复现
  • 1月21号~1月25号:网络复现
  • 寒假期间,能够初步训练出一个demo
  • 2月11号~2月15号:网络优化,调参
  • 2月18号~2月22号:网络持续优化(假设能完成)

应用于产品的人脸三维重建想法

应用于产品的人脸三维重建的面片数不能太高。故打算在三月底的人脸三维重建的基础上进行改进。主要改进点:

  • 降低图片分辨率,更改网络模型、调参
  • 降低UV图的分辨率,最终降低面片数

初步时间安排

  • 2月25号~3月1日:更改超参,降低分辨率,尝试训练新的网络
  • 3月4号~3月8号:持续改进

重难点

二维特征点检测方法大部分是基于2D人脸形状建模的,存在以下几个问题:

  • 人脸部分不在图像里面,人脸被遮挡,人脸转角过大,影响特征点检测

利用二维特征点来恢复三维人脸形状的方法存在以下几个问题:

  • 不同姿态下检测的特征点语义信息不一致,难以确定3D点云中与其对应的点

现存开源项目的三维面片数主要存在以下问题:

  • 如何克服三维面片数过大使得模型无法在产品上运行

需要掌握和学习的技术[删除]

  • 基础图形、图像知识
  • 相关论文阅读:ResNet等论文
  • Ubuntu:MeshLab,Blender;Windows:Maya、3DsMax等建模软件的使用
  • PyTorch、Tensoflow等深度学习框架
  • dlib:一个C++机器学习工具(多数用于人脸检测)
  • Matlab、Python、C++语言

后期可能考虑的问题

  • 可能需要三维人脸的美化
  • 人脸的风格与虚拟人物是否搭配

其他项目[删除]

1、回归模型:根据二维特征点,计算三维投影偏差

Large Pose 3D Face Reconstruction from a Single Image via Direct Volumetric CNN Regression

论文

在线可运行网页

缺点:预测时间比较长,需要学习torch框架

源码使用语言:python、lua、matlab

框架:torch

2、A Point Set Generation Network for 3D Object Reconstruction from a Single Image

生成1024个三维点云,输入的是原图像+分割图像,需要转换成obj

框架:tensorflow

3、End-to-end 3D face reconstruction with deep neural networks

论文

源码:python

框架:mxnet

;