来自云从科技和上海交通大学的研究者近期提出一种新型框架 DenseBody,可直接从一张彩色照片中获取 3D 人体姿势和形状。该研究设计了一种高效的 3D 人体姿势和形状表示,无需中间表示和任务,端到端地实现从单个图像到 3D 人体网格的生成。

多年以来,如何从单一图像估计人体的姿势和形状是多项应用都在研究的问题。研究者提出不同的方法,试图部分或者联合地解决此问题。本文将介绍一种端到端的方法,使用 CNN 直接从单个彩色图像重建完整的 3D 人体几何。

该领域的早期研究使用迭代优化方法从 2D 图像估计人体姿势和形状信息,一般通过不断优化估计的 3D 人体模型来拟合一些 2D 的观测结果,比如 2D 关键点 [4] 或者轮廓 [11]。

随着深度学习的崛起,很多研究试图用 CNN 以端到端的方式解决该问题,其中有些已经达到了更好的性能和更快的运行速度。但是,用 CNN 直接预测完整的人体网格并不简单,因为训练这样的模型需要大量的 3D 标注数据。

近期研究大都结合了某些参数化的人体模型,如 SMPL [13],转而去预测这些模型的参数 [9]。[22,27] 借由关节或分割输出的帮助改善性能。这种基于模型的 3D 表示形式将 3D 人体形状限制在低维线性空间里,使其更容易通过 CNN 模型学习,但由于线性模型的限制,其性能可能无法达到最优。

[39] 提议使用一种体积表示(volumetric representation)来估计人体形状,展现了一定的优点,在此过程中预测的 3D 关节位置被作为中间结果输出。

虽然 3D 表示有多种选择,但近期基于 CNN 的方法大都依赖于某些中间 2D 表示和损失函数来引导训练过程。

在这些方法中,单个 RGB 图像到 3D 人体网格的映射问题被分解为两步:首先得到某些类型的 2D 表示,比如关节热图、掩码或 2D 分割;然后基于这些中间结果预测 3D 表示 [16,5]。这些研究所选择的中间表示以及解决这些子任务的神经网络的输出质量,很大程度上会影响它们的最终效果。

云从科技的这项研究提出了一种高效的方法,从单个 RGB 图像中直接得到完整的 3D 人体网格。

这个方法和其他研究的主要区别有以下两个方面:首先,该研究提出的网络没有结合任何参数化的人体模型,因此该网络的输出不会受到任何低维空间的限制;其次,该方法的预测过程是一步到位的,没有依赖于中间任务和结果来预测 3D 人体。该研究在多个 3D 人体数据集上评估了这一方法,并将其与之前研究中的方法做了对比。

评估结果表明该方法的性能远超其他结果,且运行速度更快。

该研究的主要贡献如下:

  1. 提出了一个端到端的方法,从单个彩色图像直接得到 3D 人体网格。为此,研究者开发了一种新型 3D 人体网格表示。它能够把 2D 图像中的完整人体编码为姿势和形状信息,无需依赖任何参数化的人体模型。
  2. 把 3D 人体估计的复杂度从两步降到了一步。该研究训练了一个编码器-解码器网络,可直接把输入 RGB 图像映射到 3D 表示,无需解决任何中间任务,如分割或 2D 姿态估计。
  3. 进行了多次实验来评估以上方法的效果,并与现有的最优方法进行对比。结果显示,该方法在多个 3D 数据集上实现了显著的性能提升,运行速度也更快。

图 1:示例结果

论文:DenseBody: Directly Regressing Dense 3D Human Pose and Shape From a Single Color Image

论文地址:https://arxiv.org/pdf/1903.10153.pdf

摘要:由于人体的高度复杂性和灵活性,以及 3D 标注数据相对较少,从 2D 图像得到 3D 人体姿势和形状可谓是一个难题。之前的方法大体上依赖于预测中间结果,比如人体分割、2D/3D 关节、以及轮廓掩码,将当前问题分解成多个子任务,从而利用更多 2D 标签或者结合低维线性空间内的参数化人体模型来简化问题。

在本文中,我们提出使用卷积神经网络(CNN),直接从单个彩色图像得到 3D 人体网格。我们设计了一种高效的 3D 人体姿势和形状表示,可以通过编码器-解码器结构的神经网络学习获得。实验表明我们的模型在多个 3D 人体数据集上达到了当前最优性能,同时运行速度更快。数据集包括 Human3.6m、SURREAL 和 UP-3D。

