HorizonNet: Learning Room Layout with 1D Representation and Pano Stretch Data Augmentation(CVPR 2019)

pdf下载 项目地址
把房间布局编码成为3个1维向量:在全景图的每一列,地板和墙的边界、天花板和墙的边界,墙和墙的边界。提出恢复结构的后处理方法速度很快,还提出Pano Stretch数据增强。

论文笔记:HorizonNet(CVPR 2019)

Contributions

  • 引入了一个1维 O ( W ) \mathcal{O}(W) O(W)表示法,用于编码整个房间布局。使用这样的表示法进行训练,使我们的方法比以前的最先进的结果更好,同时需要更少的参数和更少的计算时间。
  • Pano Stretch数据增强,可以在训练时快速生成全景图。
  • 利用RNN有助于提高精度。RNN能够捕捉房间布局的长程(记忆性)几何图形。
  • 由于模型的1维表示和高效的后处理过程,使得模型的计算成本非常低,并且可以很容易地处理非长方体或l形布局的复杂场景。

Related Work

和Room layout estimation from a single-view RGB image相关工作。
许多方法利用曼哈顿世界假设来约束房间布局。这个假设也可以用来垂直矫正。

  • 早期:
    dynamic Bayesian network、Orientation Map (OM)、Geometric Context (GC)。
    联合3D对象,如利用床进行推理。
  • 中期:
    提出使用全景,约束图、甚至多张全景图(类似SFM?),估计房间布局。
  • 近期:
    使用NN进行房间布局估计,大多数使用密集预测方法,类似做语义分割。
    直接从全景图估计墙角和边界的概率图。
    在透视图中训练,应用在全景图中。
    DuLa-Net在上面提到,CFL 提出在全景图上适用的卷积核。

本文的主要思想是对布局的表示方法,不像已有的方法密集的去表示房间布局,而是使用3个1维向量表示,对于每列只需3个值表示。所以输出尺寸也从 O ( H W ) \mathcal{O}(H W) O(HW)变为 O ( W ) \mathcal{O}(W) O(W)。此外,利用RNN的记忆性,可以更好表示布局的连续性。

Approach

对输入图片进行垂直校正预处理。

HorizonNet

论文笔记:HorizonNet(CVPR 2019)
输入: 3 × 512 × 1024 3 \times 512 \times 1024 3×512×1024 全景图
网络结构:ResNet-50特征提取器 + 双向LSTM

1D Layout Representation:
论文笔记:HorizonNet(CVPR 2019)
输出: 3 × 1 × 1024 3 \times 1 \times 1024 3×1×1024
y c y_{c} yc:天花板-墙边界位置,值归一化到 [ − π / 2 , π / 2 ] [-\pi / 2, \pi / 2] [π/2,π/2]
y f y_{f} yf:地板-墙边界位置, 值归一化到 [ − π / 2 , π / 2 ] [-\pi / 2, \pi / 2] [π/2,π/2]
y w y_{w} yw:墙角存在的可能性,注意: y w ( i ) = c d x y_{w}(i)=c^{d x} yw(i)=cdx,其中 c = 0.96 c = 0.96 c=0.96 d x dx dx表示到最近墙角的距离。

在以往密集预测中,不是边界和墙角的背景值达到95%。使用这种表示法将不存在背景值, y f y_{f} yf y c y_{c} yc简化为位置回归值。对于墙角的预测,墙角比值从 2 N 512 ⋅ 1024 \frac{2 N}{512 \cdot 1024} 51210242N 变为 N 1024 \frac{N}{1024} 1024N,比值的提高意味着非墙角影响更小。

Feature Extractor:
论文笔记:HorizonNet(CVPR 2019)
为了捕获浅层和深层的特征,在ResNet-50的每个block中包含3个卷积层,输出特征金字塔。具体过程:卷积核高度分别为4,2,2,宽度都为1,通道数每次是原来的一半(factor of 2)。3个卷积核size和stride都为: 4 × 1 × , 2 × 1 , 2 × 1 4 \times 1 \times ,2 \times 1,2 \times 1 4×1×,2×1,2×1。所以最终经过这3个卷积,通达数 / 8 ( = 2 × 2 × 2 ) /8(=2 \times 2 \times 2) /8(=2×2×2)高度 / 16 ( = 4 × 2 × 2 ) /16(=4 \times 2 \times 2) /16(=4×2×2)。经过upsampled使其宽度为256,reshaped使其高度为256,通道数都为1。最后连接4个feature map使其size为 1024 × 1 × 256 1024 \times 1 \times 256 1024×1×256。作者尝试了 ResNet-101,没有改进。

