原文链接:https://arxiv.org/abs/2303.16094
1. 引言
大的感受野对感知有帮助。但是增大3D卷积的卷积核会带来立方级参数和计算增长。本文通过两个核心设计提出LinK方法:一是考虑到3D体素的稀疏性,使用线性核生成器替换静态核,仅为非空区域提供权重;同时,该权重分层共享,避免某些参数在某些迭代中未被优化。二是在重叠块中使用预先计算的聚合结果,使得计算复杂度与核大小无关(即LinK中可以使用任意大小的核)。LinK与其余方法的比较如下图所示。
3. 方法
3.1 背景
3.1.1 3D稀疏卷积的介绍
常规3D卷积算子可以表达为:
g
p
=
∑
n
∈
N
w
n
⋅
f
p
+
n
g_p=\sum_{n\in\mathbb{N}}w_n\cdot f_{p+n}
gp=n∈N∑wn⋅fp+n其中
p
p
p为卷积中心,
N
\mathbb{N}
N表示指定范围的非空邻域,
f
∗
f_\ast
f∗和
g
∗
g_\ast
g∗为输入和输出特征;
w
n
w_n
wn是与相对位置
n
n
n对应的核。
3D体素通常很稀疏,分配给空体素的核不会参与卷积计算,也就不会通过反向传播更新权重,这减慢了反向传播的速度。并且核的所有权重均需要被存储,需要耗费大量空间。
3.1.2 推拉策略的介绍
卷积的核心功能是引入空间交互,是通过卷积窗口在特征图上的滑动实现的。重叠区域会被重复计算,这会带来冗余。APP-Net提出推拉算子,将空间交互分解为3个步骤:
- 推: γ ( p i → p r o x y ) \gamma(p_i\rightarrow proxy) γ(pi→proxy),将 p i p_i pi的特征推入各簇(cluster)共享的代理(proxy)中;
- 聚合:在代理中融合簇的信息;
- 拉: λ ( p r o x y → p j ) \lambda(proxy\rightarrow p_j) λ(proxy→pj),将每个点 p j p_j pj从辅助代理中拉出特征。
由于同一簇中的点共享聚合代理,APP算子避免了簇内的冗余计算。三个步骤被综合设计,满足如下要求:
γ
(
p
i
→
p
r
o
x
y
)
∘
λ
(
p
r
o
x
y
→
p
j
)
=
η
(
p
i
→
p
j
)
\gamma(p_i\rightarrow proxy)\circ\lambda(proxy\rightarrow p_j)=\eta(p_i\rightarrow p_j)
γ(pi→proxy)∘λ(proxy→pj)=η(pi→pj)其中
∘
\circ
∘是组合
γ
(
∗
)
\gamma(\ast)
γ(∗)和
λ
(
∗
)
\lambda(\ast)
λ(∗)的算子,
η
(
p
i
→
p
j
)
\eta(p_i\rightarrow p_j)
η(pi→pj)是衡量
p
i
p_i
pi和
p
j
p_j
pj关系的函数。根据上式,代理是可简化的。这一设计与点云模态紧密耦合,但其在体素中的运用还未被探索。
3.2 3D线性核
由3.1.1节中所述,存储每个离散位置的核权重缺乏空间高效性,也不利于大型3D核的优化。因此本文使用神经网络模块
w
(
n
)
w(n)
w(n)在线生成核,而非储存静态核权重
w
n
w_n
wn。这使得参数量不会随着核的增大而增加,且空体素不会减慢优化速率。
但是,增大核大小会使得核与特征图之间的计算开销立方级增加,因此本文提出两个关键设计:线性核生成器、基于块的聚合。整个过程如下图所示。
3.2.1 线性核生成器
旨在在重叠区域中找到可重用的公共部分以减小计算开销。
如上图所示,给定
A
=
{
a
,
b
,
c
,
d
,
e
}
,
B
=
{
a
,
b
,
c
,
g
,
h
}
A=\{a,b,c,d,e\},B=\{a,b,c,g,h\}
A={a,b,c,d,e},B={a,b,c,g,h},其中每个元素表示一个体素。重叠区域为
O
=
{
a
,
b
,
c
}
O=\{a,b,c\}
O={a,b,c}。现使用局部偏移量将
A
A
A中的特征聚合到
a
a
a,将
B
B
B中的特征聚合到
b
b
b:
{
f
O
→
a
=
w
(
a
−
a
)
f
a
+
w
(
b
−
a
)
f
b
+
w
(
c
−
a
)
f
c
f
O
→
b
=
w
(
a
−
b
)
f
a
+
w
(
b
−
b
)
f
b
+
w
(
c
−
b
)
f
c
\left\{\begin{matrix} f_{O\rightarrow a}=w(a-a)f_a+w(b-a)f_b+w(c-a)f_c\\ f_{O\rightarrow b}=w(a-b)f_a+w(b-b)f_b+w(c-b)f_c \end{matrix}\right.
{fO→a=w(a−a)fa+w(b−a)fb+w(c−a)fcfO→b=w(a−b)fa+w(b−b)fb+w(c−b)fc如上式所示,由于
O
O
O中的每个元素相对于
a
a
a和
b
b
b有不同的偏移量,故无法重用重叠区域的聚合结果。
考虑到体素的全局坐标是固定的,可将局部偏移量分解为全局坐标的组合。首先定义一个新的核生成器:
k
(
x
)
=
Ψ
(
σ
(
x
)
)
k(x)=\Psi(\sigma(x))
k(x)=Ψ(σ(x))其中
σ
(
x
)
=
W
×
x
\sigma(x)=W\times x
σ(x)=W×x是线性映射函数,
W
∈
R
C
i
n
×
3
W\in \mathbb{R}^{C_{in}\times 3}
W∈RCin×3。
Ψ
(
∗
)
\Psi(\ast)
Ψ(∗)为激活函数。本文受APP-Net启发,使用三角函数作为激活函数,例如:
{
k
(
0
)
(
x
)
=
cos
(
σ
(
x
)
)
,
k
(
1
)
(
x
)
=
sin
(
σ
(
x
)
)
}
\{k^{(0)}(x)=\cos(\sigma(x)),k^{(1)}(x)=\sin(\sigma(x))\}
{k(0)(x)=cos(σ(x)),k(1)(x)=sin(σ(x))}可由和差化积公式得到:
k
(
0
)
(
x
−
y
)
=
cos
(
σ
(
x
)
)
⋅
cos
(
σ
(
y
)
)
+
sin
(
σ
(
x
)
)
sin
(
σ
(
y
)
)
=
k
(
0
)
(
x
)
k
(
1
)
(
y
)
+
k
(
1
)
(
x
)
k
(
0
)
(
y
)
k^{(0)}(x-y)=\cos(\sigma(x))\cdot\cos(\sigma(y))+\sin(\sigma(x))\sin(\sigma(y))=k^{(0)}(x)k^{(1)}(y)+k^{(1)}(x)k^{(0)}(y)
k(0)(x−y)=cos(σ(x))⋅cos(σ(y))+sin(σ(x))sin(σ(y))=k(0)(x)k(1)(y)+k(1)(x)k(0)(y)其中
x
x
x与
y
y
y是全局坐标,
x
−
y
x-y
x−y为局部偏移量。
接着,在重复区域计算下列辅助聚合:
{
f
O
(
0
)
=
k
(
0
)
(
a
)
⋅
f
a
+
k
(
0
)
(
b
)
⋅
f
b
+
k
(
0
)
(
c
)
⋅
f
c
f
O
(
1
)
=
k
(
1
)
(
a
)
⋅
f
a
+
k
(
1
)
(
b
)
⋅
f
b
+
k
(
1
)
(
c
)
⋅
f
c
\left\{\begin{matrix} f_{O}^{(0)}=k^{(0)}(a)\cdot f_a+k^{(0)}(b)\cdot f_b+k^{(0)}(c)\cdot f_c\\ f_{O}^{(1)}=k^{(1)}(a)\cdot f_a+k^{(1)}(b)\cdot f_b+k^{(1)}(c)\cdot f_c \end{matrix}\right.
{fO(0)=k(0)(a)⋅fa+k(0)(b)⋅fb+k(0)(c)⋅fcfO(1)=k(1)(a)⋅fa+k(1)(b)⋅fb+k(1)(c)⋅fc其中
f
O
(
0
)
f_{O}^{(0)}
fO(0)和
f
O
(
1
)
f_{O}^{(1)}
fO(1)在
A
A
A和
B
B
B的计算中可重复使用。为得到重叠区域中以
a
a
a为中心的最终的聚合,如下计算:
f
O
→
a
=
f
O
0
⋅
k
0
(
a
)
+
f
O
1
⋅
k
1
(
a
)
=
∑
p
∈
O
k
(
0
)
(
p
−
a
)
⋅
f
a
+
(
p
−
a
)
f_{O\rightarrow a}=f_O^{0}\cdot k^{0}(a)+f_O^{1}\cdot k^{1}(a)=\sum_{p\in O}k^{(0)}(p-a)\cdot f_{a+(p-a)}
fO→a=fO0⋅k0(a)+fO1⋅k1(a)=p∈O∑k(0)(p−a)⋅fa+(p−a)上式就是卷积算子的一个实例(使用
k
(
0
)
(
∗
)
k^{(0)}(\ast)
k(0)(∗)替换
w
(
∗
)
w(\ast)
w(∗))。该方法被称为线性核生成器,以强调核心部分的线性映射。
3.2.2 基于块的聚合
线性核生成器重复利用重叠区域的计算结果。如何建立重叠区域是新的问题。本文将体素空间分割为不重叠的块。具体来说,对输入点云
P
∈
Z
N
×
3
P\in\mathbb{Z}^{N\times3}
P∈ZN×3,将每个体素
p
p
p的坐标使用块大小
s
s
s来量化,并如下计算哈希编码
l
l
l:
l
=
H
a
s
h
(
⌊
p
(
0
)
s
⌋
,
⌊
p
(
1
)
s
⌋
,
⌊
p
(
2
)
s
⌋
)
l=Hash(\lfloor\frac{p(0)}{s}\rfloor,\lfloor\frac{p(1)}{s}\rfloor,\lfloor\frac{p(2)}{s}\rfloor)
l=Hash(⌊sp(0)⌋,⌊sp(1)⌋,⌊sp(2)⌋)有相同哈希编码的体素会归于同一个块。块的集合记为
B
=
{
B
0
,
B
1
,
⋯
,
B
m
}
B=\{B_0,B_1,\cdots,B_m\}
B={B0,B1,⋯,Bm}。基于3.1.1节倒数第二式,使用
B
i
B_i
Bi替换
O
O
O,可得
{
f
B
i
(
0
)
=
∑
x
∈
B
i
k
(
0
)
(
x
)
⋅
f
x
f
B
i
(
1
)
=
∑
x
∈
B
i
k
(
1
)
(
x
)
⋅
f
x
\left\{\begin{matrix} f_{B_i}^{(0)}=\sum_{x\in B_i}k^{(0)}(x)\cdot f_x\\ f_{B_i}^{(1)}=\sum_{x\in B_i}k^{(1)}(x)\cdot f_x \end{matrix}\right.
{fBi(0)=∑x∈Bik(0)(x)⋅fxfBi(1)=∑x∈Bik(1)(x)⋅fx则
f
B
i
(
0
)
f_{B_i}^{(0)}
fBi(0)与
f
B
i
(
1
)
f_{B_i}^{(1)}
fBi(1)含有
s
3
s^3
s3感受野内的信息。
为增大感受野,为每个块查询
r
3
r^3
r3邻域内块的聚合结果。记块
B
i
B_i
Bi的邻域块集合为
B
i
\mathbb{B}_i
Bi,则扩展块聚合可按下式计算:
{
g
B
i
(
0
)
=
∑
j
∈
B
i
f
B
j
(
0
)
g
B
i
(
1
)
=
∑
j
∈
B
i
f
B
j
(
1
)
\left\{\begin{matrix} g_{\mathbb{B}_i}^{(0)}=\sum_{j\in \mathbb{B}_i}f^{(0)}_{B_j}\\ g_{\mathbb{B}_i}^{(1)}=\sum_{j\in \mathbb{B}_i}f^{(1)}_{B_j} \end{matrix}\right.
{gBi(0)=∑j∈BifBj(0)gBi(1)=∑j∈BifBj(1)其中
g
B
i
(
0
)
g_{\mathbb{B}_i}^{(0)}
gBi(0)和
g
B
i
(
1
)
g_{\mathbb{B}_i}^{(1)}
gBi(1)含有
(
r
×
s
)
3
(r\times s)^3
(r×s)3感受野内的信息。对块
B
i
B_i
Bi内的体素
x
x
x,最终的特征为:
g
x
=
1
N
B
i
[
g
B
i
(
0
)
⋅
k
(
0
)
(
x
)
+
g
B
i
(
1
)
⋅
k
(
1
)
(
x
)
]
g_x=\frac{1}{N_{\mathbb{B}_i}}[g_{\mathbb{B}_i}^{(0)}\cdot k^{(0)}(x)+g_{\mathbb{B}_i}^{(1)}\cdot k^{(1)}(x)]
gx=NBi1[gBi(0)⋅k(0)(x)+gBi(1)⋅k(1)(x)]其中
N
B
i
N_{\mathbb{B}_i}
NBi是非空体素数。则体素
x
x
x以卷积方式聚合了其
(
r
×
s
)
3
(r\times s)^3
(r×s)3邻域内的所有信息。
3.2.3 核生成的增强
可从两个不同角度来增强表达。
激活函数的可学习频率:在原始正余弦激活函数的基础上,引入两个改进,即逐通道可学习的频率参数
α
\alpha
α和项
+
x
+x
+x。改进后的激活函数变为:
Ψ
′
(
x
)
=
Ψ
(
α
⋅
x
)
+
x
\Psi'(x)=\Psi(\alpha \cdot x)+x
Ψ′(x)=Ψ(α⋅x)+x 分组共享权重:大的核范围使得核权重的学习较为困难。可使用分组共享策略,即对有
C
i
n
C_{in}
Cin个通道的输入,生成
C
i
n
#
g
r
o
u
p
s
\frac{C_{in}}{\#groups}
#groupsCin个通道的核,其每
#
g
r
o
u
p
s
\#groups
#groups个通道共享权重。
3.3 网络结构
3.3.1 LinK模块
由于LinK以逐通道的方式聚合空间信息,因此在数据输入到LinK前先通过
1
3
1^3
13卷积,以进行通道混合。同时,附加一个并行的
3
3
3^3
33卷积分支以保留细节结构,该操作也能稳定优化过程。模型结构如下图所示,注意使用了LN替换BN以加强信息通道。
3.3.2 在感知任务中的应用
直接将代表性模型中基于稀疏卷积的主干替换为基于LinK的主干,进行分割与检测的任务,如下图所示。
4. 实验
4.1 3D目标检测
训练时使用了CBGS和GT采样策略解决长尾问题。本文的方法性能排行第1。
4.2 3D语义分割
训练时在交叉熵损失的基础上增加Lovasz损失。集成技术和实例级数据增广对性能提升很有帮助,但本文没有使用。实验表明将其余网络的主干替换为LinK能带来性能提升。
4.3 开销分析
与普通的 7 3 7^3 73卷积相比,本文的方法用更少的计算资源达到了更高的性能。
4.4 消融研究
大核在3D目标检测中的作用:LinK有更大的感受野;大核对大型物体的性能提升更有帮助。大核能加强模型建模不同尺寸物体的能力,使其能用更少的层数更高效地完成。
LinK模块中的分支组合:LinK与
7
3
7^3
73常规卷积核比较。在均有
3
3
3^3
33分支的情况下,两者均能提高性能,且LinK的提升更大。当残差块分支被移除,网络仍有较高的mAcc。
核大小:性能随着核的增大而提高,核达到
2
1
3
21^3
213时性能饱和。
增强核的两个策略:实验表明,可学习频率在小核情况下很有效,分组共享权重在大核情况下更有效。
附录
A. 更多实施细节和结果
A.1 检测
训练过程:前15个epoch使用了CBGS+GT采样,而后5个epoch未使用。这使训练能受益于增广数据集,且避免合成分布的过拟合。
结果:测试时数据增广使用了预定义方向集合的随机翻转和预定义角度集合的随机旋转。
A.2 分割
数据增广:训练时使用随机翻转、缩放和旋转。测试时使用随机数据增广,结果取平均。
B. 层结构细节
3.3.2节的图中,上半图的虚线框内、Down以后的结构如下图所示。
D. 更多消融研究
LinK模块中的微小设计:实验表明无需增大旁支的膨胀率(即感受野);LinK中Norm的类型没有影响。
E. 可视化
E.1 核权重分布
通道分布:可视化表明,分组共享策略能使差异较小的低级通道被显著激活。
空间分布:可视化表明,可学习频率策略能加强核的空间归纳偏好,因为原始核无法区别对称位置。