论文笔记:KD-Net

Escape from Cells: Deep Kd-Networks for the Recognition of 3D Point Cloud Models

1、四个问题

  1. 要解决什么问题?
    • 3D点云识别任务。
  2. 用了什么方法解决?
    • 参考KD树的结构,提出了一种新的树形结构的神经网络,用来处理不规则的点云数据。
  3. 效果如何?
    • 在形状分类任务、形状检索任务以及形状部件分割任务中都取得了领先的效果。
  4. 还存在什么问题?
    • 如果点云存在旋转,那么KD树在X/Y/Z轴方向进行切分时会得到不同的结果,影响最终的效果。
    • 每次网络做前向操作时,都需要先将输入的点云转为KD树,预处理时必须要占用一定时间。

2、论文概述

2.1、简介

  • 我们都知道,由于点云是非欧式结构的数据,无法对其直接应用CNN。常用的思路是将其转换为体素网格,但是这样会带来额外的内存消耗和很大的计算量。
  • 作者认为:诸如KD树、八叉树等数据结构常被用于表示不规则的数据。那么,是否能将这些数据结构扩展到深度神经网络中呢?这样的网络结构也就能够处理那些不规则结构的数据。
  • 由此,作者提出了KD网络,主要是模仿卷积神经网络的思想,但是又使用KD树的结构来构建计算图。

2.2、KD-Networks

论文笔记:KD-Net_第1张图片

  • 图1是KD-Netwoks的示意图。图中只考虑二维的情况。
  • 在一个有8个点的点云上建立KD树,在每一层都从X/Y轴选择一个维度进行划分。
  • 从根节点到叶节点对KD树的每个节点进行编号,根节点编号为0,往后递增。
  • KD数最左边的8到15号节点实际就是原始点云,右边的0号节点可以看做输出的类别预测 v 0 v_0 v0
  • 从左到右,可以看做这个KD-Network的特征前向传播的方向。
  • 图中的圆圈表示的是特征传播并聚合的过程,对应卷积核,其参数是可学习的。相同的颜色表示共享参数,即如果是在相同维度对点集进行划分,认为其卷积参数也应该共享。

2.2.1、输入

  • 由于KD-Network每次都要从3D点云构建KD树,而KD树的节点数是 N = 2 D N=2^{D} N=2D,因此点云的点数也必须是 2 D 2^{D} 2D。如果点云的点数不同,还需要对其做上采样或者下采样。
  • 构建KD树时,我们以自顶向下的方式递归地生成每个树节点。每次都选取能最好地分割整个点集的坐标轴作为划分标准,将点集划分为两个一样大的子集,然后递归生成。
  • 一个深度为 D D D的平衡KD树包含有 N − 1 = 2 D − 1 N-1=2^{D}-1 N1=2D1个非叶节点。
  • 每个非叶节点 V i ∈ T V_{i} \in \mathcal{T} ViT都与三个划分方向 d i d_i di(X/Y/Z轴, d i ∈ { X , Y , Z } d_i \in \{X, Y, Z\} di{X,Y,Z})以及划分位置 t i \mathcal{t}_i ti有关。
  • KD树上的节点还与层数 l i ∈ { 1 , … , D − 1 } l_{i} \in\{1, \ldots, D-1\} li{1,,D1}有关, l i = 1 l_{i}=1 li=1是根节点, l i = D l_{i}=D li=D是叶节点,也对应着3D点云上的点。
  • 假设KD树是平衡树,那么第 i i i号节点的子节点的编号分别是 c 1 ( i ) = 2 i c_{1}(i)=2 i c1(i)=2i c 2 ( i ) = 2 i + 1 c_{2}(i)=2 i + 1 c2(i)=2i+1

