原文链接:Pix2Vox: Context-aware 3D Reconstruction from Single and Multi-view Images

介绍

本文提出了一种基于深度神经网络的单视图(single-view)和多视图(multi-view)的3D物体重建方法。

为了生成物体的3D表示,经典的3D-R2N2和LSM模型将多视图重建问题视为一种序列学习任务,并使用RNN来进行特征融合。然而,基于RNN的方法有以下缺点:

  • 改变输入图片的顺序后,产生的结果会不一致;
  • 由于RNN的长期记忆损失(long-term memory loss),无法使用所有输入图片的信息来对结果进行改进;
  • 只能顺序处理图片,无法并行处理,因此时间开销大。

本文的主要贡献包括:

  • 提出能同时进行single-view和multi-view 3D重建的网络Pix2Vox,它通过使用encoder、decoder、refiner,对合成图片和真实图片都具有良好的重建能力;
  • 提出一种清楚上下文的(context-aware)融合模块,它从不同的3D重建结果中提取出高质量的部分,并融合为整个物体;
  • ShapeNet和Pascal 3D+数据集上的测试结果表明Pix2Vox具有state-of-art的性能,并具有优秀的泛化性。

方法

Pix2Vox网络的目标是从单张图片或多张图片重建出一个物体的形状,该形状是使用3D voxel网格表示的,voxel值为1表示属于该物体,值为0表示在该物体之外(记住这一点对理解Fusion Module很重要)。

Pix2Vox的网络结构框架如图所示:

graph TD A[input image]-->|encoder| B[feature map] B-->|decoder| C[coarse 3d volume] C-->|context-aware fusion module| D[fused 3d volume] D-->|refiner| E[final reconstruction result]

1.png

为了在模型性能与参数量之间做出权衡,实现了两个版本的Pix2Vox:Pix2Vox-F和Pix2Vox-A,其结构分别如下图所示:

2.png

Encoder

Encoder的作用是对于输入图片生成feature map,它使用一个预训练的VGG16网络提取特征。之后,它使用3个卷积层来将语义信息映射为特征向量。

