基于飞桨PaddlePaddle官方模型运行3D目标检测

原创
2020/12/28 15:58
阅读数 1.2K

本项目是基于PointRCNN网络结构,结合飞桨官方模型库运行3D目标检测。

首先介绍下PointRCNN

1.PointRCNN是 Shaoshuai Shi, Xiaogang Wang, Hongsheng Li. 等人提出的,是第一个仅使用原始点云的2-stage(两阶段)3D目标检测器

2.此模型的第一阶段将 Pointnet++ with MSG(Multi-scale Grouping)作为backbone,直接将原始点云数据分割为前景点和背景点,并利用前景点生成bounding box。

第二阶段在标准坐标系中对生成对bounding box进一步筛选和优化。

3.该模型基于bin的方式,把回归问题转化为分类问题,验证了在三维边界框回归中的有效性。

PointRCNN网络结构如图所示

首先要安装PaddlePaddle深度学习框架

下载安装命令

## CPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle

## GPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu

由于在AI Studio上此环境默认,所以滤去这一步。想要本地编译,自行查看飞桨官网就好

1.首先获取该模型

该模型链接为https://github.com/PaddlePaddle/models/tree/release/2.0-beta/PaddleCV/3d_vision/PointRCNN

git clone https://gitee.com/PaddlePaddle/models.git

编译自定义的OP

cd models/PaddleCV/3d_vision/PointRCNN/ext_op/src
sh make.sh

成功编译后,ext_op/src 目录下将会生成 pointnet2_lib.so

设置动态库的路径到 LD_LIBRARY_PATH 中

!set_env LD_LIBRARY_PATH=$LD_LIBRARY_PATH:python -c 'import paddle; print(paddle.sysconfig.get_lib())'

回到 ext_op 目录,添加 PYTHONPA

cd …
set_env PYTHONPATH=$PYTHONPATH:pwd

运行单测

python tests/test_farthest_point_sampling_op.py
python tests/test_gather_point_op.py
python tests/test_group_points_op.py
python tests/test_query_ball_op.py
python tests/test_three_interp_op.py
python tests/test_three_nn_op.py

数据获取
本模型是在 ModelNet40 数据集上进行训练的
数据集目录如下
dataset/ModelNet40/modelnet40_ply_hdf5_2048
├── train_files.txt
├── test_files.txt
├── shape_names.txt
├── ply_data_train0.h5
├── ply_data_train_0_id2file.json
├── ply_data_test0.h5
├── ply_data_test_0_id2file.json
| …

dataset/Indoor3DSemSeg/
├── all_files.txt
├── room_filelist.txt
├── ply_data_all_0.h5
├── ply_data_all_1.h5
| …

提供了数据集下载脚本:

cd dataset/ModelNet40
sh download.sh

PointNet++ 分割模型在 Indoor3DSemSeg 数据集上进行训练

提供了数据集下载脚本:

cd dataset/Indoor3DSemSeg
sh download.sh

训练数据集

指定0号卡进行GPU训练

export CUDA_VISIBLE_DEVICES=0

设置动态库的路径到 LD_LIBRARY_PATH 中

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:python -c 'import paddle; print(paddle.sysconfig.get_lib())'

PointNet++ 分类模型的训练:

!python train_cls.py --model=MSG --batch_size=16 --save_dir=checkpoints_msg_cls

PointNet++ 语义分割模型的训练:

!python train_seg.py --model=MSG --batch_size=32 --save_dir=checkpoints_msg_seg

评估模型

指定0号卡进行GPU评估

export CUDA_VISIBLE_DEVICES=0

设置动态库的路径到 LD_LIBRARY_PATH 中

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:python -c 'import paddle; print(paddle.sysconfig.get_lib())'

PointNet++ 分类模型的评估:

python eval_cls.py --model=MSG --weights=checkpoints_cls/200

PointNet++ 语义分割模型的评估:

!python eval_seg.py --model=MSG --weights=checkpoints_seg/200

最后,记得运行下项目就好了,可以将代码复制到终端中运行。

下载安装命令

## CPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle

## GPU版本安装命令
pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu

本文同步分享在 博客“少年01”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部