Recurrent Neural Network for Capturing Global Information:
论文笔记:HorizonNet(CVPR 2019)
从几何学上讲,一个房间的任何一个角落都可以从其他角落的位置大致推断出来,所以使用RNN去捕获全局信息和长期依赖关系。存储其他区域的信息在LSTM的细胞状态中。RNN一列一列地预测 y c ′ , y f ′ , y w ′ y_{c}^{\prime}, y_{f}^{\prime}, y_{w}^{\prime} yc,yf,yw,即RNN的序列长度与图像宽度成正比。本文方法,RNN预测的是4列,而不是每个时间步长1列,不影响精度情况下更少的计算时间。因为全景图左右两边是连续的,所以使用双向LSTM

Post-processing

几个假设:

  • 墙互相垂直(曼哈顿世界假设)
  • 房间布局都是天花板-墙-地板,并且天花板和地板平行
  • 相机高度1.6m
  • 预处理进行了垂直校正

Recovering the Floor and Ceiling Planes:
把floor-wall边界,即 y f ′ y_{f}^{\prime} yf投影到球面坐标,每个点具有相同的 y y y。注:在假设相机高度为1.6m情况下,可以取得以相机为中心的实际预测值。
将ceiling-wall边界,即 y c ′ y_{c}^{\prime} yc也投影到球面坐标,由于不知道房间高度,得到是一个相对值,但是同一列的 x , z x,z x,z y f ′ y_{f}^{\prime} yf y c ′ y_{c}^{\prime} yc应该一样。通过调节 x , z x,z x,z,可以得到对应 y c ′ y_{c}^{\prime} yc的实际 y y y值。由此得到天花板和底部的距离,取平均即得到房间高度。
Recovering Wall Planes:
论文笔记:HorizonNet(CVPR 2019)
墙角(prominent peak)条件:

  • 在5度的FOV范围内, y w ′ y_{w}^{\prime} yw最大
  • y w ′ y_{w}^{\prime} yw > 0.05

上图 y c ′ y_{c}^{\prime} yc是红线,prominent peak将其分为多个部分。对每个部分进行PCA得到该部分的主要方向向量。每个部分的方向角度取平均,对整个平面图进行旋转。总之,墙要和XZ轴对齐,相邻墙是垂直的, 最后是选择墙。
论文笔记:HorizonNet(CVPR 2019)
这两种情况添加一个墙角而不是选择墙。

Pano Stretch Data Augmentation

