3D目标检测学习笔记
开始正式进入3D目标检测的学习!!!
1、点云数据
无序性:只是点而已,排列顺序不影响
近密远疏
非结构化数据,直接CNN有点难
2、PointNet
CVPR2017
Pointnet的出发点
1、由于点的无序性导致,需要模型具有置换不变性
求一堆点的最大值, 使用max()方式可以体现置换不变性
直接使用Max()函数求最大值,简单粗暴,损失太多的特征
可以先进行升维,然后再做Max()操作
基本模型架构
核心思想:分别对每个点进行特征提取(卷积或者全连接层),再max得到全局进行输出
利用mlp多层感知机进行升维,然后max,最后再通过一个mlp完成分类任务
pointnet网络结构
模型整体结构比较简单,
存在问题:
没有局部特征融合,要不就自己,要么就一个整体
没有关系概念,局部样本点之间存在的关系,没有考虑到
PointNet++
基本出发点
基于半径选择局部区域,得到很多簇
针对得到每个区域进行特征提取(区域就可以联系到卷积)
因此pointnet++的主要问题:如何选择区域?每个簇的半径大小如何定义?每个簇选择多少个样本点?
1、选择一个区域
对一个区域分别提取特征,也就说对每一个划分好的区域,使用pointnet,提取特征。
2、最远点采样farthest point sampling
这里的点是指每个簇的中心点。第一个点随机选,第二点距离第一个点最远,第三个点就是距离第一个和第二个最近的距离中最远的点,总之就是为了保证每个点最远。最远点采样,保证可以覆盖到整体
3、分组grouping
例如输入的数据是 batch10246
各个簇里面的点可能不一样
因此,为了保证每个簇里面的点保持一致,对每个簇里面的点进行复制,选择距离簇中心最近的点进行复制、如果点比较多的,就把距离比较远的点给去掉
。输出的维度就变成batch12816*6
每一个簇的半径的选择也是一个问题
pointnet++中使用了不同的半径(三个)的簇进行分组,然后进行拼接在一起。
对各组簇进行特征提取
分类网络架构
先进行最远点采样、分组,然后使用pointnet ,继续上面的步骤,最后的得到的特征经过全连接层输出结果
分割网络结构
分割网络结构和分类不同的是,是对每一个点进行的分类任务
上采样进行插值的时候,根据点之间的距离,添加了一些权重。
整体结构有点类似unet结构
pointnet++遇到的问题:
容易受到样本点个数的影响
改进的设计
多半径进行特征拼接 MSG或者跨层MRG来提取不同的分辨率特征