论文地址:PointNet网络
代码地址:https://github.com/charlesq34/pointnet
windows10环境配置可参考这篇文章:windows下运行pointnet(全)
一、 网络结构
下图是网络的整体结构(分类和分割网络),其中蓝色框是:分类网络,黄色框是分割网络。
1、下载数据集
主要讲解部件分割,所以这里先提供Part Segmentation所需要的数据集:
1)训练集:
数据下载:h5文件(HDF5_data)
存放位置:…\part_seg\hdf5_data
2)测试集:
数据下载:PartAnnotation(注意该链接中对应的数据集有两部分,因此下载时两部分务必都要下载)
存放位置:…/part_seg/PartAnnotation。
HDF5文件解压放在pointnet-master/part_seg/hdf5_data。
2、网络简单解析
1)基本出发点
问题: 为什么要使用mlp进行升维处理?
回答:直接用max函数(简单粗暴,不可采取)
如上图所示:假设该点云输入为(2048,3),其中2048表示点云数量,3表示维度(x,y,z)。倘若三维的点云经过max处理后,即所有点取每个维度处的最大值,最终会得到一个三维点云(2,3,4),如果要对该三维物体分类成10个类别,则参数不够,无法进行处理,因此需要升维处理后再做Max操作(其实就是神经网络的隐层)。
2)基本模型架构
假设三维点云为(2048,3),在进行分割或分类时,先分别对每个点通过上图的蓝色背景MLP函数(h函数)进行特征提取(卷积或者全连接),将feature map通过MAX得到global feature,再通过mlp进行输出,公式如下所示:
3、存在的挑战
点云的几个特点:
1.无序性 --> 对称函数设计用于表征
2.点不是孤立的,需要考虑局部结构 --> 局部全局特征结合
3.放射变换无关性 --> alignment network
4、贡献
PointNet之所以影响力巨大,并不仅仅是因为它是第一篇,更重要的是它的网络很简洁(简洁中蕴含了大量的工作来探寻出简洁这条路)却非常的work,这也就使得它能够成为一个工具,一个为点云表征的encoder工具,应用到更广阔的点云处理任务中。
MLP+max pooling竟然就击败了众多SOTA,令人惊讶。另外PointNet在众多细节设计也都进行了理论分析和消融实验验证,保证了严谨性,这也为PointNet后面能够大规模被应用提供了支持