论文笔记:LayoutNet(CVPR 2018)

LayoutNet: Reconstructing the 3D Room Layout From a Single RGB Image(CVPR 2018)

pdf下载 项目地址(原) 项目地址(pytorch)
LayoutNet是直接在全景图上预测房间布局具有代表性的模型,模型结构和RoomNet类似,但是基于消失点对齐改进了准确度。将结构和Manhattan布局对齐。LayoutNet能够预测盒形布局和更普通的布局(比如L形)

在这里插入图片描述

Contributions

  • 提出通用的从RGB图像恢复Manhattan布局算法
  • 证明了使用预处理计算消失点和几何约束,以及后处理优化对于深层的NN仍然有效。直接回归3D布局参数能够提高准确度。

Related Work

  • 早期传统方法:在透视中假设Manhattan world恢复布局,Manhattan world假设墙互相垂直,且垂直天花板/地板。
    基于线段检测生成方向图恢复矩形布局。
    求三个消失点,求和消失一样的布局,且要求边界和几何上下文Geometric Context一致。
  • 近期方法:PanoContext(把全景图投影多个透视图,在透视图上计算特征再反投影回全景图)、RoomNet(基于NN,适用透视图)

本文和RoomNet类似,但是LayoutNet适用全景图。在输入NN之前进行了消失点对齐。

Approach

Panoramic image alignment

对全景图进行投影(应该是投影成多张重叠透视图),用LSD(Line Segment Detector)对每张透视图进行检测。再用Hough变换投票选出三个互相正交的消失方向(Manhattan线)。这个预处理步骤简化了NN训练。检测到的Manhattan线一起输入NN提供了额外的输入特性,以提高性能。

Network structure

在这里插入图片描述

encoder-decoder结构

Deep panorama encoder:
输入: 512 × 1024 × 3 512 \times 1024 \times 3 512×1024×3(或者透视图: 512 × 512 × 3 512 \times 512 \times 3 512×512×3) 加上Panoramic image alignment得到的Manhattan线特征图和全景图尺寸一样,输入到encoder中。

一共7层卷积,卷积size 3 × 3 3 \times 3 3×3,每层后接RelU和下采样因子为2的最大池化。初始特征32通道,所以推测每层特征尺寸:
input: ( 3 + 3 ) × 512 × 1024 (3+3) \times 512 \times 1024 (3+3)×512×1024
cov1: 32 × 256 × 512 32 \times 256 \times 512 32×256×512
cov2: 64 × 128 × 256 64 \times 128 \times 256 64×128×256

cov7: 2048 × 4 × 8 2048 \times 4 \times 8 2048×4×8

作者尝试使用在每层后面接Batch Normalization,但是观察到更低的准确度。为什么?
输入图像和Manhattan线特征图各自使用一个encoder,性能没有改进。


2D layoutdecoder:
由2个分支组成,上分支预测边界概率图( m E \boldsymbol{m}_{\boldsymbol{E}} mE),下分支预测墙角概率图 m C \boldsymbol{m}_{\boldsymbol{C}} mC,2个分支结构上一样,一共7层卷积,卷积size 3 × 3 3 \times 3 3×3先最近邻上采样再卷积,推测每层特征尺寸:
cov8: 1024 × 8 × 16 1024 \times 8 \times 16 1024×8×16
cov9: 512 × 16 × 32 512 \times 16 \times 32 512×16×32

cov14: 16 × 512 × 1024 16 \times 512 \times 1024 16×512×1024
输出 m E \boldsymbol{m}_{\boldsymbol{E}} mE:Sigmoid-> 3 × 512 × 1024 3 \times 512 \times 1024 3×512×1024
输出 m C \boldsymbol{m}_{\boldsymbol{C}} mC:Sigmoid-> 1 × 512 × 1024 1 \times 512 \times 1024 1×512×1024
m E \boldsymbol{m}_{\boldsymbol{E}} mE是3通道,分别是wall-wall,ceiling- wall,wall-floor 边界的概率,看做(3+1)分类器。
m C \boldsymbol{m}_{\boldsymbol{C}} mC是1通道,表示墙角概率,看做(1+1)分类器。
借鉴U-Net的跳跃结构,防止在上采样时发生偏移。使用了全卷积替代上采样+卷积结构,发现棋盘效应(checker- board artifacts)

