阅读报告——OctAttention
OctAttention: Octree-based Large-scale Contexts Model for Point Cloud Compression[1]
Intro
本文Idea
首先用八叉树表示点云,以减少空间冗余,这对于具有不同分辨率的点云是鲁棒的。
然后设计大感受野的条件熵模型,对兄弟和祖先上下文进行建模,以利用相邻节点之间的强依赖性,并采用注意机制来强调上下文中的相关节点。
Intro上值得注意的信息
点云数据有处理的算法——大致分为:voxel-based, image-based and tree-based的算法。
对于voxel-based methods:利用了体素表示所保留的低级几何特征。
几篇值得注意的文献:
-
voxel-based Point Cloud Compression
- Learning-Based Lossless Compression of 3D Point Cloud Geometry.
- Multiscale deep context modeling for lossless point cloud geometry compression
- Learning Convolutional Transforms for Lossy Point Cloud Geometry Compression
-
Tree-based Point Cloud Compression
- Layer-Wise Geometry Aggregation Framework for Lossless LiDAR Point Cloud Compression
- OctSqueeze: Octree-Structured Entropy Model for LiDAR Compression.
- VoxelContext-Net: An Octree based Framework for Point Cloud Compression.
Contribution:
我们提出了一种树结构的注意机制来模拟大规模上下文中节点的依赖性,该机制通过扩展上下文的感受域和利用兄弟节点及其祖先的特征来实现。
我们使用掩码操作来并行编码八叉树,以缓解在大规模上下文中引入兄弟的缺点。
我们针对激光雷达和目标点云的点云几何压缩通用模型在多个大型数据集上实现了最先进的性能。
八叉树
理论上,八叉树模型是可以获得任意精度的。它是一种对原始点云的有效果的逼近,它像是对原始点云数据的一种在空间上的逼近。我们假设所有点云上的点在一个比较大的正方体上(Level 0)。而对这个正方体,我们还能够再划分(Level 1),再划分(Level 2),以此划分下去(注意,一个较大的立方体划分为8个小的立方体)。
紧接着,我们可以将这些所有划分到不同level的小块用一个八叉树链接起来。
在叶子节点上,一个8-bits的占用代码表示8个立方体,立方体的边长等于量子化步长(the quantization step, q s qs qs)。P中的点与最近的对应立方体对齐并合并。点云通过逆量化重建:
P ^ = P Q ∗ q s + offset \hat{P}=P_{Q} * \mathrm{qs}+\text { offset } P^=PQ∗qs+ offset
误差:
e = max i ∥ P ^ i − P i ∥ ∞ ≤ q s 2 e=\max _{i}\left\|\hat{P}_{i}-P_{i}\right\|_{\infty} \leq \frac{\mathrm{qs}}{2} e=imax∥∥∥P^i−Pi∥∥∥∞≤2qs
很明显,我们可以通过无限缩小 q s \mathrm{qs} qs以达到无限逼近的目的。
上下文模型
根据香农定理,它的比特率的下限是它的信息熵。因此,我们需要准确地预测分布(因为所估计的概率越接近,则实际比特率 E x ∼ P [ − log 2 Q ( x ) ] \mathbb{E}_{\mathbf{x} \sim P}\left[-\log _{2} Q(\mathbf{x})\right] Ex∼P[−log2Q(x)]越接近 E x ∼ P [ − log 2 P ( x ) ] \mathbb{E}_{\mathbf{x} \sim P}\left[-\log _{2} P(\mathbf{x})\right] Ex∼P[−log2P(x)])。
所提出的分布函数 Q ( x ) Q(x) Q(x):
Q ( x ) = ∏ i q i ( x i ∣ f i − N + 1 , … , f k , … , f i ; w ) Q(\mathbf{x})=\prod_{i} q_{i}\left(x_{i} \mid \boldsymbol{f}_{i-N+1}, \ldots, \boldsymbol{f}_{k}, \ldots, \boldsymbol{f}_{i} ; \mathbf{w}\right) Q(x)=i∏qi(xi∣fi−N+1,…,fk,…,fi;w)
对 x i x_i xi而言,分布函数是是以 N − 1 N-1 N−1个之前的所提取出的特征作为条件之母(其实就是 N − 1 N-1 N−1个兄弟结点),然后对于每一个 f k f_k fk,都有:
f k = [ h k ( 0 ) , h k ( 1 ) , h k ( 2 ) , … , h k ( K − 1 ) ] f_k=\left[\boldsymbol{h}_{k}^{(0)}, \boldsymbol{h}_{k}^{(1)}, \boldsymbol{h}_{k}^{(2)}, \ldots, \boldsymbol{h}_{k}^{(K-1)}\right] fk=[hk(0),hk(1),hk(2),…,hk(K−1)]
分别是该结点的 K − 1 K-1 K−1个的父结点。
h k = [ S k W 1 , L k W 2 , O k W 3 ] \boldsymbol{h}_{k}=\left[S_{k} W_{1}, L_{k} W_{2}, O_{k} W_{3}\right] hk=[SkW1,LkW2,OkW3]
S
k
S_k
Sk: one-hot coded occupancy,
L
k
L_k
Lk: level index
O
k
O_k
Ok: octant index
W
W
W : respective embedding matrix.
嵌入矩阵:不仅起了单纯嵌入的这个作用,还起标准化的作用。
这里有个技巧:
It should be noted that the depth and octant of
n
i
n_i
ni are already available while decoding
n
i
n_i
ni, yet its
occupancy code xi is unknown, so we pad it with
x
i
−
1
x_{i−1}
xi−1.
Attention机制
Attention 很适合用在大范围的依赖性问题上,所以非常适合用在大范围的上下文中。而点云压缩恰恰好需要大量的上下文信息。
本文的Attention方面架构如下:
这里,所使用的是
K
K
K个head的Attention,并且所使用的是self-Attention,即
Q
Q
Q,
K
K
K,
V
V
V是相等的。
这里的注意力得分定义如下:
a
m
,
n
(
t
)
=
exp
(
MLP
1
(
h
m
(
t
)
)
⋅
MLP
2
T
(
h
n
(
t
)
)
)
∑
k
=
i
−
N
+
1
m
exp
(
MLP
1
(
h
m
(
t
)
)
⋅
MLP
2
T
(
h
k
(
t
)
)
)
a_{m, n}^{(t)}=\frac{\exp \left(\operatorname{MLP}_{1}\left(\boldsymbol{h}_{m}^{(t)}\right) \cdot \operatorname{MLP}_{2}^{\mathrm{T}}\left(\boldsymbol{h}_{n}^{(t)}\right)\right)}{\sum_{k=i-N+1}^{m} \exp \left(\operatorname{MLP}_{1}\left(\boldsymbol{h}_{m}^{(t)}\right) \cdot \operatorname{MLP}_{2}^{\mathrm{T}}\left(\boldsymbol{h}_{k}^{(t)}\right)\right)}
am,n(t)=∑k=i−N+1mexp(MLP1(hm(t))⋅MLP2T(hk(t)))exp(MLP1(hm(t))⋅MLP2T(hn(t)))
其中,
a
m
,
n
(
t
)
a_{m, n}^{(t)}
am,n(t)表示结点
m
m
m和结点
m
m
m的在第
t
t
t个头的注意力权重得分。值得注意的是,这里并非直接用点积,而是用了
e
e
e的指数幂。
最后,最终的权重向量如下:
C
i
(
t
)
=
∑
k
=
i
−
N
+
1
i
a
i
,
k
(
t
)
⋅
MLP
3
(
h
k
(
t
)
)
\boldsymbol{C}_{i}^{(t)}=\sum_{k=i-N+1}^{i} a_{i, k}^{(t)} \cdot \operatorname{MLP}_{3}\left(\boldsymbol{h}_{k}^{(t)}\right)
Ci(t)=k=i−N+1∑iai,k(t)⋅MLP3(hk(t))
最终,所输出的概率如下:
q
i
(
⋅
∣
f
;
w
)
=
softmax
(
MLP
(
MultiHead
(
2
)
(
f
,
i
)
)
)
q_{i}(\cdot \mid \boldsymbol{f} ; \mathbf{w})=\operatorname{softmax}\left(\operatorname{MLP}\left(\text { MultiHead }^{(2)}(\boldsymbol{f}, i)\right)\right)
qi(⋅∣f;w)=softmax(MLP( MultiHead (2)(f,i)))
这里,值得注意的是,
MultiHead
(
2
)
(
f
,
i
)
\text { MultiHead }^{(2)}(f,i)
MultiHead (2)(f,i)的
(
2
)
{}^{(2)}
(2)是因为,原文架构中,是有两个多头注意力layer的。
Learning
ℓ
=
−
∑
i
log
q
i
(
x
i
∣
f
;
w
)
\ell=-\sum_{i} \log q_{i}\left(x_{i} \mid f ; \mathbf{w}\right)
ℓ=−i∑logqi(xi∣f;w)
这一步我还没有一个比较好的感知。先跳过。