[论文阅读][深度学习-三维重建]Single-Shot 3D Shape Reconstruction Using Structured Light and CNN

Single-Shot 3D Shape Reconstruction Using Structured Light and Deep Convolutional Neural Networks

Abstract

这篇文章研究了一种将结构光与卷积神经网络(CNN)结合起来的三维重建算法。算法的输入是单张条纹图像,输出是深度图。训练和验证数据集是通过传统的条纹结构光算法得到的(数据有着高质量的3D ground truth labels)。为了得到深度信息,传统的方法使用复杂的算法计算相位或像素视差,而本文提出了一种end-to-end的方法,可以直接由2D图像得到3D深度图。本文提出并比较了三种基于CNN的模型,并且公开了一个高精度的结构光数据集。

1. Introduction

结构光技术,根据所需要的图像张数,可以被分为两种, multi-shot和single-shot 。multi-shot精度高,被广泛用于工业领域。single-shot速度快,可以处理动态场景,在娱乐和机器人领域受到更多关注。

随着CNN的发展,在图像分割领域涌现出一些end-to-end的架构,比如UNet等。在三维重建领域,Eigen[22]和Liu[23]等学者提出了一种CNN模型,可以使用单张图像做深度估计。但是他们使用的是Kinect的RGB-D数据集,精度较差。受两人的工作启发,Choy[24]提出一种架构,将RNN引入到了具有自动编码器的CNN模型中(?????),来做单视图和多视图的三维重建。Duo[25]等提出一种CNN模型,可以从单张照片重建3D脸部模型。尽管在一个合成的公开数据集上表现很好,但该方法需要复杂的后处理步骤。最近Paschalidou 结合了CNN和马尔科夫随机场,提出了end-to-end的RayNet 来做多视图三维重建。以上方法的共同缺点是,没有使用高精度的训练数据。

在光学领域,涌现了很多使用CNN进行结构光条纹分析的工作。比如Feng,Yin[27-35]等结合CNN和相移技术来做相位解包裹。也有使用深度学习技术来做降噪的[36-38]。

由于CNN在图像分割,三维重建和条纹分析等领域的成功应用,使用CNN从单张结构光图像中重建高精度的三维模型也是值得尝试的。拥有巨量参数的深度CNN模型可被训练来拟合任何复杂的非线性回归模型,比如将一张传统的结构光图像映射到其对应的深度图上的模型。当前,CNN技术和传统结构光技术中应用最广泛的技术:FPP的结合,是研究的热点。本文提出了一种将两者结合的方法:使用一个具有encoder和decoder的CNN模型,将单张高频条纹图映射为一张3D图像。同传统的三维测量方法相比,本文的方法要简单很多,因为不需要任何几何信息,或者复杂的标定和三角计算。

精准的训练数据集对于机器学习模型的训练是非常重要的。本文使用FPP技术(16张图像)来制作ground truth, 用来做模型的训练和验证。

本文的2.1 节介绍了FPP技术,2.2节介绍模型的细节,3节是实验结果,4和5做了小结。

2.Methodology

2.1 使用FPP技术制作训练数据集

简要介绍了FPP技术的原理,包括相位计算,多频法相位解包裹技术,以及如何从相位分布得到深度信息[46,47],这里不再赘述。

使用FPP技术生成的data可以直接被喂给CNN模型来做训练。

2.2 Network Architecture

模型由两部分组成,encoder和decoder. encoder 包括了convolution和pooling操作, 可以从输入图像中提取到重要的特征. decoder, 包括了transpose convolution 和unpooling操作, 可以将低维feature map通过stack和concatenate, 生成更高分辨率的layers.

在这里插入图片描述

本文使用了三种CNN架构, 比较了他们的效果:

  1. FCN

    FCN被应用于语义分割. FCN的encoder采用了同时期的分类网络, 并将全连接层转换为卷积层, 然后再将粗输出上采样到与输入同样的大小. 本文采用了FCN-8s 架构[19] ,该架构可以防止空间信息的丢失.

  2. AEN

    AEN有一个encoder和与之对称的decoder.本文提出的AEN共33层

  3. UNet

    UNet和AEN的架构很像.主要的区别在于,UNet中, 来自encoder的 local context information 被直接连接(concatenated)到了上采样输出. 这有助于提高输出的分辨率.

