论文笔记 Walk in the Cloud: Learning Curves for Point Clouds Shape Analysis
作者:互联网
CurveNet论文笔记
ICCV 2021
1. 介绍
很多之前的工作将目光聚焦在局部结构特征的提取上,忽略了长程点关系,而作者认为点云形状分析的远程点的特征也是有意义的,可以作为局部特征的一种补充。
我们建议通过生成连续的点段序列,也就是可以看成是点连接起来的曲线,来描述一种远程点特征。这个曲线(curve)可以看作是一种在点云上的漫游(walk),所以就有了题目中的walk。
如下图:
Local aggregation:经典的pointnet++那种类型,选择n个采样点(蓝点),每个点和周围k近邻个点构成一个局部结构,然后计算逐点对之间的相对关系,叠加在一起经过MLP和pooling,得到局部的特征。
Non-local aggregation:思想相当于transformer,简单来说,点云中的每个点都要感知到其他所有点的信息,也就是感知全局。比如point transformer就是这种思想,它聚合周围k近邻个点的信息,来重新编码这个点,N个点全部都去聚合自己领域的信息,形成新的编码后的N个点。
Curve aggregation:也是本文介绍的方法,将点云看作是无向图,每个点就是node,每个点和自己的k近邻个点有edge。通过在edge上行走,得到一个点序列(看作是曲线)。可以看到这种形状描述的方法的优势在于,以前要从飞机尾翼处感知到灯要通过不断下采样,局部结构扩大感受野才能实现,而现在在浅层网络中,飞机尾翼就通过curve和灯处的点发生了联系。
如图最右边,一个步数固定的一次漫游(walk)连接固定的点,形成了一种点云上远程点的联系,从而获得长程的特征。
2. 方法
2.1 预定义
点 P = { p } P=\{p\} P={p}和其逐点特征 F = { f } F=\{f\} F={f}
整个点云数据可以看作是一个无向图 G G G
G G G是由结点 F F F(点云点的特征)和边 E E E组成的图,而这个边 E E E是通过点的K近邻算法获得的,也就是图中每个点只有与 K近邻个点有无向边连接。
2.2 局部聚合和curve特征的优劣
局部聚合的公式,一般使用曼哈顿距离:
如上图,将点投射到2维平面上,局部特征聚合的优势在于,A表示相对平面的地方,而C表示边缘的地方,A和C通过点对间曼哈顿距离的堆叠
+MLP+Pooling 得到的g肯定是不一样的(A周围点都差不多远,C周围点要么老远,要么老近,他们的局部结构肯定不同)。但是劣势也出于此,和周围点分布同样相对均匀的B可能就无法通过局部结构分辨。举个例子,A,B处都代表平面,一个是椅子靠背,一个是椅子的座垫,但是他们肯定不是一个类型,但是在这一层是无法区分的,C就相当于椅子的边沿,AB和它很好区分开来。
但是如果通过curve连接长程点,相当于从椅子靠背的点往下,折了一下,再走到了椅子座垫的点,它肯定感知到了他们的连接处,从而感知到虽然两者都是平面,但是不是同一种类型。
曲线 c:
曲线c是由漫步出来的,一共走 l l l步,即这条曲线一共是由个 l l l点组成的曲线 c = { s 1 , . . . , s l ∣ s ∈ F } c = \{{s_1},...,{s_l}|s {\in}F\} c={s1,...,sl∣s∈F}(如图就是一个走了8步的,即8个点练成的曲线),每个点的信息就是点特征。
使用局部特征融合的方法。A,B可能是表示类似的几何信息的(如平面),C在边缘位置,融合到了不同于A,B的特征。所以A,B和C是可以有效区分的,但是A,B就会无法区分(如A表示椅子靠背,B表示椅子座垫,但都是平面)。
局部信息聚合出的特征的思考:作者认为局部信息聚合的特征是有效的,但是也有其受限的地方,所以如果辅之以更丰富的其他类型的特征,能提高之前的网络性能。简单理解就是在之前关注局部特征性能优良的网络上在加上长程点特征,肯定能对网络性能有提升。
2.3 Curve Grouping
曲线的形成,也是方法里最重要的
-
选择曲线起始点:为了获得 n条 curves的起始点集-> R n ∗ ∣ ∣ f ∣ ∣ R^{n*||f||} Rn∗∣∣f∣∣,即n 个有 f 维特征的点组成的点集。
采用的是top-k 选择策略,即通过MLP学习每个点特征 F F F的得分,得分最高的 n个点作为 n个不同的起始点,引出 n个曲线。为了便于梯度回传,得分会乘上 F F F,实现一个self-attention,形成新的点特征。 -
行走的下一个点的选择:我们要有一个方法来学习 π ( ⋅ ) \pi(·) π(⋅)在走的第 i 步的点处的下一步走到何处,即 s i + 1 s_{i+1} si+1。公式为 s i + 1 = π ( s i ) , 1 ≤ i ∈ Z + ≤ l {s_{i+1}={\pi}(s_i),1{\leq}i{\in}Z^{+}{\leq}l} si+1=π(si),1≤i∈Z+≤l
-
行走策略如何确定:
在点
s
s
s处,我们使用一个 状态描述参数
h
s
h_s
hs,它是由特征
s
i
s_i
si和曲线描述符
r
i
r_i
ri(点
s
i
s_i
si的特征和一个曲线描述参数
r
i
r_i
riconcat起来的,所以尺度是2||s||,
r
i
r_i
ri后面介绍)。
α
\alpha
α是通过 MLP学到的当前点的 K近邻个点的得分,通过softmax学到每个点的0-1的得分,再通过argmax选出得分最高的点,这个特征
F
F
F就是下一个连接的点。
但是为了梯度顺利回传,作者使用了和上式(4)相类似的一个公式,具体看原文:
下图是整个行走的概览图:
总结,要从Si确定下一步走哪个点,先找到K个邻近点,每个邻近点的特征是 点本身的特征+curve特征,通过MLP计算每个点的得分 α \alpha α,然后通过softmax算出每个点的概率,概率最大的点(也就是得分最高的)就是下一步要走的点。
- Dynamic momentum
如果简单的把邻近点状态 h s j h_{s^j} hsj简单看作关键点特征 s s s和邻近点特征 s j s^j sj的concat会导致loops,(比如:自循环会让每一次的下一个点还是自己,导致行走卡在这个点,因为它的可能影响很大,但是如果设定KNN时排除key point即可解决,但是其他三种情况还是不能简单解决)。
陷入循环后曲线不能走的很远,相当于还是局部的特征,失去了长程描述信息的丰富性:
解决方法:对当前状态描述采用动态编码,使用
r
i
∈
R
∣
∣
s
∣
∣
r_i {\in}{R^{||s||}}
ri∈R∣∣s∣∣编码第 i 步之前的curve,将简单的当前点状态
s
i
s_i
si替换成曲线状态描述符
r
i
r_i
ri。那么:
我们使用了和动态动量变量(dynamic momentum variant)有关的方法,用上一个点的曲线描述符
r
i
−
1
r_{i-1}
ri−1和当前点特征
s
i
s_i
siconcat,经过MLP和softmax得到动量
β
\beta
β,而当前阶段的
r
i
r_i
ri 则由 动量 的控制下结合上一个点的曲线描述符
r
i
−
1
r_{i-1}
ri−1和当前点
s
i
s_i
si。
- Crossover suppression:交叉抑制
尽管动态动量策略避免了循环,但曲线仍可能遇到交叉。与循环不同,少量的交叉可能意味着有用的模式,不应完全避免。但是,当发生大量交叉时,同一节点将被重复包含,从而影响曲线表示。因此,我们建议通过调查曲线的行进方向来抑制交叉。
先得到一个当前曲线的通用方向 c i ⃗ = s i − r i − 1 \vec{c_i}={s_i}-{r_{i-1}} ci =si−ri−1表示曲线的大致方向,然后计算每个邻近点的参与者方向 q i j ⃗ = s i j − s i \vec{q_i^j}={s^j_i}-{s_i} qij =sij−si。
当知道要走的下一个点是谁时,就可以算出当前曲线的通用方向和参与者方向的夹角
θ
\theta
θ,如图:
如果你的夹角 θ \theta θ太大,就意味着选择这个点作为下一个点可能会是潜在的交叉因素,所以就直接缩小由 α = { M L P ( h s j ∣ s j ∈ N s ) } {\alpha}=\{MLP({h_{s^j}|s^j\in{N_s}})\} α={MLP(hsj∣sj∈Ns)}公式算出来的 a j a^j aj,使它得分降低,减小被选上的可能性。
我们用 [-1,1] 间的余弦来表示两个方向的相同程度(-1表示相反方向,1表示相同方向)。
但是我们又不能把不是直线方向的就pass掉(曲线不可能永远笔直,虽然作者希望可以笔直,这样能走的更远,获得更多远程点特征),所以我们提出一个阈值角度 θ ⃗ \vec{\theta} θ ,超过这个阈值的就抑制。
下图中右边蓝色的箭头就是耐受阈值,低于它的角度 一律设置其角度距离
d
j
=
1
{d^j}=1
dj=1,角度
θ
{\theta}
θ高于阈值的 角度距离就由公式
d
i
2
=
c
o
s
(
θ
+
1
)
{d_i^2}=cos({\theta}+1)
di2=cos(θ+1)来计算,所得的
d
i
2
d_i^2
di2就作为
a
j
a^j
aj的权重,在 [ 0, 1]之间。
如下图,邻近点1明显超过了角度阈值,就直接通过乘上 d i 2 d_i^2 di2抑制它的 a j a^j aj就行了,使其被选上的几率减小。
- 总结
现在我们就获得了一条没有循环,没有交叉,尽可能直的,尽可能使连接到最远处点的一条曲线,这条曲线能很好的联系线上的远程点,获得不错的特征。
2.4 Curve Aggregation and CurveNet
注意:我们获得的这个曲线特征是为了更好的丰富局部特征,所以我们设计网络要将其接入局部特征网络中,使其性能提升。
灰色:网络总体结构图
橙色:曲线特征聚合模块
蓝色:局部点特征聚合模块
绿色:针对分类/分割 任务的后处理模块
其实网络整体是一个CIC模块堆叠,每个CIC模块就是一个残差结构,主要介绍一下CA模块:
首先,你获得了n条curve,每个curve有l点组成,每个点C维特征–>Cnl 的输入,但是你获得这个curve特征后怎么把它利用起来?先说结果,就是将这个特征通过CA模块融合到每个点上。为了丰富这个curve特征的使用,我们要选一个曲线间的特征关系,和每条曲线内点的特征关系。通过Attentive Pooling来池化融合,曲线间的关系就在n那个维度上融合–>Cl ,每条曲线内点的特征关系就在 l 那个维度上融合 -->Cn。两个层面的特征都经过MLP将维度缩小到原来的一般Cmidl 和Cmidn。输入点特征F:CN (N个C维点),也经过MLP降维–>CmidN。然后之前的两个curve特征通过转置后做矩阵乘法 lCmid 和 nCmid 和CmidN相乘–>lN和nN。
两个curve特征再经过MLP,变换后维度不变, Cmidl 和Cmidn,在成上前面得到的lN和nN–>CmidN和CmidN,维度相同,所以两者concat–>2CmidN–MLP–>CN维。
可以看到CN维的输入点,输出还是C*N维,切融合了curve特征。
3. 结论
原文翻译:
在本文中,我们提出了一种用于点云形状分析的远程特征聚合方法,称为曲线聚合。我们首先讨论了现有局部特征聚合范式的潜在缺陷,并声称需要聚合点云几何体。然后,我们将我们的方法分为两个连续步骤:在点云中对曲线进行分组的规则,以及将分组后的曲线特征与提取的点特征进行集成。在此过程中,确定并解决了潜在的问题。我们的方法在多点云对象分析任务中取得了最先进的结果。
标签:Clouds,Point,特征,局部,曲线,curve,si,Curves,MLP 来源: https://blog.csdn.net/qq_44643484/article/details/123590398