介绍

任务:3D场景重建

输入:单张2D图片

输出:场景的3D表示,包含场景布局、物体的形状和姿态

方法

image-20190920174603153

如图所示,网络包含两个部分。第一个是scene network,将输入图片映射为非模态的布局(amodal layout),描述擦除物体后的场景;第二个是object-centric network,将物体的bounding box映射为它们的构成因子:形状(shape)和姿态(pose)。

布局

布局表示场景的enclosing surfaces,例如墙壁和地板。layout module是一个类似于U-Net的含有skip connection的encoder-decoder结构。使用 $L_1$ 损失函数对该网络进行训练:

$$ \mathrm{L}_{H}=\|\mathbf{H}-\hat{\mathbf{H}}\|_{1} $$

$\mathbf{H}$ 表示网络预测的layout,$\hat{\mathbf{H}}$ 表示ground truth layout。

物体预测

物体的形状表示为大小为 $32^3$ 的体素网格 $\mathbf{V}$;姿态表示为各向异性放缩因子 $\mathbf{c}$、用四元组表示的旋转 $\mathbf{q}$和平移$\mathbf{t}$。

给定一个特征向量,直接使用线性层将其映射为 $\mathbf{c},\mathbf{q},\mathbf{t}$。为了得到体素网格 $\mathbf{V}$,首先将特征向量映射为形状编码 $\mathbf{s}$,然后解码出 $\mathbf{V}$。

特征向量来自以下3个模块输出的连接:

  • fine module使用原始图像的分辨率生成特征图,并跟着ROI Pooling层;
  • coarse module使用比原始图片更低的分辨率生成特征图并向量化;
  • bounding box module使用全连接层映射bounding box的位置。

形状损失函数

物体的形状是一个3D体素网格,其损失函数定义为体素级的交叉熵损失:

$$ \mathrm{L}_{V}=\frac{1}{N} \sum_{n} \mathbf{V}_{n} \log \hat{\mathbf{V}}_{n}+\left(1-\mathbf{V}_{n}\right) \log \left(1-\hat{\mathbf{V}}_{n}\right) $$

旋转的预测

我们用四元素表示旋转,将旋转的预测视为一个分类问题有助于解决旋转的多模态性。我们将训练集中的四元组分为24个bin,然后最优化负对数似然:

$$ \mathrm{L}_{q}^{c}=-\log \left(\mathbf{k}_{d}^{k}\right) $$

其中 $k$ 表示ground truth bin。

放缩和平移的预测

将放缩和平移预测视为回归任务,并最优化平方欧几里得损失(对于放缩,在对数空间内最优化):

$$ \mathrm{L}_{t}=\|\mathrm{t}-\hat{\mathrm{t}}\|_{2}^{2} $$

$$ \mathrm{L}_{c}=\|\log (\mathbf{c})-\log (\hat{\mathbf{c}})\|_{2}^{2} $$

训练以预测整个场景

之前的讨论中,我们假设图片上的bounding box是已知的。给定一张输入图像,为了得到它的bounding boxes,我们需要预测bounding box proposals。假设一个proposal是一个前景物体的概率为 $f$,我们使用交叉熵损失来对bounding box proposals进行训练。$\mathcal{B}^{+}$ 和 $\mathcal{B}^{-}$ 分别表示前景和背景proposal,则最终的目标函数为:

$$ \mathrm{L}=\sum_{b \in \mathcal{B}^{+}}\left(\mathrm{L}_{V}+\mathrm{L}_{q}+\mathrm{L}_{t}+\mathrm{L}_{r}-\ln (f)\right)+\sum_{b \in \mathcal{B}^{-}} \ln (1-f) $$

实验

image-20190920184212463

image-20190920184246331

Last modification:September 20th, 2019 at 06:45 pm
如果觉得我的文章对你有用,请随意赞赏