三种CNN架构图示如下:

在这里插入图片描述

训练和测试数据集是四维向量, 维度为 s × h × w × c s \times h \times w \times c s×h×w×c, s是样本个数, h和w是图像的空间分辨率, c是图像通道数. 网络包括了convolution, pooling, transpose convolution, 和unpooling 层, 但不包括任何全连接层. 卷积层用到的激活函数为Relu.

max pooling 层的size为 2x2, stride为2. 在AEN和UNet 中, 2D transpose convolution 被用在decoder中, 作用是将低分辨率的feature 转换为高分辨率的feature. 最后有个1x1 的卷积层, 可以将feature map 转为深度图.

3.实验及结果

硬件环境

  • PC: i7-980 CPU, 16GB RAM, Nvidia GeForceGTX 1070
  • Projector: Epson PowerLite98
  • Camera: Silicon Video 643M

深度学习环境

  • Keras
  • Nvidia CUDnn

实验环境

  • FOV: 155mm
  • 物距: 1.2m
  • 拍摄物品: 雕塑

3.1 Test Data Acquisition

使用FPP算法, 分别生成了1120, 140和140组真实数据作为训练集,验证集和测试集.数据集已开放下载https://figshare.com/articles/dataset/Single-shot_3D_shape_reconstruction_datasets/7636697

四步相移法中, 最高频的第一张图被作为输入图像.

在这里插入图片描述

(原文附件视频查看:https://www.mdpi.com/1424-8220/20/13/3718/s1)

data split ratio为(0.8,0.1,0.1) ,这对于小数据集来说足够了 ???

原始数据中的阴影区域不参与训练.

3.2 Training, Analysis和Evaluation

Training
  • 优化算法 Adam
  • 300 epochs
  • mini-batch size: 2 images
  • 学习率: 每当20个连续的epochs 的validation loss 不再有提升, 则学习率减半
  • 过拟合问题的解决: data_augmentation, weight regulazation, data shuffling, drop out
  • 超参数调优: grid search
  • loss function: 二值交叉熵(ground truth 需要scale 到[0,1]区间)或者MSE
  • 每个epoch 结束的时候, 会随机选择一张image,使用更新后的参数进行测试
Evaluation

evaluation 的指标使用的是重建的3D shape 的 MRE和RMSE (???咋算的).

在这里插入图片描述

结果可以看出:

  1. FCN误差最大, 训练时间最长(因为有element summation操作 ???)
  2. AEN训练时间最小,但是精度略逊于UNet
  3. batch size 越小, 模型表现越好

直观展示下结果

Figure5 是取了深度图的一行像素

在这里插入图片描述
在这里插入图片描述

可以看出AEN和UNet比FCN的结果要好, 主要原因是FCN 仅使用双线性上采样算子(???)从低分辨率来恢复高分辨率特征, 造成了很多细节丢失. AEN和UNet在decoder中包含了和其encoder对称的操作, 这有助于信息在各层之间更好的传递,从而保留了更多的细节.(???)

而与AEN相比, UNet拥有可以将local features直接传递到decoder的concatenation操作, 这使得它在三者中表现最好.

对于传统方法,由于条纹相位的不连续性, 使用一张条纹图来重建拥有不同深度的多个物体是不可行的. (???) 然而, 这对于深度学习方法不是个问题, 因为根本不需要计算相位.

最后比较了下传统的FPP, 3D-DIC技术 和UNet的结果. 技术上来说, 3D-DIC 使用两个相机同时成像, 仅使用一张图, 该技术需要area或block based image registration, 所以其一般来说分辨率比FPP要低(???)

下图展示了三种技术的重建效果, 精度方面, FPP最高, DIC次之, UNet最低.但是UNet计算时间要小于50ms. 而其他两种方法在0.1到2秒之间.

在这里插入图片描述

4.Discussion

在精度方面,尽管本文提出的方法还有进一步提升的空间, 但是需要更多的训练数据(这很耗费时间)和更深层的神经网络模型(这在训练阶段很吃算力和内存). 未来的工作可以着眼在更好的模型, 更大的数据集以及寻求更好的硬件或云计算来加速模型的训练

5.Conclusion

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值