最近一段时间有接触”从2D图片中重建物体3D形状“的技术问题,这里做一点梳理。

”从单张图片中重建物体的3D形状”是3D重建领域下的一个分支问题。相比于传统的使用结构光,深度摄像头,以及SFM/SLAM等多视图的重建方法,该技术只需要输入单张图片,硬件成本低且使用方便。在精度要求不高,希望便捷易用的场景有较大发展潜力。

 

1.技术上解决从2D图片生成3D形状,首先要解决3D形状怎么表示的问题,有以下方法:

主要方法

代表模型

模型特点

开源代码

体素表示方法

3D-R2N2

3D循环卷积网络


点云表示方法

PSGN

CD,EMD评价指标


mesh表示方法

Pix2Mesh

图卷积网络


跑了开源代码的提供的demo,未进一步深入了解。三种方法技术上比较相似。都使用Shapenet做训练数据集,输入3D模型和模型对应的2D图片,通过普通CNN网络提取2D图片的特征,再通过图卷积等网络将2D特征和3D形状融合到一起。个人理解特征提取和特征融合还是算法的关键。

 

体素方法可以很容易的表示3D形状,但比较粗糙;点云方法更易于计算,但不好表示3D形状;mesh方法能获得较光滑的物体表面。推荐mesh+图卷积的方法作为单图片3D重建的技术方向。

 

2.了解技术方法后,最关心的问题是,”训练模型需要什么样的数据“?收集了常用的几个公开数据集

数据集

描述

大小

Pascal 3D+

12类3D标注,每类超过3000个图片实例

7.5G

Pix3D

提供了2D-3D像素级的标注联系

3.6G

ShapeNet

55类,51300个3D模型,包含Pascal 3D+

28G

其中ShapeNet使用CAD模型,图片实例背景干净;Pix3D使用真实场景的图片。数据集的特征:

1)需要提供图片对应的3D模型作为标注信息,一个3D模型对应数量不定的图片

2)需要大量2D图片数据,从模型的不同角度获得图片,再混合其他图片进行扩充

目前这些数据集都没有包含物体的纹理信息,如颜色,表面纹理等等;另外都是人造物体,其形状和大小容易控制,如果在自然物体上应用,如食材等可能存在挑战。单图3D重建的算法比分类,检测算法更复杂,要在嵌入式端落地在算力上有困难。