【学习笔记】VoxelNet
1.1 VOXEL
- 设置Voxelization参数(每个voxel可以存放点的个数max_points_number,voxel长宽高的大小W,H,L)
- 对依次每一个点,根据其对应的坐标(x,y,z)得到该点在voxel的索引。
- 根据索引判断该voxel中是否已经存在max_points_number个点,如果存在,则将该点直接丢弃,如果不满足,则将该点加入到该voxel中。
- 计算voxel特征
1.2 VOXEL使用MLP特征提取
- 根据voxel中的point特取得到voxel特征,进一步提取到更加全局的特征。
- 对voxel中的点采用几层全连接层将voxel中的Point信息映射到高维,最后再在每个特征维度上使用maxpooling得到voxel的特征。3DCNN是对这样一个(H,W,L,C)的四维张量做3D空间中的卷积。
- 经过4次步长为2的卷积,再加一次额外的高度维的步长为2的卷积后得到了中间图的三维feature map,将高度维的特征直接压缩到特征维中,变成了二维的featuremap。此后就可以采用二维RPN(区域生成网络RegionProposal Network) 网络结构对三维物体进行目标检测。
- 也可以采用均值特征,将voxel的point的特征(坐标+反射强度)直接取平均。
1.3 问题
- 卷积核为三维,参数量巨大,可能不好学习或者导致过拟合。
- 含有很多空的voxel,卷积过程将其特征填充为0,占显存,时间效率低。
解决办法:稀疏卷积,只对含有点的voxel做卷积输入。
具体:先将原始空间中的非空的voxel的空间索引记录起来,将其特征排成一列map,卷积操作通过计算索引完成,最终的结果仅在二维中通过索引计算得到。将final-feature-map通过最终的空间索引还原成voxel表达。和上面一样将H层直接压缩到特征。
- backbone特征提取实际上是逐渐将H维度降低为2,最后再压缩为1,如何更好的利用点云的整体信息
- 空的voxel虽然对3D CNN是一种显存的损失,但维持了三维物体的几何结构,经过Backbone的CNN过程,会导致原本是空的voxel变得有信息,从而丢失了几何结构信息。