3. 本文提出的方法

3.1 3D 人体表示

之前的研究通常使用 SCAPE 和 SMPL 这样的可变形模型和体素来表示 3D 人体几何结构。本文提出的方法则用 UV 位置映射图来表示 3D 人体几何结构,其有如下优点:首先,它能保存点和点之间的空间邻接信息,相比一维的向量表示,该信息对精确重建更为关键;其次,相比体素这样的 3D 表示,它的维数更低,因为体素表示法中,大量不在表面上的点其实用处不大;最后,这是一个 2D 表示,所以我们能直接使用现成的 CNN 网络,例如 Res-net 和 VGG,使用计算机视觉领域的最新进展。

在人体重建领域,UV 映射图作为一种物体表面的图片表达方式,经常被用来渲染纹理图。在这篇论文里,我们尝试使用 UV 映射图来报答人体表面的几何特征。大多数的 3D 人体数据集提供的三维标注是基于 SMPL 模型的,SMPL 模型本身提供了一个自带的 UV 映射图,把人体切分成了 10 个区域。

DensePose 里面提供了另一种人体切分的方式,并提供了一个 UV 映射图,将人体切分成了 24 个区域。我们实验了两种切分方式,SMPL 的 UV 映射图获得了更好的实验结果。因此,在我们的方法中,我们采用这个 UV 映射图来存储整个人体表面的三维位置信息。

图 2 展示了不同分辨率下 UV 位置映射图的顶点变形和重采样时引入的误差。考虑到当前最优方法的全身精度误差(surface error)和关节精度误差(joint error)在几十毫米的数量级,我们选择了 256 的分辨率,它引入的 1 毫米全身精度误差可以忽略不计。另外,256 分辨率的 UV 映射图能够表示六万多个顶点,远多于 SMPL 的顶点数。

图 2:在不同的 UV 位置映射图分辨率下,由于变形和重采样引入的全身精度误差和关节精度误差,单位为毫米

3.2 网络和损失函数

我们的网络采用编码器-解码器结构,输入是 256*256 的彩图,输出是 256*256 的 UV 位置映射图,其中编码器部分使用 ResNet-18,解码器是由四层上采样和卷积层组成。

不同于以前的方法中需要仔细设计和融合多种不同损失函数的做法,我们直接针对预测的 UV 位置映射图进行监督和设计损失函数 (见表 2)。为了平衡不同的身体区域对训练的影响,我们采用了权重掩模图来调整损失函数。此外,关节点附近的点的权重也进行了加重。

表 1:不同方法中采用的损失函数图 3:不同方法的框架与 DenseBody 对比

3.3 实现细节

所有的图像都先做了对齐,使人位于正中。然后通过裁剪和缩放调整到 256x256,使得紧凑的边界框和图像边缘之间距离适中。图像经过了随机的平移、旋转、翻转和色彩抖动。我们要注意,数据增强的操作大都不简单,因为对应的真值数据也要进行相应的形变。

而当随机形变后的人体超过了 256x256 的画布,则该增强操作无效。我们用正交投影来得到位置映射图的 x-y 坐标,以避免深度信息的误差传播。真值数据的深度信息要经过适当缩放,以控制在 sigmoid 输出的值域里。

我们使用 Adam 优化器,学习率为 1e-4,mini-batch 的大小为 64,训练直到收敛为止(大概 20 个 epoch)。在单个 GTX 1080Ti GPU 上训练大约 20 个小时。代码实现基于 Pytorch。

4. 实验

表 2:在 SURREAL 上的实验结果,全身精度误差和关节精度误差以毫米为单位表 4:UP-3D 上的实验结果。全身精度误差和关节精度误差以毫米为单位表 5:在单个 GTX1080TI 上的前向运行时,以毫秒为单位。1 表示在 TITAN X GPU 上运行