层数Pix2Vox-FPix2Vox-A
输入$224\times 224\times 3$$224\times 224\times 3$
1$\text{Conv}(64, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$$\text{Conv}(64, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$
2$\text{Conv}(64, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$$\text{Conv}(64, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$
3$\text{MaxPool}(2\times 2)$$\text{MaxPool}(2\times 2)$
4$\text{Conv}(128, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$$\text{Conv}(128, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$
5$\text{Conv}(128, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$$\text{Conv}(128, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$
6$\text{MaxPool}(2\times 2)$$\text{MaxPool}(2\times 2)$
7$\text{Conv}(256, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$$\text{Conv}(256, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$
8$\text{Conv}(256, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$$\text{Conv}(256, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$
9$\text{Conv}(256, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$$\text{Conv}(256, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$
10$\text{MaxPool}(2\times 2)$$\text{MaxPool}(2\times 2)$
11$\text{Conv}(512, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$$\text{Conv}(512, 3\times 3, 1, 1), \text{BN}, \text{ReLU}$
12$\text{Conv}(512, 1\times 1, 1, 0), \text{BN}, \text{ELU}$$\text{Conv}(512, 3\times 3, 1, 0), \text{BN}, \text{ELU}$
13$\text{Conv}(256, 3\times 3, 1, 0), \text{BN}, \text{ELU}$$\text{Conv}(512, 3\times 3, 1, 0), \text{BN}, \text{ELU}$
14$\text{MaxPool}(4\times 4)$$\text{MaxPool}(3\times 3)$
15$\text{Conv}(128, 3\times 3, 1, 0), \text{BN}, \text{ELU}$$\text{Conv}(256, 1\times 1, 1, 0), \text{BN}, \text{ELU}$
输出$256\times 2^3$$2048\times 2^3$

Decoder

Decoder的作用是将2D特征图的信息转化为3D volume。最后一层使用sigmoid函数是为了求出每个voxel在物体内部的概率(相当于一种二分类)。

层数Pix2Vox-FPix2Vox-A
输入$256\times 2^3$$2048\times 2^3$
1$\text{Deconv}(128, 4\times 4\times 4, 2, 1), \text{BN}, \text{ReLU}$$\text{Deconv}(512, 4\times 4\times 4, 2, 1), \text{BN}, \text{ReLU}$
2$\text{Deconv}(64, 4\times 4\times 4, 2, 1), \text{BN}, \text{ReLU}$$\text{Deconv}(128, 4\times 4\times 4, 2, 1), \text{BN}, \text{ReLU}$
3$\text{Deconv}(32, 4\times 4\times 4, 2, 1), \text{BN}, \text{ReLU}$$\text{Deconv}(32, 4\times 4\times 4, 2, 1), \text{BN}, \text{ReLU}$
4$\text{Deconv}(8, 4\times 4\times 4, 2, 1), \text{BN}, \text{ReLU}$$\text{Deconv}(8, 4\times 4\times 4, 2, 1), \text{BN}, \text{ReLU}$
5$\text{Deconv}(1, 1\times 1\times 1, 1, 0), \text{BN}, \text{Sigmoid}$$\text{Deconv}(1, 1\times 1\times 1, 1, 0), \text{BN}, \text{Sigmoid}$
输出$32^3 \text{Volume}$$32^3 \text{Volume}$

Context-aware Fusion

从不同的视角看到的物体的部分是不同的,能看到的部分重建效果要远好于看不到的部分。从不同视角得到的3D Volume中,有的部分效果好,有的部分效果差,且不同的3D Volume中效果好的部分是不一样的。因此,我们使用Fusion Module将decoder产生的不同的3D volume融合到一起,起到“取长补短”的作用,来生成最终的整个物体的3D Volume。

3.png

Context-aware Fusion Module的结构如上图所示。具体地,假设一共有 $n$ 个视角,经过encoder-decoder后得到了 $n$ 个coarse 3d volume,则我们首先对每个volume计算出一个context,再用这个context计算出每个volume的score(这个score是voxel级别的,即对volume中每个位置的voxel都有一个分值),最后再使用求出的score对n个volume进行加权求和即可。

对于第 $r$ 个3D Volume,其context $c_r$是通过将decoder的最后两层的输出进行连接(concatenation)得到的;然后,context打分网络(context scoring network)对context进行打分,生成分数$m_r$,该网络的结构如下表所示。

层数context scoring network
1$\text{Conv}(16, 3\times 3\times 3, 1, 1), \text{BN}, \text{LeakyReLU}$
2$\text{Conv}(8, 3\times 3\times 3, 1, 1), \text{BN}, \text{LeakyReLU}$
3$\text{Conv}(4, 3\times 3\times 3, 1, 1), \text{BN}, \text{LeakyReLU}$
4$\text{Conv}(2, 3\times 3\times 3, 1, 1), \text{BN}, \text{LeakyReLU}$
5$\text{Conv}(1, 3\times 3\times 3, 1, 1), \text{BN}, \text{LeakyReLU}$

使用softmax对分数 $m_r$ 进行归一化,第 $r$ 个volume中位置 $(i, j, k)$ 处的分数为:

$$ s_{r}^{(i, j, k)}=\frac{\exp \left(m_{r}^{(i, j, k)}\right)}{\sum_{p=1}^{n} \exp \left(m_{p}^{(i, j, k)}\right)} $$

最后,将所有 $n$ 个volume的分数进行加权求和,得到最终的融合后的volume:

$$ v^{f}=\sum_{r=1}^{n} s_{r} v_{r}^{c} $$

Refiner

Refiner可以被视为一个残差网络(residual network),其目标是校正3D volume中重建错误的部分。通过使用U-Net中shortcut connections的思想,融合后的3D volume能够保留局部细节。其网络结构如下表所示:

层数Refiner
输入$32^3 \text{Volume}$
1$\text{Conv}(32, 4\times 4 \times4, 1, 2), \text{BN}, \text{LeakyReLU}$
2$\text{MaxPool}(2\times 2\times 2)$
3$\text{Conv}(64, 4\times 4 \times4, 1, 2), \text{BN}, \text{LeakyReLU}$
4$\text{MaxPool}(2\times 2\times 2)$
5$\text{Conv}(128, 4\times 4 \times4, 1, 2), \text{BN}, \text{LeakyReLU}$
6$\text{MaxPool}(2\times 2\times 2)$
7$\text{Linear}(2048),\text{ReLU}$
8$\text{Linear}(8192),\text{ReLU}$
9$\text{Conv}(64, 4\times 4 \times4, 2, 1), \text{BN}, \text{ReLU}$
10$\text{Conv}(32, 4\times 4 \times4, 2, 1), \text{BN}, \text{ReLU}$
11$\text{Conv}(1, 4\times 4 \times4, 2, 1), \text{BN}, \text{Sigmoid}$
输出$32^3 \text{Volume}$

损失函数

损失函数定义为voxel级的二元交叉熵损失:

$$ \ell=\frac{1}{N} \sum_{i=1}^{N}\left[g t_{i} \log \left(p_{i}\right)+\left(1-g t_{i}\right) \log \left(1-p_{i}\right)\right] $$

实验

使用IoU作为评价指标,其公式为:

$$ \mathrm{IoU}=\frac{\sum_{i, j, k} \mathrm{I}\left(p_{(i, j, k)}>t\right) \mathrm{I}\left(g t_{(i, j, k)}\right)}{\sum_{i, j, k} \mathrm{I}\left[\left(p_{(i, j, k)}>t\right)+\mathrm{I}\left(g t_{(i, j, k)}\right)\right]} $$

合成图片的重建

Single-view的重建结果:

4.png

Multi-view的重建结果:

5.png

6.png

真实图片的重建

7.png

Last modification:August 11th, 2019 at 11:08 pm
如果觉得我的文章对你有用,请随意赞赏