棋盘效应主要原因是反卷积核大小(输出窗口的大小)不能被步长(顶层点之间的空间)整除时发生:
在这里插入图片描述
解决方法1:确保反卷积核的大小可以被步长整除,从而避免重叠问题。但是,尽管这种方法有效,但反卷积仍然容易产生棋盘效应。
解决方法2:先进行上采(最近邻插值或双线性插值)样再卷积。


3D layout regressor:
在这里插入图片描述
输出了 m E \boldsymbol{m}_{\boldsymbol{E}} mE m C \boldsymbol{m}_{\boldsymbol{C}} mC,但是要和真实的布局进行比较然后得出Loss,才能训练。使用提出3D布局参数: d = { s w , s l , s h , t x , t z , r θ } d=\left\{s_{w}, s_{l}, s_{h}, t_{x}, t_{z}, r_{\theta}\right\} d={sw,sl,sh,tx,tz,rθ},分布表示布局的长宽高,位移和旋转。虽然直接使用 m E \boldsymbol{m}_{\boldsymbol{E}} mE m C \boldsymbol{m}_{\boldsymbol{C}} mC在几何数学上可以装换为3D布局参数,但是难以反向传播(学习)。

所以是再训练了一个3D layout regressor。将 m E \boldsymbol{m}_{\boldsymbol{E}} mE m C \boldsymbol{m}_{\boldsymbol{C}} mC作为输入,输出 d = { s w , s l , s h , t x , t z , r θ } d=\left\{s_{w}, s_{l}, s_{h}, t_{x}, t_{z}, r_{\theta}\right\} d={sw,sl,sh,tx,tz,rθ},细节为: 7 layers of convolution | kernel size 3 × 3 | ReLU |max pooling layer(factor of 2)|4 FC layer: 1024, 256, 64, 6。

作者也尝试直接使用3D regressor,但是效果不好。原因是在2D上微小的偏移会照成在3D形状发生巨大变化,使得网络难以训练。

这个回归只能对矩形房间使用,使用在预测更复杂的布局时,比如L形,是没有再使用3D layout regressor。


Loss function:

L ( m E , m C , d ) = − α 1 n ∑ p ∈ m E ( p ^ log ⁡ p + ( 1 − p ^ ) log ⁡ ( 1 − p ) ) − β 1 n ∑ q ∈ m C ( q ^ log ⁡ q + ( 1 − q ^ ) log ⁡ ( 1 − q ) ) + τ ∥ d − d ^ ∥ 2 \begin{aligned} L\left(\boldsymbol{m}_{\boldsymbol{E}}, \boldsymbol{m}_{\boldsymbol{C}}, \boldsymbol{d}\right) &=-\alpha \frac{1}{n} \sum_{p \in \boldsymbol{m}_{\boldsymbol{E}}}(\hat{p} \log p+(1-\hat{p}) \log (1-p)) \\ &-\beta \frac{1}{n} \sum_{q \in \boldsymbol{m}_{C}}(\hat{q} \log q+(1-\hat{q}) \log (1-q)) \\ &+\tau\|\boldsymbol{d}-\hat{\boldsymbol{d}}\|_{2} \end{aligned} L(mE,mC,d)=αn1pmE(p^logp+(1p^)log(1p))βn1qmC(q^logq+(1q^)log(1q))+τdd^2

其中 α = β = 1  and  τ = 0.01 \alpha=\beta=1 \text { and } \tau=0.01 α=β=1 and τ=0.01
作者描述为:

binary cross entropy error of the predicted pixel probability in m E \boldsymbol{m}_{\boldsymbol{E}} mE and m C \boldsymbol{m}_{\boldsymbol{C}} mC compared to ground truth.

对于 m C \boldsymbol{m}_{\boldsymbol{C}} mC可以理解为2分类交叉熵。但是 m E \boldsymbol{m}_{\boldsymbol{E}} mE前面不是说3通道吗,猜测是使用3个2分类交叉熵吧。

能不能使用softmax,做4分类?

再加上3D layout regressor得到的参数d与真实d欧拉距离之和。RoomNet使用L2Loss处理墙角,测试结果在后面。

Training details

随机初始化参数进行联合训练是难以收敛的,于是单独训练边界预测分支和墙角分支,3D layout regressor输入的是真实 m E \boldsymbol{m}_{\boldsymbol{E}} mE m C \boldsymbol{m}_{\boldsymbol{C}} mC。各种训练一定程度后再进行联合训练。

