论文:Point-Voxel CNN for Efficient 3D Deep Learning
代码:code
来源: NeurIPS2019
单位:麻省理工 上海交大
前言
目前我自己在做点云的时候大多数关注直接在点上处理的方法,忽略了一些voxel的方法。这篇文章对voxel-based和point-based的方法优缺点作了分析,并结合两者的优势中和提出了一种结合的方法。文章的idea还是比较简单好理解的,代码也不是很复杂。但文章写的很有逻辑性,甚至我觉得这篇文章对问题的总结,前面的综述,比后边的实验要阐释得更精彩。
第一部分:引言
介绍了点云领域两种常用的方法:传统的voxel-based 和新型的point-based
传统的voxel-based方法特点:
划分网格:网格划分得细精度高,但是耗内存(三倍增长);网格划分得粗精度低(存在一些点划分到同一个网格里的情况),但是可以不用消耗太多内存
总体优势:规整,方便3D卷积
总体缺点:浪费空间,存在冗余信息(稀疏部分)和信息的丢失(密集部分)
新型的point-based方法特点
对存在的点进行卷积,即不多卷也不少卷,不存在空间的浪费和信息的丢失
缺点:需要找邻点 ,即需要进行随机内存访问random memory access
这里作者为了阐释这两种方法的优缺点,对根本的代码底层的实现方式进行了解析(虽然我还没怎么理解,但是对比其他论文直接上结论比较时间和内存占用的结果,这里文章对通用的原理进行了阐释,这一部分很有说服力)
图a比较的是占用了过多内存对能量和带宽的消耗。算术运算(加和乘,如a左)能量消耗低,带宽高,对内存的访问(如a右)能量消耗大,带宽利用小,因此尽量减少内存的消耗
图b比较的是随机内存访问的时间消耗,有总线冲突,会浪费等待的时间(这一块我也不太明白,所以略)
第二部分:以往工作
略
第三部分:动机
voxel 方法的对内存占用和精度的trande-off图:
point方法:不规则的内存访问和动态内核开销和其他运算的占比
这里我们的方法>90%的时间都用在了实际计算上,而其他的方法把运算时间浪费了30-50%在随机内存访问和2-50%在动态内核上
第四部分:方法
两个分支:
- voxel分支用低精度的体素网格(内存占用低)
- point分支用最简单的MLP(pointNet),不找邻点和进行核点卷积
关键:
- Devoxelization部分用三线性插值,即点所在周围体素的距离加权
- fuse的部分直接进行特征相加
第五部分:实验
Object Part Segmentation
Indoor Scene Segmentation
3D Object Detection
性能保持甚至有提升,但是运行时间和内存占用得到了大的改善!