English | 简体中文
SNE-RoadSeg2基于SNE-RoadSeg:将表面法线信息纳入语义分割以进行准确的自由空间检测的官方pytorch实现,已被ECCV 2020接收,这是他们的项目主页。
在此仓库中,我们为KITTI道路数据集提供了训练和测试配置。 此项目源代码已经在Python 3.7,CUDA 10.0,cuDNN 7和PyTorch 1.1环境中测试,并且提供了Dockerfile
来构建我们使用的docker镜像。
请根据以下文件夹结构设置KITTI道路数据集和预训练的权重:
SNE-RoadSeg
|-- checkpoints
| |-- kitti
| | |-- kitti_net_RoadSeg.pth
|-- data
|-- datasets
| |-- kitti
| | |-- training
| | | |-- calib
| | | |-- depth_u16
| | | |-- gt_image_2
| | | |-- image_2
| | |-- validation
| | | |-- calib
| | | |-- depth_u16
| | | |-- gt_image_2
| | | |-- image_2
| | |-- testing
| | | |-- calib
| | | |-- depth_u16
| | | |-- image_2
|-- examples
...
可以从KITTI道路数据集下载image_2
,gt_image_2
和calib
。 我们根据KITTI道路数据集提供的LiDAR数据实现depth_u16
,可以从这里下载。 请注意,depth_u16
是uint16数据格式,并且实际深度(以米为单位)可以通过double(depth_u16)/1000
来获得。 此外,我们的SNE-RoadSeg-152的预训练权重kitti_net_RoadSeg.pth
可以从这里下载。
我们在examples
中提供了一个示例。 要运行它,您只需要如上所述设置checkpoints
文件夹即可。 然后,运行以下脚本:
bash ./scripts/run_example.sh
然后您将在examples
中看到normal.png
,pred.png
和prob_map.png
。 normal.png
是我们SNE的正常估算;pred.png
是我们的SNE-RoadSeg进行的自由空间预测; prob_map.png
是我们的SNE-RoadSeg预测的概率图。
对于KITTI提交,您需要如上所述设置checkpoints
和datasets/kitti/testing
文件夹。 然后,运行以下脚本:
bash ./scripts/test.sh
您将在testresults
中获得预测结果。 之后,您可以按照提交说明 submission instructions将预测结果转换为BEV透视图以进行提交。
如果一切正常,您将获得URBAN的MaxF分数96.74。 请注意:这是我们重新实现的权重,与本文中报告的权重非常相似(对于URBAN,MaxF得分为96.75)。
为了进行训练,您需要如上所述设置datasets/kitti
文件夹。 您可以根据需要将原始训练集分为新的训练集和验证集。 然后,运行以下脚本:
bash ./scripts/train.sh
权重将保存在checkpoints
中,包含损耗曲线以及验证集性能的张量板记录将保存在runs
中。 注意:如果我们将使用我们的SNE模型,train.sh
中的use-sne
可以控制,默认值为True。 如果删除它,我们的RoadSeg将以深度图像作为输入,并且您还需要删除test.sh
中的use-sne
以避免测试时出错。
我们的代码受pytorch-CycleGAN-and-pix2pix的启发,非常感谢Jun-Yan Zhu分享的出色工作。