2.2.2、KD-Networks的数据处理

  • 给定一个输入的KD树 T \mathcal{T} T,KD-Network会计算KD树的每个节点上的特征向量 v i \mathbf{v}_i vi
  • 叶节点即输入是一个 k k k维向量,由输入点云的维度确定。
  • l ( i ) l(i) l(i)层上的非叶节点 i i i,其子节点 c 1 ( i ) c_1(i) c1(i) c 2 ( i ) c_2(i) c2(i)在第 l ( i ) + 1 l(i) + 1 l(i)+1层,其特征向量 v c 1 ( i ) \mathbf{v}_{c_{1}(i)} vc1(i) v c 1 ( i ) \mathbf{v}_{c_{1}(i)} vc1(i)已经计算好了。那么当前节点 i i i的特征向量 v i \mathbf{v}_i vi的计算公式如下:
    • v i = { ϕ ( W x l i [ v c 1 ( i ) ; v c 2 ( i ) ] + b x l i ) , i f   d i = x ϕ ( W y l i [ v c 1 ( i ) ; v c 2 ( i ) ] + b y l i ) , i f   d i = y ϕ ( W z l i [ v c 1 ( i ) ; v c 2 ( i ) ] + b z l i ) , i f   d i = z \mathbf{v}_{i}=\left\{\begin{array}{l}{\phi\left(W_{\mathrm{x}}^{l_{i}}\left[\mathbf{v}_{c_{1}(i)} ; \mathbf{v}_{c_{2}(i)}\right]+\mathbf{b}_{\mathrm{x}}^{l_{i}}\right)}, if \ d_i = x \\ {\phi\left(W_{\mathrm{y}}^{l_{i}}\left[\mathbf{v}_{c_{1}(i)} ; \mathbf{v}_{c_{2}(i)}\right]+\mathbf{b}_{\mathrm{y}}^{l_{i}}\right)}, if \ d_i = y \\ {\phi\left(W_{\mathrm{z}}^{l_{i}}\left[\mathbf{v}_{c_{1}(i)} ; \mathbf{v}_{c_{2}(i)}\right]+\mathbf{b}_{z}^{l_{i}}\right)}, if \ d_i = z \end{array}\right. vi=ϕ(Wxli[vc1(i);vc2(i)]+bxli),if di=xϕ(Wyli[vc1(i);vc2(i)]+byli),if di=yϕ(Wzli[vc1(i);vc2(i)]+bzli),if di=z
    • 或简写为: v i = ϕ ( W d i l i [ v c 1 ( i ) ; v c 2 ( i ) ] + b d i l i ) \mathbf{v}_{i}=\phi\left(W_{d_{i}}^{l_{i}}\left[\mathbf{v}_{c_{1}(i)} ; \mathbf{v}_{c_{2}(i)}\right]+\mathbf{b}_{d_{i}}^{l_{i}}\right) vi=ϕ(Wdili[vc1(i);vc2(i)]+bdili)
    • ϕ ( ⋅ ) \phi(\cdot) ϕ()是非线性单元(ReLU)。
    • l i l_i li层的可学习的参数是 { W x l i , W y l i , W z l i , b x l i , b y l i , b z l i } \left\{W_{\mathrm{x}}^{l_{i}}, W_{\mathrm{y}}^{l_{i}}, W_{\mathrm{z}}^{l_{i}}, \mathbf{b}_{\mathrm{x}}^{l_{i}}, \mathbf{b}_{\mathrm{y}}^{l_{i}}, \mathbf{b}_{\mathrm{z}}^{l_{i}}\right\} {Wxli,Wyli,Wzli,bxli,byli,bzli}
    • 根据KD树的划分方向 d i d_i di,选取上面三组参数中的一组进行计算。
  • 每层的矩阵 W W W b b b的维度为 m 1 , m 2 , … , m D m^{1}, m^{2}, \ldots, m^{D} m1,m2,,mD
  • l l l层的 W x l W_{\mathrm{x}}^{l} Wxl W y l W_{\mathrm{y}}^{l} Wyl W z l W_{\mathrm{z}}^{l} Wzl维度是 m l × 2 m l + 1 m^{l} \times 2 m^{l+1} ml×2ml+1(因为每个非叶节点有两个子节点),而 b x l \mathbf{b}_{\mathrm{x}}^{l} bxl b y l \mathbf{b}_{\mathrm{y}}^{l} byl b z l \mathbf{b}_{\mathrm{z}}^{l} bzl的维度是 m l m^l ml

2.2.3、分类网络结构

  • 对于分类网络来说,只要让根节点输出的特征向量的维度数为类别数,即可得到分类结果。
    • v 0 ( T ) = W 0 v 1 ( T ) + b 0 \mathbf{v}_{0}(\mathcal{T})=W^{0} \mathbf{v}_{1}(\mathcal{T})+\mathbf{b}^{0} v0(T)=W0v1(T)+b0
    • W 0 W^0 W0 b 0 \mathbf{b}^{0} b0是最后的分类层的参数。

2.2.4、形状检索网络结构

  • 与分类网络类似,但是最后的根节点输出的不是分类预测结果而是一个描述子(特征向量)。训练时加上度量学习的损失函数:histogram loss,siamese loss,triplet loss等,来约束输出的特征向量,使得同类形状的特征向量之间距离更小,不同类的特征向量之间距离更大。

2.2.5、分割网络结构

  • 在部件分割任务上,KD-Network参考了卷积神经网络对结构进行了更改,也使用了编码器-解码器(encoder-decoder)的结构,并加入了跳跃连接(skip connections)。

论文笔记:KD-Net_第2张图片

  • 上图是分割网络的示意图。
  • 这里的分割网络可以看成是将两个KD树拼接在了一起,左半边与分类网络和检索网络结构一样,是encoder;右半边是decoder,也就是倒过来的KD树,将根节点的特征传播到所有的叶节点上。
  • 设右半部分的KD树的根节点为 v 1 \mathbf{v}_{1} v1,而节点 i i i上的特征向量为 v i \mathbf{v}_{i} vi
  • 特征传播时的更新公式如下:
    • v ~ c 1 ( i ) = ϕ ( [ W ~ d c 1 ( i ) l i v ~ i + b ~ d c 1 ( i ) l i ; S l i v c 1 ( i ) + t l i ] ) v ~ c 2 ( i ) = ϕ ( [ W ~ d c 2 ( i ) l i v ~ i + b ~ d c 2 ( i ) l i ; S l i v c 2 ( i ) + t l i ] ) \begin{aligned} \tilde{\mathbf{v}}_{c_{1}(i)} &=\phi\left(\left[\tilde{W}_{d_{c_{1}(i)}}^{l_{i}} \tilde{\mathbf{v}}_{i}+\tilde{\mathbf{b}}_{d_{c_{1}(i)}}^{l_{i}} ; S^{l_{i}} \mathbf{v}_{c_{1}(i)}+\mathbf{t}^{l_{i}}\right]\right) \\ \tilde{\mathbf{v}}_{c_{2}(i)} &=\phi\left(\left[\tilde{W}_{d_{c_{2}(i)}}^{l_{i}} \tilde{\mathbf{v}}_{i}+\tilde{\mathbf{b}}_{d_{c_{2}(i)}}^{l_{i}} ; S^{l_{i}} \mathbf{v}_{c_{2}(i)}+\mathbf{t}^{l_{i}}\right]\right) \end{aligned} v~c1(i)v~c2(i)=ϕ([W~dc1(i)liv~i+b~dc1(i)li;Slivc1(i)+tli])=ϕ([W~dc2(i)liv~i+b~dc2(i)li;Slivc2(i)+tli])
    • W ~ d c ∗ ( i ) l i \tilde{W}_{d_{c *(i)}^{l_{i}}} W~dc(i)li b ~ d c , ( i ) l i \tilde{\mathbf{b}}_{d_{c,(i)}}^{l_{i}} b~dc,(i)li分别是网络中的权重和偏置参数。
    • S l i S^{l_{i}} Sli t l i t^{l_{i}} tli分别是跳跃连接上的权重和偏置参数。
  • 整个网络的结构类似U-Net,在encoder-decoder结构的基础之上加入了shortcut,避免一些信息的损失。

2.2.6、实现细节

  • 预处理,所有点云都事先归一化到 [ − 1 ; 1 ] 3 [-1 ; 1]^{3} [1;1]3

2.3、实验

论文笔记:KD-Net_第3张图片

论文笔记:KD-Net_第4张图片

论文笔记:KD-Net_第5张图片

论文笔记:KD-Net_第6张图片

论文笔记:KD-Net_第7张图片

论文笔记:KD-Net_第8张图片

3、参考资料

  1. Escape from Cells: Deep Kd-Networks for the Recognition of 3D Point Cloud Models

你可能感兴趣的:(深度学习,论文阅读,深度学习,论文笔记)