PointNet:Deep Learning on Point Sets for 3D Classification and Segmentation https://blog.csdn.net/BatFlo_wsh/article/details/89330195
当前进度
-
论文翻译
-
归纳梳理
-
代码复现
-
代码分析
论文翻译
——————————————————————
论文原文:https://arxiv.org/pdf/1612.00593.pdf
——————————————————————
摘要
点云是一种重要的几何数据结构。由于其无序性,大部分研究把这种数据转换成了有序的3D体素网格或者图片集合。然而,这会使数据不必要地大量增加,并导致问题。在本文中,我们设计了一种直接处理点云的新型神经网络,这种网络很好的考虑了输入中的点的有序性。PointNet,这种神经网络为物体分类、部分分割和场景语义分析提供了统一的结构。虽然简单,但PointNet十分高效且有效。根据经验,这种神经网络表现出了和现有技术水平相当甚至更好的强劲表现。从理论上,我们为解释这种网络学习到了什么和为什么这种网络能够对输入数据的扰动和损坏保持高度鲁棒性进行了分析。
引言
本文我们探索了能够处理3D几何数据(eg.点云、网格)的深度学习模型。典型的卷积结构要求高度规则的输入数据格式(eg.图片网格、3D体素数据),这是为了实现权重分享和其他核函数优化。由于点云和网格都不是有序的格式,大部分研究通常在把这些数据转换成有序的3D体素网格或者图片集合(eg.视图)后,再把数据喂给深度网络模型。然而,这种数据表示转换会使结果数据不必要地大量增加,同时也会引入能模糊数据自然不变性的量化伪像。
因此,我们使用简单的点云专注3D几何不同的输入表示,并命名生成的深度网络为PointNets。点云是简单且统一的结构,能够避免网格的组合不规则性和复杂性,因此更容易学习。然而,PointNet仍然需要重视这样一个事实,点云只是一组点,因此对其成员的排列不变性需要在网络计算中进行某些对称化操作。而更进一步的刚性运动的不变性也需要考虑。
PointNet是一个统一的模型,直接将点云作为输入,同时输出整个输入的类标签或者输入的的每个点块/部分的标签。该模型的基础构架非常的简单,因为在初始阶段,每个点的处理方法完全相同且独立。在基础设置中,每个点仅用它的三个坐标(
x
,
y
,
z
x,y,z
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.625em; vertical-align: -0.19444em;"></span><span class="mord mathit">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathit" style="margin-right: 0.03588em;">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathit" style="margin-right: 0.04398em;">z</span></span></span></span></span>)来表示。额外维度可以通过计算法线和其他局部或者全局特征来添加得到。</p>
我们这个方法的关键在于使用单个对称函数,最大池。网络有效地学习一组优化函数/准则,选择点云中感兴趣的或者含有信息的点并编码其选择的原因。网络最终的全连接层把这些学习到的最优值聚合到如上所述的整个形状的全局描述符(形状分类)上或者用于预测每个点标签(形状分割)。
我们的输入格式很容易应用刚性或者仿射变换,因为每个点都是独立变换的。因此我们能够增加一个依赖数据的空间变换网络,该网络会在PointNet处理数据前对数据进行规范化,以便进一步改善结果。
我们提供了该方法的理论分析和实验评估。我们展示了我们的网路可以近似任何连续的集合函数。更有趣的是,事实证明我们的网络通过学习一组稀疏的关键点来概括一个输入点云,这些关键点根据可视化大致对应物体对象的骨架。理论分析对为什么PointNet对输入点的小的扰动以及通过插入(异常点)或删除(错误点)造成的损坏具有高度鲁棒性提供了解释。
在形状分类、部分分割、场景分割的许多基准数据集中,我们通过实验将PointNet和基于多视图和体积表示的最先进方法进行了对比。在统一的构架下,PointNet不仅在速度上更快,同时也表现出了和现有技术相当甚至更好的性能。
我们工作的主要贡献如下:
- 我们设计了一个适用于处理3D无序点集的新型深度网络模型
- 我们展示了如何训练这样的网络模型来执行3D形状分类、形状部分分割和场景语义分析任务
- 我们对该方法的稳定性和效率进行了深入的验证和理论分析
- 我们演示了网络中所选择神经元计算出的3D特征,并对其性能进行了直观的解释
通过神经网络处理无序集合的问题是一个非常普遍和根本的问题,我们希望我们的想法也可以应用到其他领域。
相关工作
点云特征 点云大部分的现有特征都是针对特定任务手工制作的。点的特征通常编码点的某些统计特性,并且被设计成对于某些变换是不变的,这些变换通常被划分为内在的或外在的。它们还可以归类为局部特征和全局特征。对于特定任务,找到最优的特征组合并非易事。
3D数据的深度学习 3D数据具有多种流行的表示形式,从而有各种学习方法。Volumetric CNNs: 是在体素形状上应用3D卷积神经网络的先驱。然而,由于数据的稀疏性和3D卷积的计算成本,体积表示受到其分辨率的限制。FPNN 和 Vote3D提出了处理稀疏性问题的特殊方法;然而,他们的操作仍然是在稀疏的体积上,处理非常大的点云对他们来说是一种挑战。Multiview CNNs: 试图将3D点云或形状渲染成2D图像,然后应用2D卷积神经网络对它们进行分类。通过精心设计的图像CNN,这一系列方法在形状分类和检索任务方面取得了主导作用。然而,将它们扩展到场景理解或其他3D任务(eg.点分类、形状完成)上时表现很普通。Spectral CNNs: 最近的一些工作在网格上使用了光谱CNN。然而,这些方法目前受限于流形网格(eg.有机物体),而且如何将它们扩展到非等距形状(eg.家具)上并不明显。Feature-based DNNs: 首先通过提取传统的形状特征将3D数据转换成向量,然后使用全连接网络对形状进行分类。我们认为它们受限于所提取特征的表示能力。
无序集的深度学习 从数据结构的角度来说,点云是无序的向量集合。当大部分深度学习工作集中在规则输入表示,如序列(eg.语音和语言处理)、图像和体积(eg.视频、3D数据)上时,很少有在点集上做深度学习工作的。
Oriol Vinyals等人最近的一项工作研究了这个问题,他们使用具有注意机制的读-处理-写网络来处理无序输入集,同时展示他们的网络具有对数字进行排序的能力。然而,由于他们的工作重点是泛型集合NLP应用,因此缺少了几何体在集合中的作用。
问题陈述
我们设计了一个深度学习框架,直接使用无序点集作为输入。点云表示为一组3D点{
P
i
∣
i
=
1
,
.
.
.
,
n
P_{i} | i =1,...,n
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord"><span class="mord mathit" style="margin-right: 0.13889em;">P</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.311664em;"><span class="" style="top: -2.55em; margin-left: -0.13889em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight">i</span></span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mord">∣</span><span class="mord mathit">i</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.83888em; vertical-align: -0.19444em;"></span><span class="mord">1</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">.</span><span class="mord">.</span><span class="mord">.</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathit">n</span></span></span></span></span>},其中每个点的<span class="katex--inline"><span class="katex"><span class="katex-mathml">
P
i
P_{i}
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.83333em; vertical-align: -0.15em;"></span><span class="mord"><span class="mord mathit" style="margin-right: 0.13889em;">P</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.311664em;"><span class="" style="top: -2.55em; margin-left: -0.13889em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight">i</span></span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>是其坐标(<span class="katex--inline"><span class="katex"><span class="katex-mathml">
x
,
y
,
z
x,y,z
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.625em; vertical-align: -0.19444em;"></span><span class="mord mathit">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathit" style="margin-right: 0.03588em;">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathit" style="margin-right: 0.04398em;">z</span></span></span></span></span>)的向量加上额外的特征通道,例如颜色、法线等,除非另有说明,我们只使用坐标(<span class="katex--inline"><span class="katex"><span class="katex-mathml">
x
,
y
,
z
x,y,z
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.625em; vertical-align: -0.19444em;"></span><span class="mord mathit">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathit" style="margin-right: 0.03588em;">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathit" style="margin-right: 0.04398em;">z</span></span></span></span></span>)作为我们点的通道。</p>
对于对象分类任务,输入点云要么直接从形状采样,要么从场景点云中预分割。我们提出的深度网络输出所有
k
k
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.69444em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.03148em;">k</span></span></span></span></span>个候选类别的<span class="katex--inline"><span class="katex"><span class="katex-mathml">
k
k
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.69444em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.03148em;">k</span></span></span></span></span>分数。对于语义分割,输入可以是用于部分区域分割的单个对象,或者是用于对象区域分割的3D场景的一个子体积。我们的模型将为<span class="katex--inline"><span class="katex"><span class="katex-mathml">
n
n
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.43056em; vertical-align: 0em;"></span><span class="mord mathit">n</span></span></span></span></span>个点和<span class="katex--inline"><span class="katex"><span class="katex-mathml">
m
m
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.43056em; vertical-align: 0em;"></span><span class="mord mathit">m</span></span></span></span></span>个语义子分类中的每一个输出<span class="katex--inline"><span class="katex"><span class="katex-mathml">
n
×
m
n×m
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.66666em; vertical-align: -0.08333em;"></span><span class="mord mathit">n</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right: 0.222222em;"></span></span><span class="base"><span class="strut" style="height: 0.43056em; vertical-align: 0em;"></span><span class="mord mathit">m</span></span></span></span></span>分数。</p>
点集的深度学习
我们网络的构架的灵感来自
R
n
\mathbb{R}^n
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68889em; vertical-align: 0em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">R</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.664392em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight">n</span></span></span></span></span></span></span></span></span></span></span></span> 中的点集的属性。</p>
R
n
\mathbb{R}^n
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68889em; vertical-align: 0em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">R</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.664392em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight">n</span></span></span></span></span></span></span></span></span></span></span></span> 中的点集的属性</h3>
R
n
\mathbb{R}^n
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68889em; vertical-align: 0em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">R</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.664392em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight">n</span></span></span></span></span></span></span></span></span></span></span></span> 中的点集的属性</h3>
我们的输入是来自欧式空间的点的子集。它有三个主要属性:
- 无序性 与图像中的像素数组或体积网格中的体素数组不同,点云是一组没有特定顺序的点。换句话说,处理
N N </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.10903em;">N</span></span></span></span></span>个3D点集的网络需要能够对输入数据集按照喂进来的顺序排列<span class="katex--inline"><span class="katex"><span class="katex-mathml"> N ! N! </span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.69444em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.10903em;">N</span><span class="mclose">!</span></span></span></span></span>保持不变。</li><li>点之间的相互作用 这些点来自具有距离度量的空间。这意味着这些点不是孤立的,而且相邻的点形成一个具有意义的子集。因此模型需要能够捕获附近点的局部结构,以及局部结构之间组合的相互作用。</li><li>转换的不变性 对于几何对象,点集学习到的表示应该对某些变换具有不变性。例如,所有的旋转点和平移点都不能修改全局点云的类别或者点的分割。</li></ul>
PointNet的结构
我们整个网络的结构都在图2中展示出来了,其中分类网络和分割网络占据了结构中的很大一部分。请阅读图2流程图的标题。
我们的网络有三个关键模块:
- 最大池层作为对称函数用于聚类所有点的信息
- 组合局部信息和全局信息的结构
- 两个对齐输入点和点的特征的联合对齐网络
我们将在下面的单独段落中讨论这些设计选择背后的原因。
无序输入的对称函数
为了使模型对输入排序不变,存在三种策略:1)将输入排序为规范顺序;2)将输入看作训练RNN的序列,但其通过各种排列来增加训练数据;3)用一个简单的对称函数来聚类每个点的信息。这里,对称函数将
n
n
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.43056em; vertical-align: 0em;"></span><span class="mord mathit">n</span></span></span></span></span>个向量作为输入,同时输出一个对输入顺序不变的新向量。例如,<span class="katex--inline"><span class="katex"><span class="katex-mathml">
+
+
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.66666em; vertical-align: -0.08333em;"></span><span class="mord">+</span></span></span></span></span>和<span class="katex--inline"><span class="katex"><span class="katex-mathml">
∗
*
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.46528em; vertical-align: 0em;"></span><span class="mord">∗</span></span></span></span></span>操作符是对称二元函数。</p>
尽管排序听起来像是一个简单的解决方法,但谈及到一般意义上的点的扰动时,在高维空间中实际上并不存在稳定的排序。这可以很容易地通过矛盾来显示。如果这样一种排序策略存在,那么它定义了高维空间和
1
d
1d
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.69444em; vertical-align: 0em;"></span><span class="mord">1</span><span class="mord mathit">d</span></span></span></span></span>实线之间的双向映射。不难看出,谈及点扰动时要求排序的稳定等同在维度降低时保持映射在空间上的接近度,这在一般情况下是无法实现的任务。因此,排序并不能完全解决排序问题,而且因为排序问题的存在,网络很难学习到一致的从输入到输出的映射。如实验(图5)中所示,我们发现直接在排序点集上应用多层感知机变现不好,但稍微比直接处理无序输入要好。</p>
使用RNN的想法是将点集作为顺序信号,并希望用随机置换序列训练RNN,这样RNN将会变得和输入顺序无关。然而,在“OrderMatters”中,作者已经证明顺序确实很重要而且无法完全被忽略。尽管RNN对于具有小长度(数十个)的序列的输入排序已经具有相对良好的鲁棒性,但是很难扩展到成千上万的输入元素上,而这是点集的很常见的规模。根据实验,我们也证明了基于RNN的模型表现的并不如我们所提出来的方法(图5)。
我们的想法是通过对集合中转换元素应用对称函数来近似在点集上定义的一般函数:
(1)
f
(
{
x
1
,
.
.
.
,
x
n
}
)
≈
g
(
h
(
x
1
)
,
.
.
.
,
h
(
x
n
)
)
,
<span class="MathJax_Preview" style="color: inherit; display: none;"></span><div class="MathJax_Display"><span class="MathJax" id="MathJax-Element-1-Frame" tabindex="0" data-mathml="<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><merror><mtext>\begin{aligned}&#xA0;f(\{&#xA0;x_1,...,x_n&#xA0;\})&#xA0;&amp;amp;&#xA0;\approx&#xA0;g(h(x_1),...,h(x_n)),&#xA0;\tag{1}&#xA0;\end{aligned}</mtext></merror></math>" role="presentation" style="position: relative;"><span class="math" id="MathJax-Span-1" aria-hidden="true" style=""><span class="noError" id="MathJax-Span-2" style="display: inline-block;">\begin{aligned} f(\{ x_1,...,x_n \}) &amp; \approx g(h(x_1),...,h(x_n)), \tag{1} \end{aligned}</span></span><span class="MJX_Assistive_MathML MJX_Assistive_MathML_Block" role="presentation"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><merror><mtext>\begin{aligned} f(\{ x_1,...,x_n \}) &amp; \approx g(h(x_1),...,h(x_n)), \tag{1} \end{aligned}</mtext></merror></math></span></span></div><script type="math/tex; mode=display" id="MathJax-Element-1">\begin{aligned} f(\{ x_1,...,x_n \}) & \approx g(h(x_1),...,h(x_n)), \tag{1} \end{aligned}</script>
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.5em; vertical-align: -0.5em;"></span><span class="mord"><span class="mtable"><span class="col-align-r"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1em;"><span class="" style="top: -3.16em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="mopen">(</span><span class="mopen">{<!-- --></span><span class="mord"><span class="mord mathit">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">.</span><span class="mord">.</span><span class="mord">.</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord mathit">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.151392em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight">n</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mclose">}</span><span class="mclose">)</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.5em;"><span class=""></span></span></span></span></span><span class="col-align-l"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1em;"><span class="" style="top: -3.16em;"><span class="pstrut" style="height: 3em;"></span><span class="mord"><span class="mord"></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">≈</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mord mathit" style="margin-right: 0.03588em;">g</span><span class="mopen">(</span><span class="mord mathit">h</span><span class="mopen">(</span><span class="mord"><span class="mord mathit">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">.</span><span class="mord">.</span><span class="mord">.</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathit">h</span><span class="mopen">(</span><span class="mord"><span class="mord mathit">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.151392em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight">n</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mclose">)</span><span class="mclose">)</span><span class="mpunct">,</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.5em;"><span class=""></span></span></span></span></span></span></span></span><span class="tag"><span class="strut" style="height: 1.5em; vertical-align: -0.5em;"></span><span class="mord text"><span class="mord">(</span><span class="mord"><span class="mord">1</span></span><span class="mord">)</span></span></span></span></span></span></span>这里<span class="katex--inline"><span class="katex"><span class="katex-mathml">
f
:
2
R
N
→
R
,
h
:
R
N
→
R
K
a
n
d
g
:
R
K
×
⋅
⋅
⋅
×
R
K
⎵
n
→
R
f:2^{\mathbb{R}^N} \to \mathbb{R}, h:\mathbb{R}^N \to \mathbb{R}^K \quad and \quad g:\underbrace{\mathbb{R}^K \times\cdot\cdot\cdot\times\mathbb{R}^K}_n\to\mathbb{R}
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">:</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 1.00636em; vertical-align: 0em;"></span><span class="mord"><span class="mord">2</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 1.00636em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbb mtight">R</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.919093em;"><span class="" style="top: -2.931em; margin-right: 0.0714286em;"><span class="pstrut" style="height: 2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathit mtight" style="margin-right: 0.10903em;">N</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord mathbb">R</span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathit">h</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">:</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.841331em; vertical-align: 0em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">R</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.841331em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.10903em;">N</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 1.03577em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">R</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.841331em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.07153em;">K</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 1em;"></span><span class="mord mathit">a</span><span class="mord mathit">n</span><span class="mord mathit">d</span><span class="mspace" style="margin-right: 1em;"></span><span class="mord mathit" style="margin-right: 0.03588em;">g</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">:</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 2.12405em; vertical-align: -1.23272em;"></span><span class="mord munder"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.891331em;"><span class="" style="top: -1.76728em;"><span class="pstrut" style="height: 3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight">n</span></span></span><span class="" style="top: -3em;"><span class="pstrut" style="height: 3em;"></span><span class="mord munder"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.891331em;"><span class="svg-align" style="top: -2.26867em;"><span class="pstrut" style="height: 3em;"></span><span class="stretchy" style="height: 0.548em; min-width: 1.6em;"><span class="brace-left" style="height: 0.548em;">
<svg width="400em" height="0.548em" viewBox="0 0 400000 548" preserveAspectRatio="xMinYMin slice">
<path d="M0 6l6-6h17c12.688 0 19.313.3 20 1 4 4 7.313 8.3 10 13
35.313 51.3 80.813 93.8 136.5 127.5 55.688 33.7 117.188 55.8 184.5 66.5.688
0 2 .3 4 1 18.688 2.7 76 4.3 172 5h399450v120H429l-6-1c-124.688-8-235-61.7
-331-161C60.687 138.7 32.312 99.3 7 54L0 41V6z">
RK×⋅⋅⋅×RK→R是对称函数
根据实验,我们的基础模型十分简单:我们通过多层感知机来近似
h
h
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.69444em; vertical-align: 0em;"></span><span class="mord mathit">h</span></span></span></span></span>,并通过单个变量函数和最大池函数的组合来近似<span class="katex--inline"><span class="katex"><span class="katex-mathml">
g
g
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.625em; vertical-align: -0.19444em;"></span><span class="mord mathit" style="margin-right: 0.03588em;">g</span></span></span></span></span>。通过实验发现这表现的很好。通过<span class="katex--inline"><span class="katex"><span class="katex-mathml">
h
h
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.69444em; vertical-align: 0em;"></span><span class="mord mathit">h</span></span></span></span></span>的集合,我们可以学到一些<span class="katex--inline"><span class="katex"><span class="katex-mathml">
f
f
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord mathit" style="margin-right: 0.10764em;">f</span></span></span></span></span>来捕获点集的不同属性。</p>
尽管我们的关键模块看起来很简单,但它也具有很精彩的地方(参见5.3节),在一些不同的应用中能够表现出很强的性能(参见5.1节)。由于我们模型的简单性,我们也提供了4.3节中的理论分析。
局部和全局信息聚类
上一节的输出组成了一个向量
[
f
1
,
.
.
.
,
f
k
]
[f_1,...,f_k]
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">[</span><span class="mord"><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: -0.10764em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">.</span><span class="mord">.</span><span class="mord">.</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.336108em;"><span class="" style="top: -2.55em; margin-left: -0.10764em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.03148em;">k</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mclose">]</span></span></span></span></span>,这是输入集的全局标签。我们可以在形同全局特征上很容易训练SVM或多层感知机分类器以进行分类。然而,点的分割需要局部和全局新的的结合。我们能够通过简单而高效的方式来实现这一目标。</p>
我们的解决方法可以在图2(Segmentation Network)中看到。在计算完全局点云特征向量后,我们将全局特征和每一个点的特征连接起来反馈给每一个点特征。然后我们基于组合的点特征提取新的每个点的特征,这样每个点特征都考虑了局部和全局信息。
通过这样的修改,我们的网络能够预测依赖于局部几何和全局语义的每个点数量。例如我们可以准确地预测出每个点的法线(图中的补充),验证网络能够汇总来自该点的局部领域的信息。在实验环节中,我们也表明我们的模型可以在形状部分分割和场景分割方面实现最先进的性能。
联合对准网络
如果点云在经历了某些几何变换(eg刚性变换),那么点云的语义标签必须是不变的。因此我们希望点集的学习表示对这些变换是不变的。
一个自然的解决方法是在特征提取前将所有的输入集对齐到规范空间。Jaderberg等人[9]介绍了一种通过采样和插值来对齐2D图像的空间变换的想法,通过在GPU上特别定制的层来实现。
与[9]相比,我们的点云输入形式使我们能够以更简单的方式来实现这一目标。我们不需要发明任何新的层,也不需要像图像情况那样引入任何别名。我们通过mini-network(图2中的T-net)预测仿射变换矩阵,并直接将该变换作用于输入点的坐标。Mini-network本身类似于大型网络,且由点的独立特征提取、max pooling和全连接层组成。更多关于T-net的细节在补充中。
这个想法可以进一步扩展到特征空间的对齐。我们可以在点的特征上插入另一个对齐网络,并预测特征变换矩阵以对齐来自不同输入点云的特征。然而,特征空间中的变换矩阵比空间变换矩阵的维度高很多,这极大地增加了优化的难度。因此,我们在softmax的训练损失中增加了一个正则化项。我们约束特征变换矩阵接近于正交矩阵。
(2)
L
r
e
g
=
∣
∣
I
−
A
A
T
∣
∣
F
2
,
L_{reg}=||I-AA^T||^2_F,\tag{2}
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.969438em; vertical-align: -0.286108em;"></span><span class="mord"><span class="mord mathit">L</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.151392em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mathit mtight" style="margin-right: 0.02778em;">r</span><span class="mord mathit mtight">e</span><span class="mord mathit mtight" style="margin-right: 0.03588em;">g</span></span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.286108em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord">∣</span><span class="mord">∣</span><span class="mord mathit" style="margin-right: 0.07847em;">I</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right: 0.222222em;"></span></span><span class="base"><span class="strut" style="height: 1.14133em; vertical-align: -0.25em;"></span><span class="mord mathit">A</span><span class="mord"><span class="mord mathit">A</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.891331em;"><span class="" style="top: -3.113em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.13889em;">T</span></span></span></span></span></span></span></span><span class="mord">∣</span><span class="mord"><span class="mord">∣</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.864108em;"><span class="" style="top: -2.453em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.13889em;">F</span></span></span><span class="" style="top: -3.113em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.247em;"><span class=""></span></span></span></span></span></span><span class="mord cjk_fallback">,</span></span><span class="tag"><span class="strut" style="height: 1.17744em; vertical-align: -0.286108em;"></span><span class="mord text"><span class="mord">(</span><span class="mord"><span class="mord">2</span></span><span class="mord">)</span></span></span></span></span></span></span></p>
其中
A
A
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathit">A</span></span></span></span></span>是mini-network预测的特征对齐矩阵。正交变换不会丢失输入的信息,因此期望是正交变换。我们发现通过增加正则化项,优化变得更加稳定,而且我们的模型实现了更好的性能。</p>
理论分析
通用逼近
首先,我们展示了我们的神经网络对于连续集函数的通用逼近能力。通过集函数的连续性,直观地,对输入点集的小扰动不应该极大地改变函数值,例如分类或分割的分数。
形式上,让
X
=
{
S
:
S
⊆
[
0
,
1
]
m
a
n
d
[
S
]
=
n
}
,
f
:
X
→
R
\mathcal{X} = \{S : S \subseteq [0,1]^m \ and \ [S]=n\},f:\mathcal{X} \to \mathbb{R}
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord"><span class="mord mathcal" style="margin-right: 0.14643em;">X</span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">{<!-- --></span><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">:</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.8193em; vertical-align: -0.13597em;"></span><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">⊆</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">[</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">1</span><span class="mclose"><span class="mclose">]</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.664392em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight">m</span></span></span></span></span></span></span></span><span class="mspace"> </span><span class="mord mathit">a</span><span class="mord mathit">n</span><span class="mord mathit">d</span><span class="mspace"> </span><span class="mopen">[</span><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="mclose">]</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathit">n</span><span class="mclose">}</span><span class="mord cjk_fallback">,</span><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">:</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord"><span class="mord mathcal" style="margin-right: 0.14643em;">X</span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.68889em; vertical-align: 0em;"></span><span class="mord"><span class="mord mathbb">R</span></span></span></span></span></span> 是涉及Hausdorff距离<span class="katex--inline"><span class="katex"><span class="katex-mathml">
d
H
(
⋅
,
⋅
)
d_H(\cdot,\cdot)
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord"><span class="mord mathit">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.08125em;">H</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mopen">(</span><span class="mord">⋅</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">⋅</span><span class="mclose">)</span></span></span></span></span>在<span class="katex--inline"><span class="katex"><span class="katex-mathml">
X
\mathcal{X}
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord"><span class="mord mathcal" style="margin-right: 0.14643em;">X</span></span></span></span></span></span>上的连续集合函数,换句话说,<span class="katex--inline"><span class="katex"><span class="katex-mathml">
∀
ϵ
&gt;
0
,
∃
δ
&gt;
0
\forall \epsilon &gt;0,\exists \delta &gt;0
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.73354em; vertical-align: -0.0391em;"></span><span class="mord">∀</span><span class="mord mathit">ϵ</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">></span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.73354em; vertical-align: -0.0391em;"></span><span class="mord">0</span><span class="mord cjk_fallback">,</span><span class="mord">∃</span><span class="mord mathit" style="margin-right: 0.03785em;">δ</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">></span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.64444em; vertical-align: 0em;"></span><span class="mord">0</span></span></span></span></span>,对于任意<span class="katex--inline"><span class="katex"><span class="katex-mathml">
S
S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.05764em;">S</span></span></span></span></span>,<span class="katex--inline"><span class="katex"><span class="katex-mathml">
S
′
∈
X
S&#x27;\in \mathcal{X}
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.790992em; vertical-align: -0.0391em;"></span><span class="mord"><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.751892em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord"><span class="mord mathcal" style="margin-right: 0.14643em;">X</span></span></span></span></span></span>,如果<span class="katex--inline"><span class="katex"><span class="katex-mathml">
d
H
(
S
,
S
′
)
&lt;
δ
d_H(S,S&#x27;)&lt; \delta
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.00189em; vertical-align: -0.25em;"></span><span class="mord"><span class="mord mathit">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.08125em;">H</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.751892em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel"><</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.69444em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.03785em;">δ</span></span></span></span></span>,那么<span class="katex--inline"><span class="katex"><span class="katex-mathml">
∣
f
(
S
)
−
f
(
S
′
)
∣
&lt;
ϵ
|f(S)-f(S&#x27;)|&lt;\epsilon
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord">∣</span><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="mopen">(</span><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right: 0.222222em;"></span></span><span class="base"><span class="strut" style="height: 1.00189em; vertical-align: -0.25em;"></span><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="mopen">(</span><span class="mord"><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.751892em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mclose">)</span><span class="mord">∣</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel"><</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.43056em; vertical-align: 0em;"></span><span class="mord mathit">ϵ</span></span></span></span></span>。定理的意思是说,在max pooling层给定足够多的神经元时,<span class="katex--inline"><span class="katex"><span class="katex-mathml">
f
f
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord mathit" style="margin-right: 0.10764em;">f</span></span></span></span></span>可以由我们的网络任意近似,换句话说,(1)中的<span class="katex--inline"><span class="katex"><span class="katex-mathml">
K
K
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.07153em;">K</span></span></span></span></span>足够大足够大。</p>
定理 1 假设
f
:
X
→
R
f:\mathcal{X} \to \mathbb{R}
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">:</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord"><span class="mord mathcal" style="margin-right: 0.14643em;">X</span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.68889em; vertical-align: 0em;"></span><span class="mord"><span class="mord mathbb">R</span></span></span></span></span></span>是涉及Hausdorff距离<span class="katex--inline"><span class="katex"><span class="katex-mathml">
d
H
(
⋅
,
⋅
)
d_H(\cdot,\cdot)
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord"><span class="mord mathit">d</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.08125em;">H</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mopen">(</span><span class="mord">⋅</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">⋅</span><span class="mclose">)</span></span></span></span></span>的连续集函数。<span class="katex--inline"><span class="katex"><span class="katex-mathml">
∀
ϵ
&gt;
0
,
∃
\forall\epsilon &gt;0,\exist
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.73354em; vertical-align: -0.0391em;"></span><span class="mord">∀</span><span class="mord mathit">ϵ</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">></span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">∃</span></span></span></span></span>一个连续函数 <span class="katex--inline"><span class="katex"><span class="katex-mathml">
h
h
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.69444em; vertical-align: 0em;"></span><span class="mord mathit">h</span></span></span></span></span>和一个对称函数<span class="katex--inline"><span class="katex"><span class="katex-mathml">
g
(
x
1
,
.
.
.
,
x
n
)
=
γ
∘
M
A
X
g(x_1,...,x_n)=\gamma\circ \mathbf{MAX}
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathit" style="margin-right: 0.03588em;">g</span><span class="mopen">(</span><span class="mord"><span class="mord mathit">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">.</span><span class="mord">.</span><span class="mord">.</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord mathit">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.151392em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight">n</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.63889em; vertical-align: -0.19444em;"></span><span class="mord mathit" style="margin-right: 0.05556em;">γ</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">∘</span><span class="mspace" style="margin-right: 0.222222em;"></span></span><span class="base"><span class="strut" style="height: 0.68611em; vertical-align: 0em;"></span><span class="mord"><span class="mord mathbf">M</span><span class="mord mathbf">A</span><span class="mord mathbf">X</span></span></span></span></span></span>,这样对于任意<span class="katex--inline"><span class="katex"><span class="katex-mathml">
S
∈
X
S\in \mathcal{X}
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.72243em; vertical-align: -0.0391em;"></span><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">∈</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord"><span class="mord mathcal" style="margin-right: 0.14643em;">X</span></span></span></span></span></span>,<span class="katex--display"><span class="katex-display"><span class="katex"><span class="katex-mathml">
∣
f
(
S
)
−
γ
(
M
A
X
x
i
∈
S
{
h
(
x
i
)
}
)
∣
&lt;
ϵ
\bigg|f(S)-\gamma\bigg(\mathbf{ \mathop{MAX}\limits_{x_i \in S}}\{h(x_i)\}\bigg)\bigg|&lt;\epsilon
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 2.424em; vertical-align: -0.95002em;"></span><span class="mord"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.47398em;"><span class="" style="top: -1.65598em;"><span class="pstrut" style="height: 2.606em;"></span><span class="delimsizinginner delim-size1"><span class="">∣</span></span></span><span class="" style="top: -2.26198em;"><span class="pstrut" style="height: 2.606em;"></span><span class="delimsizinginner delim-size1"><span class="">∣</span></span></span><span class="" style="top: -2.86798em;"><span class="pstrut" style="height: 2.606em;"></span><span class="delimsizinginner delim-size1"><span class="">∣</span></span></span><span class="" style="top: -3.47398em;"><span class="pstrut" style="height: 2.606em;"></span><span class="delimsizinginner delim-size1"><span class="">∣</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.95002em;"><span class=""></span></span></span></span></span></span><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="mopen">(</span><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right: 0.222222em;"></span></span><span class="base"><span class="strut" style="height: 2.42401em; vertical-align: -0.95003em;"></span><span class="mord mathit" style="margin-right: 0.05556em;">γ</span><span class="mord"><span class="delimsizing size3">(</span></span><span class="mord"><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.68611em;"><span class="" style="top: -2.35372em; margin-left: 0em;"><span class="pstrut" style="height: 3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3448em;"><span class="" style="top: -2.34877em; margin-left: 0em; margin-right: 0.0714286em;"><span class="pstrut" style="height: 2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathbf mtight">i</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.151229em;"><span class=""></span></span></span></span></span></span><span class="mrel mtight">∈</span><span class="mord mathbf mtight">S</span></span></span></span><span class="" style="top: -3em;"><span class="pstrut" style="height: 3em;"></span><span class=""><span class="mop"><span class="mord mathbf">M</span><span class="mord mathbf">A</span><span class="mord mathbf">X</span></span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.852137em;"><span class=""></span></span></span></span></span></span><span class="mopen">{<!-- --></span><span class="mord mathit">h</span><span class="mopen">(</span><span class="mord"><span class="mord mathit">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.311664em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight">i</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mclose">)</span><span class="mclose">}</span><span class="mord"><span class="delimsizing size3">)</span></span><span class="mord"><span class="delimsizing mult"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 1.47398em;"><span class="" style="top: -1.65598em;"><span class="pstrut" style="height: 2.606em;"></span><span class="delimsizinginner delim-size1"><span class="">∣</span></span></span><span class="" style="top: -2.26198em;"><span class="pstrut" style="height: 2.606em;"></span><span class="delimsizinginner delim-size1"><span class="">∣</span></span></span><span class="" style="top: -2.86798em;"><span class="pstrut" style="height: 2.606em;"></span><span class="delimsizinginner delim-size1"><span class="">∣</span></span></span><span class="" style="top: -3.47398em;"><span class="pstrut" style="height: 2.606em;"></span><span class="delimsizinginner delim-size1"><span class="">∣</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.95002em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel"><</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.43056em; vertical-align: 0em;"></span><span class="mord mathit">ϵ</span></span></span></span></span></span>这里<span class="katex--inline"><span class="katex"><span class="katex-mathml">
x
1
,
.
.
.
,
x
n
x_1,...,x_n
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.625em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord mathit">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">.</span><span class="mord">.</span><span class="mord">.</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord mathit">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.151392em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight">n</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>是<span class="katex--inline"><span class="katex"><span class="katex-mathml">
S
S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.05764em;">S</span></span></span></span></span>中任意排序的元素的完整列表,<span class="katex--inline"><span class="katex"><span class="katex-mathml">
γ
\gamma
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.625em; vertical-align: -0.19444em;"></span><span class="mord mathit" style="margin-right: 0.05556em;">γ</span></span></span></span></span>是连续函数,<span class="katex--inline"><span class="katex"><span class="katex-mathml">
M
A
X
\mathbf{MAX}
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68611em; vertical-align: 0em;"></span><span class="mord"><span class="mord mathbf">M</span><span class="mord mathbf">A</span><span class="mord mathbf">X</span></span></span></span></span></span>是向量做取最大值运算的运算符,它将<span class="katex--inline"><span class="katex"><span class="katex-mathml">
n
n
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.43056em; vertical-align: 0em;"></span><span class="mord mathit">n</span></span></span></span></span>个向量作为输入,然后返回一个包含每个元素最大值的新的向量。</em></p>
在我们的补充材料中给出了这个定理的证明。关键的思路是,在最坏的情况下,模型可以通过将空间划分成等大小的体素来学习将点云转换成体积表示。然而,实验中模型学习到了一种更加智能的探测空间的策略,正如我们将在点函数可视化中看到的那样。
维度和稳定性的瓶颈 从理论上和实验中我们发现,模型的表现受到max pooling层维度的很大影响,即(1)中的
K
K
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.07153em;">K</span></span></span></span></span>。这里我们提供了一个分析,揭示了和模型的稳定性相关的属性。</p>
我们定义
f
f
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord mathit" style="margin-right: 0.10764em;">f</span></span></span></span></span>的子网络为<span class="katex--inline"><span class="katex"><span class="katex-mathml">
u
=
M
A
X
x
i
∈
S
{
h
(
x
i
)
}
\mathbf{u=\mathop{MAX}\limits_{x_i \in S}}\{h(x_i)\}
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.60214em; vertical-align: -0.852137em;"></span><span class="mord"><span class="mord mathbf">u</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.68611em;"><span class="" style="top: -2.35372em; margin-left: 0em;"><span class="pstrut" style="height: 3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3448em;"><span class="" style="top: -2.34877em; margin-left: 0em; margin-right: 0.0714286em;"><span class="pstrut" style="height: 2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathbf mtight">i</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.151229em;"><span class=""></span></span></span></span></span></span><span class="mrel mtight">∈</span><span class="mord mathbf mtight">S</span></span></span></span><span class="" style="top: -3em;"><span class="pstrut" style="height: 3em;"></span><span class=""><span class="mop"><span class="mord mathbf">M</span><span class="mord mathbf">A</span><span class="mord mathbf">X</span></span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.852137em;"><span class=""></span></span></span></span></span></span><span class="mopen">{<!-- --></span><span class="mord mathit">h</span><span class="mopen">(</span><span class="mord"><span class="mord mathit">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.311664em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight">i</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mclose">)</span><span class="mclose">}</span></span></span></span></span>,其将<span class="katex--inline"><span class="katex"><span class="katex-mathml">
[
0
,
1
]
m
[0,1]^m
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">[</span><span class="mord">0</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">1</span><span class="mclose"><span class="mclose">]</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.664392em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight">m</span></span></span></span></span></span></span></span></span></span></span></span>中点集映射到<span class="katex--inline"><span class="katex"><span class="katex-mathml">
K
K
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.07153em;">K</span></span></span></span></span>维向量。以下定理告诉我们输入集中的小损失或者额外噪声点都不太可能改变模型的输出。</p>
定理 2 假设
u
:
X
→
R
K
\mathbf{u}:\mathcal{X}\to\mathbb{R}^K
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.44444em; vertical-align: 0em;"></span><span class="mord"><span class="mord mathbf">u</span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">:</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord"><span class="mord mathcal" style="margin-right: 0.14643em;">X</span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">→</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.841331em; vertical-align: 0em;"></span><span class="mord"><span class="mord"><span class="mord mathbb">R</span></span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height: 0.841331em;"><span class="" style="top: -3.063em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.07153em;">K</span></span></span></span></span></span></span></span></span></span></span></span>,其中 <span class="katex--inline"><span class="katex"><span class="katex-mathml">
u
=
M
A
X
x
i
∈
S
{
h
(
x
i
)
}
,
f
=
γ
∘
u
\mathbf{u=\mathop{MAX}\limits_{x_i \in S}}\{h(x_i)\},f=\gamma\circ\mathbf{u}
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1.60214em; vertical-align: -0.852137em;"></span><span class="mord"><span class="mord mathbf">u</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mop op-limits"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.68611em;"><span class="" style="top: -2.35372em; margin-left: 0em;"><span class="pstrut" style="height: 3em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight"><span class="mord mathbf mtight">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.3448em;"><span class="" style="top: -2.34877em; margin-left: 0em; margin-right: 0.0714286em;"><span class="pstrut" style="height: 2.5em;"></span><span class="sizing reset-size3 size1 mtight"><span class="mord mathbf mtight">i</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.151229em;"><span class=""></span></span></span></span></span></span><span class="mrel mtight">∈</span><span class="mord mathbf mtight">S</span></span></span></span><span class="" style="top: -3em;"><span class="pstrut" style="height: 3em;"></span><span class=""><span class="mop"><span class="mord mathbf">M</span><span class="mord mathbf">A</span><span class="mord mathbf">X</span></span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.852137em;"><span class=""></span></span></span></span></span></span><span class="mopen">{<!-- --></span><span class="mord mathit">h</span><span class="mopen">(</span><span class="mord"><span class="mord mathit">x</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.311664em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight">i</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mclose">)</span><span class="mclose">}</span><span class="mord cjk_fallback">,</span><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.63889em; vertical-align: -0.19444em;"></span><span class="mord mathit" style="margin-right: 0.05556em;">γ</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">∘</span><span class="mspace" style="margin-right: 0.222222em;"></span></span><span class="base"><span class="strut" style="height: 0.44444em; vertical-align: 0em;"></span><span class="mord"><span class="mord mathbf">u</span></span></span></span></span></span>,那么</em><br> <em>(a)<span class="katex--inline"><span class="katex"><span class="katex-mathml">
∀
S
,
∃
C
S
,
N
S
⊆
X
,
f
(
T
)
=
f
(
S
)
,
\forall S,\exist \ \mathcal{C}_S,\mathcal{N}_S \subseteq \mathcal{X},f(T)=f(S),
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord">∀</span><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">∃</span><span class="mspace"> </span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.05834em;">C</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.14736em;">N</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">⊆</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord"><span class="mord mathcal" style="margin-right: 0.14643em;">X</span></span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="mopen">(</span><span class="mord mathit" style="margin-right: 0.13889em;">T</span><span class="mclose">)</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="mopen">(</span><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="mclose">)</span><span class="mpunct">,</span></span></span></span></span>当 <span class="katex--inline"><span class="katex"><span class="katex-mathml">
C
S
⊆
T
⊆
N
S
;
\mathcal{C}_S\subseteq T\subseteq{\mathcal{N}_S};
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.83333em; vertical-align: -0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.05834em;">C</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">⊆</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.8193em; vertical-align: -0.13597em;"></span><span class="mord mathit" style="margin-right: 0.13889em;">T</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">⊆</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.87777em; vertical-align: -0.19444em;"></span><span class="mord"><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.14736em;">N</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span><span class="mpunct">;</span></span></span></span></span></em><br> <em>(b)<span class="katex--inline"><span class="katex"><span class="katex-mathml">
∣
C
S
∣
⩽
K
|\mathcal{C}_S|\leqslant K
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord">∣</span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.05834em;">C</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mord">∣</span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel amsrm">⩽</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.07153em;">K</span></span></span></span></span></em></p>
我们解释下这个定理的含义。(a)如果
C
S
\mathcal{C}_S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.83333em; vertical-align: -0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.05834em;">C</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>中的所有点都被保留,<span class="katex--inline"><span class="katex"><span class="katex-mathml">
f
(
S
)
f(S)
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="mopen">(</span><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="mclose">)</span></span></span></span></span>将不会因为输入的损失而改变;也不会因为<span class="katex--inline"><span class="katex"><span class="katex-mathml">
N
S
\mathcal{N}_S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.83333em; vertical-align: -0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.14736em;">N</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>中的额外噪声点而改变。(b)<span class="katex--inline"><span class="katex"><span class="katex-mathml">
C
S
\mathcal{C}_S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.83333em; vertical-align: -0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.05834em;">C</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>中只包含有限点,由(1)中的<span class="katex--inline"><span class="katex"><span class="katex-mathml">
K
K
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.07153em;">K</span></span></span></span></span>决定。换句话说,<span class="katex--inline"><span class="katex"><span class="katex-mathml">
f
(
S
)
f(S)
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="mopen">(</span><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="mclose">)</span></span></span></span></span>实际上完全由小于或等于<span class="katex--inline"><span class="katex"><span class="katex-mathml">
K
K
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.07153em;">K</span></span></span></span></span>维元素的有限子集<span class="katex--inline"><span class="katex"><span class="katex-mathml">
C
S
⊆
S
\mathcal{C}_S\subseteq S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.83333em; vertical-align: -0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.05834em;">C</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mspace" style="margin-right: 0.277778em;"></span><span class="mrel">⊆</span><span class="mspace" style="margin-right: 0.277778em;"></span></span><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.05764em;">S</span></span></span></span></span>决定。因此我们将<span class="katex--inline"><span class="katex"><span class="katex-mathml">
C
S
\mathcal{C}_S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.83333em; vertical-align: -0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.05834em;">C</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>称作<span class="katex--inline"><span class="katex"><span class="katex-mathml">
S
S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.05764em;">S</span></span></span></span></span>的临界点集,将<span class="katex--inline"><span class="katex"><span class="katex-mathml">
K
K
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.07153em;">K</span></span></span></span></span>称作<span class="katex--inline"><span class="katex"><span class="katex-mathml">
f
f
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.88888em; vertical-align: -0.19444em;"></span><span class="mord mathit" style="margin-right: 0.10764em;">f</span></span></span></span></span>的瓶颈维度。</p>
结合
h
h
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.69444em; vertical-align: 0em;"></span><span class="mord mathit">h</span></span></span></span></span>的连续性,这解释了模型在涉及点扰动、损失和额外噪声点情况下的鲁棒性。类似于机器学习模型中的稀疏性原则,可以得到鲁棒性。**直观上,我们的模型通过学习一组稀疏的关键点来总结一个形状。**在实验中我们可以看到关键点构成了对象的骨架。</p>
实验
实验分为了四个部分。首先,我们展示了PointNets可以应用于多个3D识别任务(5.1节)。其次,我们提供了详细的实验来验证我们的模型设计(5.2节)。最后,我们可视化了模型学习的内容(5.3节),并分析了时间和空间复杂度(5.4节)。
应用
在本节,我们将展示如何训练我们的模型来执行3D对象分类、对象零件分割和语义场景分割。即使我们作用在一份新的数据表示(点集)上,我们也能够在几个任务的基准测试中实现可比较的甚至更好的表现。
3D对象分类 我们的模型学习了可用于对象分类的全局点云特征。我们在ModelNet40形状分类基准上评估了我们的模型。来自40个人造对象类别的12311个CAD模型划分成9843个用于训练,2468个用于测试。当以前的方法关注于体积和多视图图像表示时,我们的模型已经成为第一个直接处理原始点云的方法。
我们的模型在3D输入的深度学习模型中实现了最先进的技术。
我们根据表面区域在网格表面均匀采样1024个点,并把它们标准化为单位球体。在训练期间,我们通过沿着向上轴随意旋转物体并通过具有零均值和0.02标准偏差的高斯噪声抖动每个点的位置来实时增加点云。
在表1中,我们将我们的模型和之前的工作以及我们使用MLP从点云中提取传统特征(点密度、D2、形状轮廓等)的基线进行比较。我们的模型在基于3D输入(体积和点云)的方法中实现了最先进的性能。由于只有全连接层和max pooling层,我们的模型在推理速度上取得了很大的领先优势,而且也能够很容易在CPU上并行。当然,我们的方法和基于多视图的方法(MVCNN)之间仍然存在一点小差距,我们认为这是由于丢失了能够通过渲染图像捕获的精细的几何细节。
3D零件部分分割
零件分割是一项具有挑战性的细粒度3D识别任务。给定3D扫描或网格模型,任务是将零件类别标签(例如,椅子腿,杯柄)分配给每一个点或面。
我们评估了ShapeNet的零件数据集,其中包含16个种类16881个形状,总共注释了50个零件。大部分物体类别标有二到五个零件。表面真实注释标记在形状的采样点上。
我们把零件分割制定为每个点的分类问题。评估指标是点的mIoU。对于类别C中的每一个形状S,计算形状的mIoU:对类别C的每一个零件类型,计算真实值和预测值之间的IoU。如果真实值和预测点的并集是空的,那么将零件IoU计为1。然后我们平均类别C中所有零件类型的IoU来获得形状的mIoU。为了计算该类别的mIoU,我们去该类别中所有形状的mIoU的平均值。
在本节中,我们将我们的分割版本PointNet(图2的修改版本,Segmentation Network)和两种传统的方法进行对比,这两种方法都利用了每个点的几何特征以及形状之间的对应关系,以及我们自己的3D CNN基线。有关3D CNN的详细的修改内容和模型结构,请参阅补充说明。
在表2中,我们报告了每个类别和mIoU(%)的分数。在大多数类别中,我们观察到mIoU改善了2.3%,并且我们的网络打败了基准方法。
我们还对模拟Kinect扫描进行了实验来测试这些理论的鲁棒性。对ShapeNet零件数据集中每个CAD模型,我们使用Blensor Kinect Simulator从六个随机视点生成不完整的点云。我们使用相同网络结构和训练设置在完整形状和部分扫描上训练PointNet。结果表明我们的mIoU仅损失了5.3%。在图3中,我们提供了在完整数据和部分数据上的定性结果。可以看出,虽然部分数据相当具有挑战,但是我们的预测值是合理的。
场景语义分割
零件分割的模型可以很容易扩展到场景语义分割上,其中点的标签变成语义对象类别而不是物体零件标签。
我们在斯坦福3D语义分析数据集上进行实验。该数据集包含来自含有271个房间的6个区域的Matterport扫描仪3D扫描的数据。扫描的每个点都被一个来自13个类别(椅子、桌子、地板、墙等加上杂波)的语义标签所注释。
为了准备训练数据,我们首先按照房间分割点,然后将样本房间分割成1m×1m的区域。我们训练我们的PointNet分割模型来预测在每个区域中的每个点的类别。每个点都由一个9维度的向量表示,包含XYZ、RGB和归一化的房间的位置(从0到1)。在训练时,我们实时从每个区域中取样4096个点。在测试时,我们在所有点上进行测试。我们遵循同样的协议,用k-fold策略来进行训练和测试。
我们将提出的方法与使用手工提取特征的基线进行比较。基线提取相同的9维局部特征和另外三个特征:局部点密度、局部曲率和法线。我们使用标准MLP作为分类器。结果在表3中,其中我们的PointNet方法明显优于基线方法。在图4中,我们展示了定性分割结果。我们的模型能够输出平滑的预测,而且对于缺失点和遮挡具有鲁棒性。
基于我们模型的语义分割输出,我们进一步建立了一个使用连通组件进行对象提议的3D物体检测系统(详见补充)。我们在表4中对比了先前最先进的技术方法。先前的方法基于滑动形状方法(具有CRF后处理),其中SVM在局部几何特征和体素网格中的全局空间的相关特征上训练。我们的方法的性能在家具类别报告中大大超过了它。
结构设计分析
在本节,我们通过对照试验验证我们的设计选择。我们还展示了模型的超参数的影响。
候选次序不变方法的对比
如4.2节所述,至少有三种处理无序输入点集的方法。我们用ModelNet40形状分类问题作为测试平台来对比这些选项,接下来的两个对照试验也会用这个任务。
我们所比较的基线(如图5所示)包括未排序和排序的多层感知机作为
n
×
3
n × 3
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.66666em; vertical-align: -0.08333em;"></span><span class="mord mathit">n</span><span class="mspace" style="margin-right: 0.222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right: 0.222222em;"></span></span><span class="base"><span class="strut" style="height: 0.64444em; vertical-align: 0em;"></span><span class="mord">3</span></span></span></span></span>矩阵以及把输入点看作序列的RNN和基于对称函数的模型。我们实验的对称操作包括max pooling、average pooling和依赖attention的加权和。Attention方法类似于从每个点特征预测一个标量分数,然后通过计算softmax来归一化分数。然后,在归一化分数和点特征上计算加权和。如图5所示,max pooling操作实现了最优的性能且优势很大,这验证了我们的选择。<br> <img src="https://img-blog.csdnimg.cn/20190421151809231.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0JhdEZsb193c2g=,size_16,color_FFFFFF,t_70,#pic_center" alt="在这里插入图片描述"></p>
输入和特征变换的有效性
在表5中我们展示了输入和特征变换(对齐)的积极影响。有趣的是,最基础的结构已经取得了相当合理的结果。使用输入变换可以提高0.8%的性能。正则化损失是高维变换工作所必需的。通过结合变换和正则化项,我们实现了最佳性能。
鲁棒性测试
我们展示了我们的PointNet尽管简单有效,但对各种输入损坏都具有鲁棒性。我们使用和图5中max pooling相同的结构。输入点被归一化为单位球体。结果如图6所示。至于缺失点,当缺失50%的点时,涉及最远和随机输入采样的准确率仅下降2.4%和3.8%。训练时,我们的模型对异常点的鲁棒性也稳健。我们评估了两个模型:一个用点的坐标
(
x
,
y
,
z
)
(x,y,z)
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">(</span><span class="mord mathit">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathit" style="margin-right: 0.03588em;">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathit" style="margin-right: 0.04398em;">z</span><span class="mclose">)</span></span></span></span></span>训练;另一个用<span class="katex--inline"><span class="katex"><span class="katex-mathml">
(
x
,
y
,
z
)
(x,y,z)
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">(</span><span class="mord mathit">x</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathit" style="margin-right: 0.03588em;">y</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord mathit" style="margin-right: 0.04398em;">z</span><span class="mclose">)</span></span></span></span></span>加上点密度来训练。即使是有20%的点都是异常点,模型依旧有超过80%的准确率。图6右侧展示了模型对于点扰动的鲁棒性。<br> <img src="https://img-blog.csdnimg.cn/20190421151734417.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0JhdEZsb193c2g=,size_16,color_FFFFFF,t_70,#pic_center" alt="在这里插入图片描述"></p>
指标是ModelNet40测试集上整体分类的准确率。左:删除点。最远意味着使用最远采样对原始1024个点进行采样。中:插入。异常点均匀地散布在单位球体中。右:扰动。单独给每个点增加高斯噪声。
PointNet可视化
在图7中,我们将关键点集
C
S
\mathcal{C}_S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.83333em; vertical-align: -0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.05834em;">C</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span></em> 和一些样本形状<span class="katex--inline"><span class="katex"><span class="katex-mathml">
S
S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.05764em;">S</span></span></span></span></span>的<em>上限形状 <span class="katex--inline"><span class="katex"><span class="katex-mathml">
N
S
\mathcal{N}_S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.83333em; vertical-align: -0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.14736em;">N</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span></em>(如理论2中讨论那样)的部分结果可视化。两个形状间的点集将给出完全相同的全局形状特征<span class="katex--inline"><span class="katex"><span class="katex-mathml">
f
(
S
)
f(S)
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="mopen">(</span><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="mclose">)</span></span></span></span></span>。</p>
从图7中可以很清楚地看到有助于最大池的特征关键点集
C
S
\mathcal{C}_S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.83333em; vertical-align: -0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.05834em;">C</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span></em> 总结了形状的骨架。<em>上限形状 <span class="katex--inline"><span class="katex"><span class="katex-mathml">
N
S
\mathcal{N}_S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.83333em; vertical-align: -0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.14736em;">N</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span></em> 说明了最大可能的点云,其给出和输入点云<span class="katex--inline"><span class="katex"><span class="katex-mathml">
S
S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.68333em; vertical-align: 0em;"></span><span class="mord mathit" style="margin-right: 0.05764em;">S</span></span></span></span></span>相同的全局形状特征<span class="katex--inline"><span class="katex"><span class="katex-mathml">
f
(
S
)
f(S)
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="mopen">(</span><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="mclose">)</span></span></span></span></span>。<span class="katex--inline"><span class="katex"><span class="katex-mathml">
C
S
\mathcal{C}_S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.83333em; vertical-align: -0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.05834em;">C</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>和<span class="katex--inline"><span class="katex"><span class="katex-mathml">
N
S
\mathcal{N}_S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.83333em; vertical-align: -0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.14736em;">N</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>反映了PointNet的鲁棒性,这意味着丢失一些非关键点不会改变全局形状特征<span class="katex--inline"><span class="katex"><span class="katex-mathml">
f
(
S
)
f(S)
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathit" style="margin-right: 0.10764em;">f</span><span class="mopen">(</span><span class="mord mathit" style="margin-right: 0.05764em;">S</span><span class="mclose">)</span></span></span></span></span>。</p>
N
S
\mathcal{N}_S
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.83333em; vertical-align: -0.15em;"></span><span class="mord"><span class="mord"><span class="mord mathcal" style="margin-right: 0.14736em;">N</span></span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.05764em;">S</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span></span></span></span></span>由通过模型将所有点放入的边长为2的立方体构成,然后选择点<span class="katex--inline"><span class="katex"><span class="katex-mathml">
p
p
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.625em; vertical-align: -0.19444em;"></span><span class="mord mathit">p</span></span></span></span></span>,这些点的函数值<span class="katex--inline"><span class="katex"><span class="katex-mathml">
(
h
1
(
p
)
,
h
2
(
p
)
,
.
.
.
,
h
K
(
p
)
)
(h_1(p),h_2(p),...,h_K(p))
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathit">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">1</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathit">p</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord mathit">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.301108em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathit">p</span><span class="mclose">)</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord">.</span><span class="mord">.</span><span class="mord">.</span><span class="mpunct">,</span><span class="mspace" style="margin-right: 0.166667em;"></span><span class="mord"><span class="mord mathit">h</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height: 0.328331em;"><span class="" style="top: -2.55em; margin-left: 0em; margin-right: 0.05em;"><span class="pstrut" style="height: 2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathit mtight" style="margin-right: 0.07153em;">K</span></span></span></span><span class="vlist-s"></span></span><span class="vlist-r"><span class="vlist" style="height: 0.15em;"><span class=""></span></span></span></span></span></span><span class="mopen">(</span><span class="mord mathit">p</span><span class="mclose">)</span><span class="mclose">)</span></span></span></span></span>不大于全局性状描述符。</p>
时间和空间复杂度分析
表6总结了我们的PointNet分类在空间(模型中参数的数量)和时间(浮点运算/采样)复杂度。我们还将PointNet和先前基于体积和多视图的一组代表性构架进行了对比。
虽然MVCNN和Subvolume(3D CNN)实现了高性能,但是PointNet在计算成本方面的处理效率更高(以FLOPs/sample测量:分别是141倍和8倍)。除此之外,就模型的参数而言,PointNet比MVCNN更具有空间效率(参数减少17倍)。此外,PointNet的可扩展性更高,在输入点数量上实现性的,空间和时间复杂度为
O
(
N
)
O(N)
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 1em; vertical-align: -0.25em;"></span><span class="mord mathit" style="margin-right: 0.02778em;">O</span><span class="mopen">(</span><span class="mord mathit" style="margin-right: 0.10903em;">N</span><span class="mclose">)</span></span></span></span></span>。然而,由于卷积在计算时间上占主导地位,多视图方法的时间复杂度在图像分辨率上笔直地增长,基于体积卷积的方法随着体积大小立方增长。</p>
根据实验,PointNet能够在Tensorflow上用1080X GPU处理每秒超过一百万个点的点云分类(大约1K对象/秒)或语义分割(大约2房间/秒),显示出实施应用的巨大潜力。
结论
在这项工作中,我们提出了一种直接处理点云的新型深度神经网络PointNet。我们的模型对包括物体分类、零件分割和场景分割在内的一系列3D识别任务提供了统一的方法,同时在标准基准测试中获得了与现有技术相当或更好的结果。我们还提供了理论分析和可视化,以理解我们的模型。
日更待续
.
.
.
...
</span><span class="katex-html"><span class="base"><span class="strut" style="height: 0.10556em; vertical-align: 0em;"></span><span class="mord">.</span><span class="mord">.</span><span class="mord">.</span></span></span></span></span></p>
</div><div data-report-view="{"mod":"1585297308_001","dest":"https://blog.csdn.net/BatFlo_wsh/article/details/89330195","extend1":"pc","ab":"new"}"><div></div></div>
<link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-d7a94ec6ab.css" rel="stylesheet">
<link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-f1c5feb645.css" rel="stylesheet">
</div>