概述
这是一篇做单模态3D无监督预训练的文章,这篇文章的动机是要通过无监督的方法训练一个3D模型,使模型获得理解3D点云数据的能力。本片文章是亚马逊人工智能实验室发表在NeurlPS 2022的文章。点击论文下载原文。
贡献
本文在训练3D模型时,考虑了从本地信息和全局信息两个层面。
- 本文提出了利用本地区域信息来进行自监督学习的方法
- 在全局知识的学习中,作者设计了一个新的基于区域特征聚类的对比学习损失函数
方法
本文的网络结构图如下:
正如图上所示,文章主要的脉络结构可以分为以下几点:
- 将大规模点云数据在笛卡尔坐标系下分割成M个存在重叠的区间(volume),本文所有的特征表示都是基于volume的。
- 搭建一个双分支的网络,一个特征提取器,一个动量特征提取器,backbone都为PointNet++。
- 两分支的网络输入是经过不同方式数据增强后的原始点云,其中第一分支数据增强中裁剪比例较高,第二分支裁剪比例较小。图上仅仅是用一个volume来可视化两分支数据增强的差异。
- 两网络分支最终输出的都是基于volume的特征图,即MxD大小的矩阵,M是M个volume,D是每个特征向量的维度。
- 在得到两分支的特征图后,作者设计了两个优化目标(损失函数),一个是学习本地信息的本地对抗损失,另一个是学习全局信息的对抗损失。
本地对抗损失
本地对抗损失沿用经常使用的交叉熵损失PointInfoNCE,只是本文将损失函数里point的特征换成了volume的特征:
该损失函数的原理是讲拉近两分支同一volume(正样本)的特征距离,拉远两分支不同volume(负样本)间的特征距离,是非常常见的交叉熵损失的使用方式。这个损失函数中包含的volume特征对抗是局限在batch范围内,这也是损失函数叫“本地”的原因。
全局对抗损失
为了弥补本地对抗损失在选取负样本范围上的局限性,作者又提出了基于volume的全局对抗损失。所谓“全局”是指在负样本的选择上扩展到了若干个batch中的样本,其主要的实现方式为创建并维护一个全局volume特征队列Fg(大小C=300,000)用于存储网络输出的每个batch的特征。前面设计的主干网络对于输入的样本会输出volume级的D维特征向量,在全局对抗训练中会对这些特征进行聚类,不同于传统的K-means和DBSCAN聚类方法,本文在网络后添加一个分类层hg:RD->RK,该分类层将一个D维的特征向量处理成K(类别数量)维的类别置信度,经分类层便可以将MxD大小的特征图矩阵转成MxK大小的置信度矩阵(再经过softmax归一化)。
损失的具体设计是,对于双分支的特征输出(MxD)f1,f2以及特征队列Fg,将f2和Fg(CxD)分别输入到分类层hg中得到f2每个volume的置信度向量(也就得到了伪标签,维度MxK)和特征队列的伪标签(维度CxK),通过空间对应关系,利用f2的M个volume的标签给f1的M个volume赋予相同的标签。具体的聚类对抗损失函数(全局损失函数)为:
式中的K为聚类的类别数量(也是分类层的神经元数量),式中的i和j代表不同的类别,在负样本上(分母)从全局特征队列Fg选择与正样本类别i不同的类别j(j代表若干个与i不同的值)的若干(20,000)特征向量,正样本(分子)则是在Fg中选择与正样本fi2最相似的特征向量(文章中的说法是进行k=1的kNN采样)。难于理解的一点是式中i和j都是代表类别,然而在fi1火种fi2中都包含了不止一个第i个类别的volume,依据原文的意思,这个fi2是从f2所有属于i这个类别的volume中选取出来的一个volume,但怎么选的原文似乎没提。