https://www.ipb.uni-bonn.de/wp-content/papercite-data/pdf/milioto2019iros.pdf
RangeNet++是一种基于球面投影的点云分割模型,处理步骤如下:
(A)球面投影将输入点云转换为距离图像表示
球面投影推荐阅读(u,v与本文的相反):https://blog.csdn.net/weixin_43199584/article/details/105260463
先将每个点 p i = ( x , y , z ) p_i=(x,y,z) pi=(x,y,z)映射到球坐标,最后再到图像坐标,定义如下(注意 ∣ f d o w m ∣ |\mathrm{f}_{\mathrm{dowm}}| ∣fdowm∣,原论文 f u p \mathrm{f}_{\mathrm{up}} fup有误):
(
u
v
)
=
(
1
2
[
1
−
arctan
(
y
,
x
)
π
−
1
]
w
[
1
−
(
arcsin
(
z
r
−
1
)
+
∣
f
d
o
w
m
∣
)
f
−
1
]
h
)
\left(
其中 ( u , v ) (u,v) (u,v)为图像坐标, ( h , w ) (h,w) (h,w)为所期望的距离图像的高度和宽度。 f = f u p + f d o w n \mathrm{f}=\mathrm{f}_{up}+\mathrm{f}_{down} f=fup+fdown是传感器的垂直视场(field-of-view), r = ∣ ∣ p i ∣ ∣ 2 r=||p_i||_2 r=∣∣pi∣∣2为每个点的距离。
这个过程产生了一个以 ( u , v ) (u, v) (u,v)为索引的距离图像,距离图像每个像素( ( u , v ) (u,v) (u,v))可能对应多个点坐标( x , y , z x,y,z x,y,z),深度(depth) r r r和反射强度remission,取其中最小的 r r r及其对应的 x , y , z x,y,z x,y,z和remission。最终创建一个 [ 5 × h × w ] [5 × h × w] [5×h×w]的张量。
所有3D点和 ( u , v ) (u,v) (u,v)之间的映射表将被保存起来,用于后面的(C )和(D)。
(B)二维全卷积语义分割
只对图像的Width(水平方向)进行上采样和下采样。损失函数为:
f c f_c fc为各个类别的频率。频率越大,权重越小。
(C)用距离图像重建点云
为了推断出语义云表示中所有的原始点,我们使用在(A)中保存的3D点和 ( u , v ) (u,v) (u,v)之间的映射表得到其对应的分割标签。
(D)点云后处理
将标签重投影到原始点云中,对应同一个距离图像的像素的两个或多个点可能被赋予相同的语义标签。这将导致重投影问题,如图:
距离图像(左)中的栅栏和汽车都被赋予了合适的语义标签,但将语义重投影到原始点(右)时,标签也被投影形成“阴影”(图中橙色虚线)。
为了解决重投影导致的问题,RangeNet++使用了一种快速的、支持GPU的k近邻(kNN)搜索,它根据预测标签和距离图像来代替(C)对点云进行后处理分割。
在 [ H , W ] [H,W] [H,W]的距离图像上,分别以每个2D像素( H W HW HW个)作为窗口中心,用一个大小为 [ S , S ] [S,S] [S,S] 的窗口取出其邻近像素并以列的形式存储。这将得到一个为 [ S 2 , H W ] [S^2,HW] [S2,HW]的矩阵 N ′ N' N′。
距离图像不能表示所有的点(一个像素对应多个点),因此根据点和 ( u , v ) (u,v) (u,v)之间的映射表将 N ′ N' N′扩展到一个维数为 [ S 2 , N ] [S^2, N] [S2,N]的矩阵 N N N( N ′ N' N′的列被重复提取)。
N N N通过距离图像得到的,所以 N N N的列中心不表示实际点的距离值。因此,我们将矩阵的中心行替换为每个点的实际距离。
这个步骤类似于2-7行,但是它不是获取距离图像邻近像素的距离,而是它们的预测标签。最终得到每个点 [ S 2 , N ] [S^2, N] [S2,N]的标签矩阵 L L L
计算出每个 S 2 S^2 S2近邻候选点到实际点的距离(近邻像素的距离值减去实际中心点到原点距离,并取绝对值)。得到一个 [ S 2 , N ] [S^2, N] [S2,N]矩阵 D D D。
反高斯核对距离进行加权,离 ( u , v ) (u, v) (u,v)越远, G G G越大, D D D也越大。
为每一列的 S 2 S^2 S2个候选项找到 k k k个最近邻点,得到 S S S邻域中加权距离最小的 k k k个点的索引。
筛选 k k k个近邻点距离小于阈值(cut-off)的点,并根据筛选得到的点标签对各个类别进行投票。该操作生成一个 [ C , N ] [C, N] [C,N]矩阵 L k n n L_{knn} Lknn,其中 C C C是语义类别数,每一列为该点属于各个类的票数。
根据投票结果选择最高票类作为点的语义标签,输出
[
1
,
N
]
[1,N]
[1,N]的向量。
该算法需要设置四个超参数: