SASSD是用于点云三维目标检测模型算法,发表在CVPR 2020《Structure Aware Single-stage 3D Object Detection from Point Cloud》,论文地址为“https://www4.comp.polyu.edu.hk/~cslzhang/paper/SA-SSD.pdf”。SASSD与基于Anchor的目标检测模型的结构基本保持一致,其核心特点在于采用了一个语义分割网络来辅助候选框特征提取,使产生的候选框质量更高。辅助网络这一点与PointRCNN和VoteNet的部分思想很接近。不同之处在于,SASSD提取体素中心点特征时融合了不同尺度下近邻体素的特征,从而使得网络可以有效获取到局部结构特征(Structure Aware)。另一方面,这个辅助网络仅在训练时用到,在推理时则完全拆解下来,从而使得模型在实际部署过程种不增加额外开销。因此,SASSD辅助网络的作用在于提高模型训练精度。
1 源码与输入数据
源码采用的是mmdetection3d框架中的SASSD模型。mmdetection3d安装和调试验证可参考本博客之前的专栏【mmdetection3d】mmdetection3d安装详细步骤_Coding的叶子的博客-CSDN博客_mmdetection3d安装,里面有详细介绍。
数据采用的是kitti,为了快速进行算法调试、训练、评估和验证,以及快速下载,我制作了一个mini kitti数据集,数据集的文件目录结构与完整KITTI数据集保持一致。其中,小型的KITTI数据集,即 mini kitti保存了20个训练样本和5个测试样本。下载地址为:minikitti数据集-深度学习文档类资源-CSDN下载。
下载的数据包含4个部分,即激光雷达数据velodyne、图像数据image_2、校准数据calib和标注数据label_2。如果需要对应的ImageSets,请下载:train_val_testforminikitti-深度学习文档类资源-CSDN下载,将下载的文件夹重名为ImageSets即可。
关于KITTI各个部分的介绍请分别参考以下内容:
KITTI数据集简介(一) — 激光雷达数据_Coding的叶子的博客-CSDN博客_雷达数据集
KITTI数据集简介(二) — 标注数据label_2_Coding的叶子的博客-CSDN博客_kitti数据集标注
KITTI数据集简介(三) — 图像数据image_2_Coding的叶子的博客-CSDN博客
KITTI数据集简介(四) — 图像数据calib_Coding的叶子的博客-CSDN博客
数据预处理部分可以参考Voxelnet的数据处理方式加以理解:【三维目标检测】VoxelNet(二):数据处理_Coding的叶子的博客-CSDN博客。
下载后直接将数据保存在mmdetection 3工程所在目录的data文件夹下,目录结构如下图所示,然后执行下文第2节中的kitti数据预处理命令。
2 mmdetection3d kitti数据处理与模型训练
mmdetection3d kitti (持续更新)_Coding的叶子的博客-CSDN博客
python tools/create_data.py kitti --root-path ./data/kitti --out-dir ./data/kitti --extra-tag kitti
3 源码运行调试
mmdetection3d的SASSD源码运行命令如下:
python tools/train.py configs/sassd/sassd_6x8_80e_kitti-3d-3class.py
3.1 稀疏卷积版本
SASSD采用了稀疏卷积,需要安装spconv 2.0库。安装方式如下,其中102表示cuda版本为10.2,且最低支持CUDA 10.2。
pip install cumm-cu102
pip install spconv-cu102
如果没有安装spconv 2.0则有可能报如下错误:
(1)RuntimeError: /tmp/mmcv/mmcv/ops/csrc/pytorch/cuda/sparse_indice.cu 123。
(2)RuntimeError: indices must be contiguous。
3.2 标签处理
由于程序运行采用了上述Mini Kitti数据集,并且模型将检测行人、汽车和骑手三类目标,但是训练样本种几乎不含骑手这一目标,直接运行程序可能会报以下错误:
(1)KeyError: 'KittiDataset: \'ObjectSample: "DataBaseSampler: \\\'Cyclist\\\'"\''
(2)ValueError: need at least one array to stack
为了让样本种含有骑手这一目标,可在data/kitti/label_2文件夹下,将几个标注文件的部分行人或汽车标签改成骑手(Cyclist)。改完之后程序即可正常运行。
4 SASSD简介
SASSD模型的整体结构如下图所示。SASSD与基于Anchor的目标检测模型的结构基本保持一致,其核心特点在于采用了一个类似语义分割的辅助网络(Auxiliary Network)来学习区分前景点和背景点,从而辅助候选框特征提取,使产生的候选框质量更高。辅助网络这一点与PointRCNN和VoteNet的部分思想很接近。不同之处在于,SASSD提取体素中心点特征时融合了不同尺度下近邻体素的特征,从而使得网络可以有效获取到局部结构特征(Structure Aware)。另一方面,这个辅助网络仅在训练时用到,在推理时则完全拆解下来,从而使得模型在实际部署过程种不增加额外开销。因此,SASSD辅助网络的作用在于提高模型训练精度。
5 模型结构与代码详解
模型详细结构及推理过程请参考下一篇博客:预计本周内更新。