由于边界是一条线,墙角是一个点。所以微小的误差带来损失是比较大的。主要体现在 m E \boldsymbol{m}_{\boldsymbol{E}} mE m C \boldsymbol{m}_{\boldsymbol{C}} mC的损失是交叉熵,而不是regression。所以对真实的 m E \boldsymbol{m}_{\boldsymbol{E}} mE m C \boldsymbol{m}_{\boldsymbol{C}} mC进行了Gaussian滤波。

3D layout optimization

这个是后处理,不参与训练

对于输出的 m C \boldsymbol{m}_{\boldsymbol{C}} mC。先对每列求和,在间隔才必须超过20pixel情况下,选择最大的几列(类似求聚类中心)。在选择后的列中找2个峰值,作为天花板和地板的墙角点。直接这样做找出的墙角点可能不满足Manhattan约束。需要进行优化:


有几个假设:

  • 靠近地板的墙角位于同一平面
  • 靠近天花板的墙角直接位于地板的墙角上方
  • 墙互相垂直

标记了墙与墙交界位置(墙角点所在列),采用Floor-Plan Reconstruction from Panoramic Images里的方法来求布局,布局用 L v = { v 1 = ( 0 , 0 ) , v 2 = ( x 1 , y 1 ) , … , v N = ( x N , y N ) } \boldsymbol{L}_{\boldsymbol{v}}=\left\{\boldsymbol{v}_{\boldsymbol{1}}=(0,0), \boldsymbol{v}_{\boldsymbol{2}}=\left(x_{1}, y_{1}\right), \ldots, \boldsymbol{v}_{\boldsymbol{N}}=\left(x_{N}, y_{N}\right)\right\} Lv={v1=(0,0),v2=(x1,y1),,vN=(xN,yN)}向量描述,表示自顶向下地板俯视图坐标系的各个墙角点位置
在这里插入图片描述
拿矩形布局来说,需要确定4个墙角坐标和相机坐标,一共10个参数。在给定一下预定义条件:

  • v 1 = ( 0 , 0 ) \boldsymbol{v}_{\mathbf{1}}=(0,0) v1=(0,0),消除位移不确定,边是连接在一起的,约束力起始点,剩余的点也添加了约束
  • ∣ v 1 − v 2 ∣ = 1 \left|\boldsymbol{v}_{\mathbf{1}}-\boldsymbol{v}_{\boldsymbol{2}}\right|=1 v1v2=1,消除尺度不确定性,在不给的尺度情况下,各个坐标都是相对位置
  • Manhattan约束,即边和边是互相垂直的

这些上面条件约束下,自由参数从10变为3,也就是说求解这样一个问题只需要3个墙角值就可以恢复布局,具体做法是:
E ( L v , v c ) = min ⁡ v c , L v ∑ ( i , j ) ∈ L v ∣ β ( v i , v j ) − α ( v i , v j ) ∣ E\left(\boldsymbol{L}_{\boldsymbol{v}}, \boldsymbol{v}_{\boldsymbol{c}}\right)=\min _{\boldsymbol{v}_{\boldsymbol{c}}, \boldsymbol{L}_{\boldsymbol{v}}} \sum_{(i, j) \in \boldsymbol{L}_{v}}\left|\beta\left(\boldsymbol{v}_{\boldsymbol{i}}, \boldsymbol{v}_{\boldsymbol{j}}\right)-\alpha\left(\boldsymbol{v}_{\boldsymbol{i}}, \boldsymbol{v}_{\boldsymbol{j}}\right)\right| E(Lv,vc)=vc,Lvmin(i,j)Lvβ(vi,vj)α(vi,vj)

