Paper name
SemanticKITTI: A Dataset for Semantic Scene Understanding of LiDAR Sequences
Paper Reading Note
URL: https://arxiv.org/pdf/1904.01416.pdf
TL;DR
- 2019 ICCV 论文,提出了一个大规模的真实场景 LiDAR 点云标注数据集 SemanticKITTI,标注 28 类语义,共 22 个 sequences,43000 scans
Introduction
背景
- 基于 LiDAR 的语义分割数据集对于 3d 语义场景理解至关重要,而 3d 语义场景理解有助于帮助自动驾驶识别可行驶区域和非可行驶区域(比如停车区域与人行道)
- 目前基于视觉的语义分割数据集较多,然而基于 LiDAR 的语义分割数据集一般数量级都很小
- 本文提出一个大规模的 LiDAR 点云标注数据集 SemanticKITTI,标注 28 类语义,共 22 个 sequences,43000 scans
- 文章主要贡献
- 提出了一个点云序列的逐点注释数据集
- 支持对点云语义分割(semantic segmentation)的 SOTA 方法进行评估
- 使用多次扫描来研究序列信息在语义分割中的应用
- 基于移动汽车序列的注释,进一步引入了用于语义场景完成(semantic scene completion)的真实世界数据集,并提供了 baseline 效果
- 开源了点云标注工具
- 提供了 benchmark 评测网站
Dataset/Algorithm/Model/Experiment Detail
数据标注
整体概述
- 在 KITTI odometry 数据集基础上进行标注,训练集与测试集划分与之前一致:00-10 训练、11-21 测试
- 雷达型号: Velodyne HDL64E
- 与 Paris-Lille-3D、Wachtberg 等点云数据集关系:
- 这两个数据集也使用 Velodyne HDL64E 雷达,但分别仅提供整个采集序列的聚集点云或整个序列的一些单独扫描。本文提供了整个序列的单个扫描,还可以研究聚合多个连续扫描如何影响语义分割的性能,并使用这些信息来识别移动对象。
- 标注的类别:
- 与 Cityscapes、Mapillary Vistas 基本接近,不过考虑到点云的稀疏性与垂直视野,标注不区分乘坐车辆的人和车辆,而是将车辆和人员标记为骑自行车或骑摩托车的人
- 区分运动与非运动行人与车辆,一共标注 28 类,其中 6 类被额外标注了运动或静止属性,另外有一类异常值类别表示由反射或者其他引起错误激光测量的点
- 数据类别分布情况,其中 car、truck、other vehicle、person、bicyclist、motorcyclist 带有是否运动属性,可以看到车中静止的物体偏多,人是运动的更多
标注流程细节
- 为了使点云序列的标记切实可行,将多个扫描叠加在彼此之上,这反过来允许一致地标记多个扫描
- 使用现成的 laser-based SLAM 算法生成汽车运动轨迹,有三个 sequences 数据集需要手动增加回环约束才能得到正确的轨迹
- 基于上述产生的 pose 来将将多帧 scan 聚合到同一个位置上;多个 scan 聚合后的图中的运动车辆会有一个行驶轨迹显现出来
- 将点云序列细分为 100m 的片段进行标注,这能保证所有扫描之间的标注一致性;同时,为了保证不同片段之间重叠区域的标注一致性,标注工具将会显示相邻片段的重叠的小边界,从而可以从相邻的区域继续标注
- 每个 100m 片段的标注时间平均是:住宅区 4.5 h,高速 1.5 h
- 整个数据集中的片段数为 518,超过 1400 h 的标注才完成,包含交叉验证等时间后总标注耗时是 1700 h
语义分割评测
- 算法输入为一个扫描周期的 LiDAR 点云,算法输出是每个点的类别
- 评测指标 mIoU,排除 outlier, other-structure, and other-object 这三个类别(因为这些类别点不多或与另一个类别分布交叉严重)
baseline 方法(6个baseline 方法)
-
点云网络类别
- Voxel-based:将点云转换为 voxel-grid,然后基于 3d conv 做语义分割
- 优点:能够利用到图像领域中的结构设计经验
- 缺点:随着 voxel grid 增加内存占用显著变大
- Point-based
- 传统方案:Conditional Random Fields (CRF) 等
- Voxel-based:将点云转换为 voxel-grid,然后基于 3d conv 做语义分割
-
PointNet、PointNet++
- 使用原始点云作为输入,这些方法的核心是 max pooling 来获得顺序不变的性质,使得在形状的语义分割上效果较好;其中 PointNet 无法获取特征之间的空间关系,PointNet++ 在局部领域内使用 PointNet,使用级联的方式汇总局部特征,使得能提取局部细粒度特征与全局上下文信息
-
Tangent Convolutions
- 直接在曲面上应用卷积神经网络处理非结构化点云
-
SPLATNet
- 与 voxel-based 方法类似,将点云转换为高维稀疏格(sparse lattice),缓解显存和计算量的消耗,然后使用 bilateral convolutions 来提取特征(仅对占用区域的 lattice 进行操作)
-
Superpoint Graph
- 与 PointNet 类似,将几何一致的点云聚合为 superpoints 后送入 PointNet 提取特征,得到的特征更紧凑且语义信息更丰富
-
SqueezeSeg
- 利用 LiDAR 的外参将点云离散化(球面投影)从而可以用 2d conv 提取特征;全卷积 + CRF 获得平滑的预测结果
-
上述方法的精度与计算量等信息对比:基于投影的方法比 point-based 高;其中 SqueezeSeg 作者认为 backbone 容量较小导致精度低,替换 backbone 为 DarkNet21 和 DarkNet53 后涨点幅度很大(29.5->47.4/49.9)
-
点稀疏时效果一般不好,一般距离 sensor 更远的区域点更稀疏,其中 SPGraph 受到稀疏的影响较小
- 多 scan 实验:利用当前的时间 t 帧 scan 与之前帧 t-1,…,t-4 帧 scan 作为输入,输出当前时间 t 帧的分割结果
语义场景完成(SSC)评测
- SSC:基于之前帧的 LiDAR 输入补全场景中的缺失 3d 信息,因为存在遮挡,需要模型有脑补能力
- 数据生成:
- 通过叠加未来帧的 LiDAR 点云可以得到当前帧的监督 GT
- 使用体素来表达 3d 场景:0.2m分辨率,范围为 51.2mx51.2mx6.4m,体素大小为 256x256x32,每个体素的类别为该体素内雷达点最多的类别
- 为了计算哪些体素属于遮挡空间,通过跟踪光线来检查汽车的每个 pose,哪些体素对传感器可见。一些体素,例如物体内部或墙后的体素永远不可见,因此在训练和评估期间忽略它们
- 19130 train;815 val;3992 test
- 评测指标
- SC IoU:是否占用的分类
- SSC mIoU:语义分类
Baseline 方法
-
SSCNet:去除 flipped TSDF 后训练时间变快且精度基本一致
-
TS3D:two stream 方法,除了 LiDAR 输入额外利用 RGB 输入,先用 2d 分割网络(DeepLabv2)处理 RGB 输入,将图像的类别和 LiDAR 信息在 early stage 进行融合
-
TSDF+DarkNet53Seg:使用 lidar 分割结果替换 rgb 分割
-
TSDF+DarkNet53Seg + SATNet:将 3d cnn backbone 替换为 SATNet
-
baseline 结果如下:
-
基于 LiDAR 点云进行 SSC 的两个难点
- 体素占用内存大,训练测试需要采用分块策略
- 远处 LiDAR 点云稀疏,需要结合图像输入信息解决
Thoughts
- 提出了一个真实场景下的点云语义分割和场景语义补全数据集,并且提出了相应的 baseline,具有重要价值
- 使用纯图像输入的 ppl 可以参考 monoscene
- 没有 instance 的 seg 标注及不同 scan 上的物体 id 标注对于一些时序应用可能有限制,不过理论上还是有探索价值的