论文解读PCT: Point Cloud Transformer(用于点云处理的Transformer)

        最近几年transformer越来越火,在NLP、CV等领域都取得了很大的成功。这篇文章作者利用了transformer能够处理无序数据的特点,将transformer应用到点云的处理上。它的想法是基于最原始的transformer那篇文章(Attention Is All Your Need),关于那篇文章的解读可以参考:庖丁解牛Transformer原理。

        论文的整体架构如下图1所示,整体上跟pointnet那篇差不多(左边是一个encoder结构,右边是一个decoder),不同的地方主要在于encoder。对于encoder点云数据先经过一个Input Embedding模块,然后通过一系列的Attention模块并且cat每个模块的输出,最后再经过一个全连接层得到点云的特征。对于decoder来说,根据task不同其结构不同,其结构跟pointnet那篇基本上一样,所以这里不做介绍。

论文解读PCT: Point Cloud Transformer(用于点云处理的Transformer)_第1张图片

图1 PCT整体架构

        下面再来看看作者是怎么设计encoder的,根据网络结构由简入繁,作者把encoder分为三个版本:NPCT(Naive PCT)、SPCT(Simple PCT)、PCT。

 一、NPCT

        也就是直接把transformer的self-attention结构直接套进来,即直接替换图1里面的Attention模块,然后Input Embedding模块就是简单的两层LBR(point embedding)。self-attention模块结构如下图2所示(开关处为虚线连接)。

论文解读PCT: Point Cloud Transformer(用于点云处理的Transformer)_第2张图片

 图2 Attention结构

二、SPCT

        更进一步地,将NPCT结构里面的SA(Self-Attention)改变为OA(Offset-Attention),OA的结构如图2所示(开关处为实线连接),OA只是在SA的基础上做了两个调整。第一个调整是attention之后的features与输入features做了一个element-wise的差值(Offset)(图2中的第二个开关),作者说这是启发于图卷积里面受益于拉普拉斯矩阵L=D-E替代了邻接矩阵,这里D表示度矩阵,我们知道在GNN里面这种调整之后网络不只是聚合了节点附近的邻接信息,并且还可以把节点自身的信息也考虑进去,作者这样调整之后发现网络确实表现的更好;为什么做了一个element-wise的差值之后就可以有拉普拉斯矩阵的效果呢?作者在这里给出了一个推导过程

论文解读PCT: Point Cloud Transformer(用于点云处理的Transformer)_第3张图片

F_in表示输入的features,F_sa表示attention之后的features,A表示attention map,V表示value矩阵,W_v表示一个线性层,I表示单位矩阵。

        第二个改变就是在normalization这一步(图2中的第一个开关),在原始的transformer为了计算attention map的时候为了防止softmax输入数值过大导致梯度消失会先经过scale,而作者把这个scale去掉了,直接softmax得到attention map,然后在第二个维度上做一个L1归一化。作者说这样做之后能让attention weights更加集中(估计意思是让网络将更多的注意力集中到点云的局部区域),并且能减少噪声的干扰。但是我有个疑问,这样直接softmax不会导致梯度消失吗,我的猜想是紧接后面的L1归一化能抑制后续softmax前过大的数值。

三、PCT

        进一步地,在SPCT基础上作者改进了Input Embedding模块。前面的point embedding只擅长学习点云的全局特征,容易忽略点云局部信息,因此作者想设计出像PointNet++和DGCNN那样能有局部信息聚合策略的网络,提出了neighbor embedding,网络结构如下图3所示。

论文解读PCT: Point Cloud Transformer(用于点云处理的Transformer)_第4张图片

图3 neigbor embedding结构

        先看图3左边部分,这是Input Embedding的整体架构,前面就是两个全连接层,后面接了两个SG(sampling and grouping)模块,SG模块既可以对特征进行下采样,又可以聚合领域信息。图3右边部分是SG模块的具体结构,首先对输入特征进行下采样,并且通过最近邻算法找出每个采样点的k领域,然后对于每个领域中的点都要跟采样点做一个差值,然后将这个差值跟采样点cat起来通过两层全连接层,最后通过max池化得到每个采样区域的局部特征。至于将这个差值跟采样点cat起来的原因作者说是借鉴EdgeConv的思想,虽然EdgeConv这篇文章我还没有读,但是我估计这个差值代表了局部区域的一些几何信息(类似于拉普拉斯坐标),而采样点代表了这个局部区域的中心点(也就是这个局部区域的空间位置),这样将这两种信息cat之后就能让网络在后续更容易地进一步聚合局部信息。

四、实验

        作者在分类、点云法向量估计、点云分割的任务上进行了实验,在这三个任务上PCT均获得了state-of-the-art的效果,简化版本的NPCT和SPCT也能获得不错的效果。而网络大小和计算性能上的表现的话也是比之前的一些baseline要好些的。另外作者说如果只是想单纯的提升网络的效果的话可以增加neighbor embedding的层数。

论文解读PCT: Point Cloud Transformer(用于点云处理的Transformer)_第5张图片

 

 

你可能感兴趣的:(transformer,自然语言处理,点云处理)