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

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

文章目录

  • Single-Shot 3D Shape Reconstruction Using Structured Light and Deep Convolutional Neural Networks
    • Abstract
    • 1. Introduction
    • 2.Methodology
      • 2.1 使用FPP技术制作训练数据集
      • 2.2 Network Architecture
    • 3.实验及结果
      • 3.1 Test Data Acquisition
      • 3.2 Training, Analysis和Evaluation
        • Training
        • Evaluation
    • 4.Discussion
    • 5.Conclusion

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.

[论文阅读][深度学习-三维重建]Single-Shot 3D Shape Reconstruction Using Structured Light and CNN_第1张图片

本文使用了三种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架构图示如下:

[论文阅读][深度学习-三维重建]Single-Shot 3D Shape Reconstruction Using Structured Light and CNN_第2张图片

训练和测试数据集是四维向量, 维度为 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

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

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

(原文附件视频查看: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 (???咋算的).

[论文阅读][深度学习-三维重建]Single-Shot 3D Shape Reconstruction Using Structured Light and CNN_第4张图片

结果可以看出:

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

直观展示下结果

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

[论文阅读][深度学习-三维重建]Single-Shot 3D Shape Reconstruction Using Structured Light and CNN_第5张图片
[论文阅读][深度学习-三维重建]Single-Shot 3D Shape Reconstruction Using Structured Light and CNN_第6张图片

可以看出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秒之间.

[论文阅读][深度学习-三维重建]Single-Shot 3D Shape Reconstruction Using Structured Light and CNN_第7张图片

4.Discussion

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

5.Conclusion

你可能感兴趣的:(论文阅读,cnn,深度学习,神经网络,计算机视觉)