β i j = arccos ⁡ v i − v c ⋅ v j − v c ∥ v i − v c ∥ ∥ v j − v c ∥ \beta_{i j}= \arccos \frac{\boldsymbol{v}_{\boldsymbol{i}}-\boldsymbol{v}_{\boldsymbol{c}} \cdot \boldsymbol{v}_{\boldsymbol{j}}-\boldsymbol{v}_{\boldsymbol{c}}}{\left\|\boldsymbol{v}_{\boldsymbol{i}}-\boldsymbol{v}_{\boldsymbol{c}}\right\|\left\|\boldsymbol{v}_{\boldsymbol{j}}-\boldsymbol{v}_{\boldsymbol{c}}\right\|} βij=arccosvivcvjvcvivcvjvc
其中 v c = { x c , y c } \boldsymbol{v}_{\boldsymbol{c}}=\left\{x_{c}, y_{c}\right\} vc={xc,yc}是相机位置, α ( v i , v j ) \alpha\left(\boldsymbol{v}_{\boldsymbol{i}}, \boldsymbol{v}_{\boldsymbol{j}}\right) α(vi,vj)是全景图上水平像素距离/全景图宽 * 360,表示的全景图上直接观察到的墙的FOV,而 β ( v i , v j ) \beta\left(\boldsymbol{v}_{i}, \boldsymbol{v}_{\boldsymbol{j}}\right) β(vi,vj)表示在俯视平面布局上计算得到的FOV。使用L-BFGS求解该最优化问题,优化目标就是 L v \boldsymbol{L}_{\boldsymbol{v}} Lv

这样下来,从 m C \boldsymbol{m}_{\boldsymbol{C}} mC得到了符合Manhattan约束的布局。

其实 m C \boldsymbol{m}_{\boldsymbol{C}} mC可以得到具体的墙角,能不能直接使用墙角点恢复布局,再使用Manhattan约束进行校正?


但是只考虑了墙角点,没考虑到边界输出 m E \boldsymbol{m}_{\boldsymbol{E}} mE。需要通过迭代微调每个墙的位置来使得布局既符合 m C \boldsymbol{m}_{\boldsymbol{C}} mC也符合 m E \boldsymbol{m}_{\boldsymbol{E}} mE。所以有下面评分函数表示当前布局:
S core ⁡ ( L ) = w j u n c ∑ l c ∈ C log ⁡ P corner  ( l c ) + w ceil ∑ l e ∈ L e max ⁡ log ⁡ P ceil  ( l e ) + w floor ∑ l f ∈ L f max ⁡ log ⁡ P floor  ( l f ) \begin{aligned} S \operatorname{core}(L) &=w_{j u n c} \sum_{l_{c} \in C} \log P_{\text {corner }}\left(l_{c}\right) \\ &+w_{\text {ceil}} \sum_{l_{e} \in L_{e}} \max \log P_{\text {ceil }}\left(l_{e}\right) \\ &+w_{\text {floor}} \sum_{l_{f} \in L_{f}} \max \log P_{\text {floor }}\left(l_{f}\right) \end{aligned} Score(L)=wjunclcClogPcorner (lc)+wceilleLemaxlogPceil (le)+wfloorlfLfmaxlogPfloor (lf)
L是一个布局,C表示L的墙角的在 m C \boldsymbol{m}_{\boldsymbol{C}} mC的位置,
L e L_{e} Le表示通过L的墙角连接得到上边界(wall-ceiling boundaries),同理有下边界 L f L_{f} Lf,相机高度固定,房间高度通过上墙角点可以得出平均高度。 P corner  P_{\text {corner }} Pcorner  P ceil  P_{\text {ceil }} Pceil  P floor  P_{\text {floor }} Pfloor 表示各个概率在 m E \boldsymbol{m}_{\boldsymbol{E}} mE m C \boldsymbol{m}_{\boldsymbol{C}} mC中。墙和墙的边界得分不需要,因为墙角点包含了改信息。

迭代调整墙的过程如下:
在这里插入图片描述
大致描述为移动墙i(其他墙也会一起移动)和天花板底部位置j,得到多个布局 L i j L_{i j} Lij,选择得分最高的,如果大于最好布局 L b e s t L_{b e s t} Lbest,则更新 L b e s t L_{b e s t} Lbest,并且更新 L b e s t L_{b e s t} Lbest里的墙位置。

Experiments

评估标准:
3D IoU:和真实布局的交集/并集
Corner Error:预测角与底真角之间的平均欧式距离(通过图像对角线长度标准化)
Pixel Error:预测的面类别和地面真实的面类别之间的像素误差
在这里插入图片描述

在这里插入图片描述
损失使用交叉熵相比L2具有更好的性能。3D regressor改进效果比较小。

在PanoContext上对比表现:
在这里插入图片描述
在Stanford 2D-3D(布局更复杂,更多遮挡)上对比表现:
在这里插入图片描述

Conclusion

LayoutNet不像以往工作对全景图切分成透视图预测,而是直接在全景图上进行布局预测,为后续工作提供了参考。在预处理部分使用消失点和Manhattan约束进行校正全景图,可以很大程度改进准确度。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值