新型DenseBody框架:一张照片获得3D人体信息的更多相关文章

  1. MVVM 一种新型架构框架

    MVVM是Model-View-ViewModel的简写.微软的WPF带来了新的技术体验,如Silverlight.音频.视频.3D.动画……,这导致了软件UI层更加细节化.可定制化.同时,在技术层面 ...

  2. SSH_框架整合4--添加员工信息

    SSH_框架整合4--添加员工信息 一. 1 index.jsp:添加:<a href="emp-input">添加员工向信息:Add Employees' Infor ...

  3. 学界| UC Berkeley提出新型分布式框架Ray:实时动态学习的开端—— AI 应用的系统需求:支持(a)异质、并行计算,(b)动态任务图,(c)高吞吐量和低延迟的调度,以及(d)透明的容错性。

    学界| UC Berkeley提出新型分布式框架Ray:实时动态学习的开端 from:https://baijia.baidu.com/s?id=1587367874517247282&wfr ...

  4. Android -- junit测试框架,logcat获取log信息

    1. 相关概念 白盒测试: 知道程序源代码. 根据测试的粒度分为不同的类型   方法测试 function test         单元测试 unit test                 集成 ...

  5. 使用Newspaper3k框架快速抓取文章信息

    一.框架介绍 Newspaper是一个python3库,但是Newspaper框架并不适用于实际工程类新闻信息爬取工作,框架不稳定,爬取过程中会有各种bug,例如获取不到url.新闻信息等,但对于想获 ...

  6. python-scrapy爬虫框架爬取拉勾网招聘信息

    本文实例为爬取拉勾网上的python相关的职位信息, 这些信息在职位详情页上, 如职位名, 薪资, 公司名等等. 分析思路 分析查询结果页 在拉勾网搜索框中搜索'python'关键字, 在浏览器地址栏 ...

  7. yii框架中保存第三方登录信息

    (第三方登录) 创建应用,域名,详情请看:http://www.cnblogs.com/xujn/p/5287157.html 效果图:

  8. Mock8 moco框架如何返回一个cookie信息

    还是用之前的startupWithCookies.json这个文件,直接往里面添加上面的一个代码: [ { "description":"这是一个会返回cookies信息 ...

  9. Python scrapy框架爬取瓜子二手车信息数据

    项目实施依赖: python,scrapy ,fiddler scrapy安装依赖的包: 可以到https://www.lfd.uci.edu/~gohlke/pythonlibs/  下载 pywi ...

随机推荐

  1. 当 1117 遇到 MLCC 后

    当 1117 遇到 MLCC 后 AMS1117 很多人用过吧,但是当大容量的 MLCC 时会出现什么呢? 会出现问题,而且严重的问题,输出纹波会变大,会自激,会有声音出来. 这是很多工程师没有注意的 ...

  2. day28 1.缓冲区 2.subprocess 3.黏包现象 4.黏包现象解决方案 5.struct

    1.缓冲区: 输入缓冲区  输出缓冲区 2. subprocess的使用import subprocess sub_obj = subprocess.Popen('ls', #系统指令shell=Tr ...

  3. roadhog 知识点

    roadhog 是一个 cli 工具,提供 server. build 和 test 三个命令,分别用于本地调试和构建,并且提供了特别易用的 mock 功能.命令行体验和 create-react-a ...

  4. python多线程、多进程相关知识

    Queue Queue用于建立和操作队列,常和threading类一起用来建立一个简单的线程队列. 首先,队列有很多种,根据进出顺序来分类,可以分成 Queue.Queue(maxsize) FIFO ...

  5. InvokeRequired和Invoke(转)

    C#中禁止跨线程直接访问控件,InvokeRequired是为了解决这个问题而产生的,当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它.此时它将会在内部调用ne ...

  6. java中==与equals

    == ==可用于比较基本类型与引用类型,对于基本类型变量比较的是其存储的值是否相等,对于引用类型则比较的是其是否指向同一个对象. 如: int a = 10; int b = 20; double d ...

  7. HttpServletResponse和HttpServletRequest

    1.相关的接口   HttpServletRequest HttpServletRequest接口最常用的方法就是获得请求中的参数,这些参数一般是客户端表单中的数据.同时,HttpServletReq ...

  8. linux 安装多个版本JDK,指定tomcat的jdk版本

    JDK的下载可以直接到官网下载,这里不再介绍 一.安装JDK 7 vi /etc/profile #set java environmentexport JAVA_HOME=/usr/java/jdk ...

  9. 虚拟机怎么发送ctrl+alt+delete组合键

    相信各位It的从业人员都遇到过安装了虚拟机搭建测试环境,可是在使用windows服务器版本操作系统的时候.出现要求发送ctrl+alt+delete组合键,才能登陆操作系统.为此咗嚛提供3个方法给您解 ...

  10. padding margin

    padding:内边距 margin:外边距 内外边距是针对本标签相对于它相邻的标签而言. margin: 10px;是本标签与它周围上下左右有10像素的空白. padding: 10px;本标签其实 ...