论文笔记:HorizonNet(CVPR 2019)
图片的 ( u , v ) (u, v) (u,v)坐标, u ∈ [ − π , π ] , v ∈ [ − π / 2 , π / 2 ] u \in[-\pi, \pi], v \in[-\pi / 2, \pi / 2] u[π,π],v[π/2,π/2],也就是经纬度坐标。
3维空间坐标 x , y , z x, y, z x,y,z,分别乘 k x , k y , k z k_{x}, k_{y}, k_{z} kx,ky,kz得到 x ′ , y ′ , z ′ x^{\prime}, y^{\prime}, z^{\prime} x,y,z
{ x ′ = k x ⋅ x = k x ⋅ d ⋅ cos ⁡ ( v ) ⋅ cos ⁡ ( u ) y ′ = k y ⋅ y = k y ⋅ d ⋅ sin ⁡ ( v ) z ′ = k z ⋅ z = k z ⋅ d ⋅ cos ⁡ ( v ) ⋅ sin ⁡ ( u ) \left\{\begin{array}{l} x^{\prime}=k_{x} \cdot x=k_{x} \cdot d \cdot \cos (v) \cdot \cos (u) \\ y^{\prime}=k_{y} \cdot y=k_{y} \cdot d \cdot \sin (v) \\ z^{\prime}=k_{z} \cdot z=k_{z} \cdot d \cdot \cos (v) \cdot \sin (u) \end{array}\right. x=kxx=kxdcos(v)cos(u)y=kyy=kydsin(v)z=kzz=kzdcos(v)sin(u)
其中, d d d表示球的半径,后面 atan ⁡ 2 \operatorname{atan} 2 atan2运算可以消去。
在对x和z拉伸后,反推到uv坐标。
{ u ′ = atan ⁡ 2 ( k z ⋅ sin ⁡ ( u ) , k x ⋅ cos ⁡ ( u ) ) v ′ = atan ⁡ 2 ( k y ⋅ sin ⁡ ( v ) , k x 2 cos ⁡ 2 ( u ) + k z 2 sin ⁡ 2 ( u ) ⋅ cos ⁡ ( v ) ) \left\{\begin{array}{l} u^{\prime}=\operatorname{atan} 2\left(k_{z} \cdot \sin (u), \quad k_{x} \cdot \cos (u)\right) \\ v^{\prime}=\operatorname{atan} 2\left(k_{y} \cdot \sin (v)\right., \sqrt{k_{x}^{2} \cos ^{2}(u)+k_{z}^{2} \sin ^{2}(u)} \cdot \cos (v)) \end{array}\right. {u=atan2(kzsin(u),kxcos(u))v=atan2(kysin(v),kx2cos2(u)+kz2sin2(u) cos(v))
论文中令 k y = 1 k_{y}=1 ky=1,因为 k y = s k_{y}=s ky=s等同于 k x = s , k z = s k_{x}=s, k_{z}=s kx=s,kz=s
防止前向映射需要遍历全部才能进行插值缺点,本文实现使用反向映射,并且反向映射变换可以容易得到:
{ u = atan ⁡ 2 ( k x ⋅ sin ⁡ ( u ′ ) , k z ⋅ cos ⁡ ( u ′ ) ) v = arctan ⁡ ( k z ⋅ tan ⁡ ( v ′ ) ⋅ csc ⁡ ( u ′ ) ⋅ sin ⁡ ( u ) ) \left\{\begin{array}{l} u=\operatorname{atan} 2\left(k_{x} \cdot \sin \left(u^{\prime}\right), \quad k_{z} \cdot \cos \left(u^{\prime}\right)\right) \\ v=\arctan \left(k_{z} \cdot \tan \left(v^{\prime}\right) \cdot \csc \left(u^{\prime}\right) \cdot \sin (u)\right) \end{array}\right. {u=atan2(kxsin(u),kzcos(u))v=arctan(kztan(v)csc(u)sin(u))

当然,这种数据增强方法也适用其他全景图任务

Experiments

训练细节:
y f y_{f} yf y c y_{c} yc使用L1损失, y w y_{w} yw使用二分类交叉熵损失。标准数据增强(左右翻转,全局水平旋转,亮度改变) + Pano Stretch数据增强。Pano Stretch数据增强 k x , k z k_{x}, k_{z} kx,kz U [ 1 , 2 ] U[1,2] U[1,2],0.5的概率取倒数,时间花费教室130ms,可以在训练时进行增强。

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

测试结果:
论文笔记:HorizonNet(CVPR 2019)

论文笔记:HorizonNet(CVPR 2019)
Ablation Study:

论文笔记:HorizonNet(CVPR 2019)
其中LayoutNet作为dense O ( H W ) \mathcal{O}(H W) O(HW)测试,替换U-Net成本文骨架网络。可以发现Pano Stretch和RNN都能提升准确度。不使用RNN在网络结构上使用全连接。

论文笔记:HorizonNet(CVPR 2019)

这两个预测都是原始的网络输出——没有后处理。在图像中,采用RNN的模型比不采用RNN的模型更好地包含了天花板、FOV较小造成的黑色缺失极坐标区域和遮挡区域。

多墙角的测试结果:
重新标注数据然后微调训练。论文笔记:HorizonNet(CVPR 2019)
论文笔记:HorizonNet(CVPR 2019)

Conclusion

本文提出的1维表示法很好适用于全景图恢复房结构任务,减少了参数好计算量,这种表示法更好的使任务专注于墙线和墙角识别。加上使用RNN和Pano Stretch数据增强,取得不错的结果。

个人测试结果:
使用作者提供resnet50_rnn__st3d.pth权重测试:论文笔记:HorizonNet(CVPR 2019)
论文笔记:HorizonNet(CVPR 2019)

论文笔记:HorizonNet(CVPR 2019)
论文笔记:HorizonNet(CVPR 2019)

论文笔记:HorizonNet(CVPR 2019)
论文笔记:HorizonNet(CVPR 2019)
HorizonNet在全景图中墙线拟合比DuLa-Net要好,但是恢复布局进行垂直时效果不是太好,论文中提到使用PCA提取方向向量然后整体旋转平均角度。在第1、2例测试中发现整体发生误旋转。对于墙角的估计有待提高。

相关文章:

  • 2021-11-01
  • 2022-01-18
  • 2021-11-27
  • 2022-12-23
  • 2021-11-28
  • 2022-12-23
  • 2021-10-05
  • 2021-08-30
猜你喜欢
  • 2021-11-28
  • 2021-05-05
  • 2021-07-01
  • 2021-09-14
  • 2021-08-10
  • 2021-10-02
  • 2021-08-04
相关资源
相似解决方案