人脸三维重建

2023-09-22 07:00:00

人脸三维重建调研

目标

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

人脸三维重建发展概述

三维人脸重建主要有两种思路: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

更多推荐

无线定位中TDOA时延估计算法matlab仿真

目录1.算法运行效果图预览2.算法运行软件版本3.部分核心程序4.算法理论概述5.算法完整程序工程1.算法运行效果图预览2.算法运行软件版本matlab2022a3.部分核心程序...................................................................figu

详解window.print(),实现长列表打印分页

相信大家平时做项目时,打印需求很常见,但想把打印做好,还是要花点时间的。特别是长列表要分页的情况。我们知道浏览原生API`window.print()`可以用于印当前窗口(window.document)视图内容。调用此方法会产生一个打印预览弹框,用户可以根据具体设置来得到打印结果。一、window的打印事件默认情况下

抄写Linux源码(Day12:从 MBR 到 C main 函数 (1) )

回忆我们需要做的事情:为了支持shell程序的执行,我们需要提供:1.缺页中断(不理解为什么要这个东西,只是闪客说需要,后边再说)2.硬盘驱动、文件系统(shell程序一开始是存放在磁盘里的,所以需要这两个东西)3.fork,execve,wait这三个系统调用,也可以说是进程调度(否则无法haltshell程序并且启

C++ 字符串

C++字符串C++提供了以下两种类型的字符串表示形式:C风格字符串C++引入的string类类型C风格字符串C风格的字符串起源于C语言,并在C++中继续得到支持。字符串实际上是使用null字符\0终止的一维字符数组。因此,一个以null结尾的字符串,包含了组成字符串的字符。下面的声明和初始化创建了一个RUNOOB字符串

【Linux】系统编程生产者消费者模型(C++)

目录【1】生产消费模型【1.1】为何要使用生产者消费者模型【1.2】生产者消费者模型优点【2】基于阻塞队列的生产消费者模型【2.1】生产消费模型打印模型【2.2】生产消费模型计算公式模型【2.3】生产消费模型计算公式加保存任务模型【2.3】生产消费模型多生产多消费【1】生产消费模型生产消费模型的321原则(便于记忆)。

WebGL中JS与GLSL ES 语言通信,着色器间的数据传输示例:js控制绘制点位

js改变点位,动态传值<canvasid="canvas"></canvas><!--顶点着色器--><scriptid="vertexShader"type="x-shader/x-vertex">attributevec4a_Position;voidmain(){//点位gl_Position=a_Positio

<Babel> 前端语言的巴别塔

Babel中文站点:https://www.babeljs.cn/Babel外文站点:https://babeljs.io/什么是BabelBabel取自人类语言最早的传说,TowerofBabel。上帝摧毁了巴别塔上说着共同语言的我们,又被Babel重新带了回来。如果说巴别塔是人们对混乱到秩序的向往,那Babel在前

详细介绍Webpack5中的Loader

loader用于帮助webpack将不同类型的文件转换为webpack可识别的模块。优先级分类pre:前置loadernormal:普通loader,没有用enforce指定就是normalinline:内联loaderpost:后置loaderloader执行顺序pre>normal>inline>post相同优先级

【深度学习】卷积神经网络(LeNet)【文章重新修改中】

卷积神经网络LeNet前言LeNet模型代码实现MINST代码分块解析1构建LeNet网络结构2加载数据集3初始化模型和优化器4训练模型5训练完成完整代码Fashion-MINST代码分块解析1构建LeNet网络结构2初始化模型参数3加载数据集4定义损失函数和优化器5训练模型完整代码参考与更多阅读材料前言全连接神经网络

前端进阶--深入理解JavaScript

1、JS的作用域和作用域链作用域链的作用是保证对执行环境有权访问的所有变量和函数的有序访问,通过作用域链,我们可以访问到外层环境的变量和函数。作用域链的本质上是一个指向变量对象的指针列表。变量对象是一个包含了执行环境中所有变量和函数的对象。作用域链的前端始终都是当前执行上下文的变量对象。全局执行上下文的变量对象(也就是

SpringBatch ItemProcessor详解

ItemProcessor在SpringBatch中用于对每个读取的数据项(item)进行处理或转换。一、ItemProcessor具体功能数据清洗(DataCleansing):清理数据以确保数据的一致性和准确性。这可以包括去除不必要的空格、特殊字符、修复数据格式等。数据转换(DataTransformation):

热文推荐