Skip to content

Latest commit

 

History

History

squeezesegv3

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

SqueezeSegV3: Spatially-Adaptive Convolution for Efficient Point-Cloud Segmentation

目录

引用

Xu, Chenfeng, Bichen Wu, Zining Wang, Wei Zhan, Peter Vajda, Kurt Keutzer, και Masayoshi Tomizuka. ‘SqueezeSegV3: Spatially-Adaptive Convolution for Efficient Point-Cloud Segmentation’. CoRR abs/2004.01803 (2020).

简介

SqueezeSegV3是一个点云语义分割模型。该论文延续了SqueezeSeg系列将三维空间点云投影至二维空间进行特征提取的思想,并在RangeNet++模型结构的 基础上创新性地提出并应用了空间自适应卷积(Spatially-Adaptive Convolution)。

模型库

  • SqueezeSegV3在SemanticKITTI Val set数据集上的表现
模型 mIoU (Point Cloud / Range View) mAcc (Point Cloud / Range View) 模型下载 配置文件
SqueezeSegV3-21 46.3 / 51.2 87.3 / 90.0 model config
SqueezeSegV3-53 48.8 / 54.2 88.4 / 91.2 model config

训练配置

我们提供了在开源数据集上的训练配置与结果,详见SqueezeSegV3训练配置

使用教程

数据准备

  1. 数据格式
    SqueezeSegV3模型目前仅适配SemanticKITTI格式的数据集。需将数据集放置于 Paddle3D/datasets/SemanticKITTI目录下,或在配置文件中指定数据集路径。数据集文件结构如下:
└── Paddle3D/datasets/SemanticKITTI
    ├── sqeuences
        ├── 00
            ├── velodyne
                ├── 000000.bin
                ├── ...
            ├── labels
                ├── 000000.label
                ├── ...
            ├── poses.txt
  1. 数据划分
    SemanticKITTI数据集共包含0021共22个序列,其中官方默认的数据集划分为:

    • 训练集:00, 01, 02, 03, 04, 05, 06, 07, 09, 10
    • 验证集:08
    • 测试集:11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21

    如需使用自己的划分,可在配置文件中指定。

训练

位于Paddle3D/目录下,执行:

python -m paddle.distributed.launch --gpus 0,1,2,3,4,5,6,7 \
    tools/train.py \
    --config configs/squeezesegv3/squeezesegv3_rangenet53_semantickitti.yml \
    --save_interval 1195 \
    --keep_checkpoint_max 50 \
    --save_dir outputs/squeezesegv3/rangenet21_semantickitti \
    --do_eval

训练脚本支持设置如下参数:

参数名 用途 是否必选项 默认值
gpus 使用的GPU编号 -
config 配置文件 -
save_dir 模型和visualdl日志文件的保存根路径 output
num_workers 用于异步读取数据的进程数量, 大于等于1时开启子进程读取数据 0
save_interval 模型保存的间隔步数 1000
do_eval 是否在保存模型时进行评估
log_interval 打印日志的间隔步数 10
keep_checkpoint_max 最新模型保存个数 5
resume 是否从断点恢复训练
batch_size mini-batch大小(每张GPU) 在配置文件中指定
iters 训练轮数 在配置文件中指定
learning_rate 学习率 在配置文件中指定
seed 固定随机种子 None

评估

位于Paddle3D/目录下,执行:

python tools/evaluate.py \
    --config configs/squeezesegv3/squeezesegv3_rangenet53_semantickitti.yml \
    --model /path/to/model.pdparams

评估脚本支持设置如下参数:

参数名 用途 是否必选项 默认值
config 配置文件 -
model 待评估模型路径 -
num_workers 用于异步读取数据的进程数量, 大于等于1时开启子进程读取数据 0
batch_size mini-batch大小 在配置文件中指定

模型导出

运行以下命令,将训练时保存的动态图模型文件导出成推理引擎能够加载的静态图模型文件。

python tools/export.py \
    --config configs/squeezesegv3/squeezesegv3_rangenet53_semantickitti.yml \
    --model /path/to/model.pdparams \
    --input_shape 64 1024 \
    --save_dir /path/to/output

模型导出脚本支持设置如下参数:

参数名 用途 是否必选项 默认值
config 配置文件 -
model 待导出模型参数model.pdparams路径 -
input_shape 指定模型的输入尺寸,支持N, C, H, WH, W格式 -
save_dir 保存导出模型的路径,save_dir下将会生成三个文件:squeezesegv3.pdiparams squeezesegv3.pdiparams.infosqueezesegv3.pdmodel deploy

模型部署

C++部署

Coming soon...

Python部署

命令参数说明如下:

参数 说明
model_file 导出模型的结构文件squeezesegv3.pdmodel所在路径
params_file 导出模型的参数文件squeezesegv3.pdiparams所在路径
lidar_file 待预测的点云文件所在路径
img_mean 点云投影到range-view后所成图像的均值,例如为12.12,10.88,0.23,-1.04,0.21
img_std 点云投影到range-view后所成图像的方差,例如为12.32,11.47,6.91,0.86,0.16
use_trt 是否使用TensorRT进行加速,默认0
trt_precision 当use_trt设置为1时,模型精度可设置0或1,0表示fp32, 1表示fp16。默认0
trt_use_static 当trt_use_static设置为1时,在首次运行程序的时候会将TensorRT的优化信息进行序列化到磁盘上,下次运行时直接加载优化的序列化信息而不需要重新生成。默认0
trt_static_dir 当trt_use_static设置为1时,保存优化信息的路径

运行以下命令,执行预测:

python infer.py --model_file /path/to/squeezesegv3.pdmodel --params_file /path/to/squeezesegv3.pdiparams --lidar_file /path/to/lidar.pcd.bin --img_mean 12.12,10.88,0.23,-1.04,0.21 --img_std 12.32,11.47,6.91,0.86,0.16

如果要开启TensorRT的话,请卸载掉原有的paddlepaddel_gpu,至Paddle官网下载与TensorRT连编的预编译Paddle Inferece安装包,选择符合本地环境CUDA/cuDNN/TensorRT版本的安装包完成安装即可。

运行以下命令,开启TensorRT加速模型预测:

python infer.py --model_file /path/to/squeezesegv3.pdmodel --params_file /path/to/squeezesegv3.pdiparams --lidar_file /path/to/lidar.pcd.bin --img_mean 12.12,10.88,0.23,-1.04,0.21 --img_std 12.32,11.47,6.91,0.86,0.16 --use_trt 1