第3名方案 [Private LB 0.182]
作者: yukke42 (Master) | 比赛排名: 第3名
感谢组织者和Kaggle举办这次比赛!
祝贺所有获奖者!
以下是我的解决方案:
数据集与预处理
- 未使用外部数据,仅使用本次比赛的点云数据。
- 未使用动物和紧急车辆类别。
- 忽略少于5个点的目标。
- 车辆类别(汽车、其他车辆、卡车和公共汽车)的检测区域为 100m x 75m,小物体类别(行人、自行车和摩托车)的检测区域为 100m x 50m。
- 使用场景中每个类别的目标数量进行 StratifiedKFold 数据集划分。
模型
我的网络结合了 VoxelNet [1] 和 PointPillars [2],实现基于 traveller59 的 second.pytorch。该网络仅使用 FC 和 Conv2d,没有使用稀疏卷积或可变形卷积。
基础模型流程:
- 点云被分割为体素 [0.25m x 0.25m x 0.75m]。
- 将 PointPillars 的 Pillar Feature Net 相同的网络应用于每个体素,输出通道大小 = 16 效果最好。
- 体素表示特征 (C x D x H x W) 被重塑为伪图像特征 (C * D x H x W)。
- 车辆类别使用了与 VoxelNet 中 RPN 几乎相同的网络,基于此配置文件。第一个 DeConv2d 被替换为 Conv2d 并调整了其他参数。
对于其他小物体类别,对从重塑特征图中裁剪出的特征图应用了三个 Conv2d。裁剪的特征图对应于检测区域。
- 预测输出为定位、分类和方向。
可选模型:
- RPN 中使用了 Pre-activation ResNet,这个想法来自 [3]。
- 更改了小物体类别的 RPN。对裁剪后的特征图应用 Conv2d x 1(第1个输出)和 Conv2d x 3(第2个输出),然后将这些输出拼接。这是基于 VoxelNet 中原始的 RPN。
后处理
- 使用 NMS 抑制每个模型的重叠预测。
- 使用 Soft NMS 集成了三个模型。
- 没有设置分数阈值。
数据增强
- 全局平移
- 全局缩放
- 绕 z 轴旋转
- mixup 增强
将真实标签裁剪并粘贴到其他样本中(更多解释见 [4])。这种增强大大提高了所有类别的分数。
对我无效的尝试
- 我扩展了 Weighted-boxes-fusion(ZFTurbo 去年在 Open Image 比赛中的方案 [5])以应用 3D 边界框来集成不同的模型,但分数低于 Soft NMS。不过它比普通 NMS 要好。
- 我尝试使用语义地图图像(原始、过滤后)来过滤预测结果,但正确预测和错误预测都被过滤掉了。
- 使用原始图像或从 2D 检测模型提取的特征图进行点云着色,在我的架构中作为点云的附加特征并没有起作用。
参考文献
- VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection [arxiv]
- PointPillars: Fast Encoders for Object Detection from Point Clouds [arxiv]
- End-to-End Multi-View Fusion for 3D Object Detection in LiDAR Point Clouds [arxiv]
- Fast Point R-CNN [arxiv]
- Weighted Boxes Fusion: ensembling boxes for object detection models [arxiv] [github]