输入:一帧的全部点云数据的集合,表示一个nx3的二维张量
其中,n为点云数量,3表示xyz坐标
实现流程图:
1、输入数据首先与T-net学习到的转换矩阵相乘,来对齐(得到想要的输出格式),保证了模型的对特定空间转换的不变性(指的是点云数据所代表的目标对某些空间转换应该具有不变性,如旋转和平移等刚体变换)。
如何实现对齐:
通过训练一个小型的网络(也就是上图中的T-Net)来得到转换矩阵,并将之和输入点云数据相乘来实现。
得到对齐矩阵后:
input transform矩阵的获取还是比较简单,这么一套操作下来,这个 input transform矩阵就不是固定的了,它会根据网络的输入动态调整矩阵的权重。
理解转换矩阵就是可变参数 input transform,根据网络输入调整权重,调整输入
2、通过多个mlp对各点云数据进行特征提取后,再用一个T-net对特征进行对齐。
3、在特征的各个维度上执行maxpooling操作来得到最终的全局特征。
4、对分类任务,将全局特征通过mlp来预测最后的分类分数;对分割任务,将全局特征和之前学习到的各点云的局部特征进行串联,再通过mlp得到每个数据点的分类结果。
分割任务(1088=1024+64)
torch.eye:正交矩阵
返回值是【1 0 0;0 1 0;0 0 1】
参考文献:【3D视觉】PointNet和PointNet++ - 知乎 (zhihu.com)
PointNet这篇文章中确实没有做到像CNN那样逐层提取局部特征。我们知道在CNN中,一个点会与周围若干点进行加权求和(具体取决于卷积核大小),然后获取一个新的点,随着网络层数加深,深层网络的一个点对应原始图像的一个映射区域,这就是感受野的概念。但是本文做的特征提取都是点之间独立进行的,这势必会造成一些问题,至于具体的问题解决,作者在PointNet++展开了说明。
pointnet++
是在没有提取局部特征前提下,导致模型泛化能力有限(尤其是在复杂场景下)
在pointnet++文章中,针对三个问题,提出了三种解决方法
问题1 : 点云图数据量大,点云很多,导致计算量过大从而限制模型的使用,如何解决?
从所有点云数据中采样指定数量的点,希望这些指定数量的点能够包含尽可能多的有用信息。
提出了farthest point sampling (FPS) algorithm,中文翻译就是最远点采样算法来实现从N个点中采样 N’个点。
算法流程:
(1)随机选择一个点作为初始点作为已选择采样点;
(2)计算未选择采样点集中每个点与已选择采样点集之间的距离distance,将距离最大的那个点加入已选择采样点集,
(3)更新distance,一直循环迭代下去,直至获得了目标数量的采样点。
问题2:如何将点集划分为不同的区域,并获取不同区域的局部特征?
上面已经对原始点云数据进行了最远点采样,降低了数据的冗余度,减少了PointNet++模型的输入大小,但是并未进行局部特征的提取。
换言之:作者想三维卷积
如何实现三维卷积呢?
(1)预设搜索区域的半径R与子区域的点数K
(2)类似三维的kmeans算法
问题:什么是重采样?
至此,作者介绍了如何像CNN那样,实现子区域的定义,进而实现局部特征的提取。
采样层Sampling layer
输入:Nx(d+C)
其中:N是点云数据的数据点数量
d为xyz坐标(三维)
C是点上的特征(用来形容点的属性的,一般为0),输出:N'x(d+c)
其中N’表示通过最远点采样算法后获得的采样点(筛选后)
组层Grouping layer
输入:Nx(d+C)
输出:N'xKx(d+C)
其中K为根据N'(FPS选择的点围起来的区域内的点的个数)
获得N个子区域后,每个子区域怎么进行区域特征提取呢?
pointnet结构如下:
很明显融合局部信息的并不是加权求和,而是max pool。作者通过不断的Sample layer/Grounping layer/Pointnet(三个合在一起叫做set abstraction),类似于CNN中不断堆叠卷积层,实现了对局部特征不断的提取。
问题3:点云不均匀的时候,在密集区域学习出来的特征可能不适合稀疏区域,这个问题应该如何解决?
于是作者提出了两种特征融合方式,分别为
(1)Multi-scale grouping (MSG);
(2)Multiresolution grouping (MRG).
对于MSG而言,是对不同半径的子区域进行特征提取后,再进行特征堆叠,特征提取过程还是Pointnet结构
代码理解:
xyz: pointcloud data, [B, N, 3]
B:Batchsize
N:N指的是所有点的数量,3表示xyz
npoints:采样点的数量
创新点总结归纳
1、损失函数改进
2、注意力机制
自注意力机制,交叉注意力机制,混合注意力机制,通道注意力机制(注重特征之间的交互,类似哈希表,transformer qkv查询机构等等)
3、数据增强(前处理)
mixup,翻转,copy paste 等增加数据量
多源数据融合(红外+原始图像)
4、卷积模块、功能模块、激活函数等替换(传统的)
卷积(级联、并行,插入、跳跃(捷径分支),堆叠,残差结构,简化、交互)
5、网络的更改
(1)检测头(分类,回归等)
(2)骨干网络的替换
(3)pannet层的替换(多尺度融合、跳跃尺度融合,交叉融合)
6、数据处理
(1)利用更好的方式提取特征,处理数据特征
一个功能模块(有多个参数调节),例如采样中就存在6种方式
(2)投影(图像-点云),(点云-图像),两者结合
7、训练策略改进
(1)优化器
(2)数据增强
(3)学习率