自动驾驶系统进阶与项目实战(十)基于PointPillars的点云三维目标检测和TensorRT实战(1)
自动驾驶系统进阶与项目实战(十)基于PointPillars的点云三维目标检测和TensorRT实战(1)
自动驾驶系统进阶与项目实战(十)基于PointPillars的点云三维目标检测和TensorRT实战(1)
发表于CVPR2019的PointPillars是目前比较受业内认可的激光雷达三维检测算法,其推理速度和性能俱佳,百度Apollo和Autoware两个开源自动驾驶项目的感知系统均包含了基于PointPillars目标检测模块。本文首先从理论层面解析PointPillars方法,接着使用PyTorch和Kitti数据集从零开始训练一个神经网络,我们将使用kitti的测试数据推理并可视化检测结果。在下一篇文章中,我们将模型导出为ONNX,并且进一步导出为TensorRT的engine模型,最后在C++项目中推理TensorRT模型。完成本文,你将能复现以下结果:
和2D图像的深度学习目标检测很不相同,点云数据具有两个显著特征:(1)相对2D图像来说,点云数据非常稀疏;(2)点云数据是三维的。为了将图像领域卷积神经网络做模式识别的经验引入三维点云中,一些深度学习方法采用了三维卷积方法或者是将点云投射为2维深度图,还有一类方法是使用鸟瞰视角(Bird’s Eye View)来组织点云数据的输入,相比于2维深度图,鸟瞰图不存在遮挡问题,但是数据分布更加稀疏,造成网络特征学习效率低下。为了解决特征稀疏问题,一种做法是对鸟瞰视角下的平面做网格划分,然后提取网格内的某些统计学特征(百度CNN-SEG即是采用此方法做特征输入),显然人为设计的统计学特征在模型泛化上可能存在缺陷,行业的新方法往往趋向于end-to-end learning,即使用神经网络去学习鸟瞰网格内的特征表示,VoxelNet是第一个这么做的(可以参考我18年的介绍VoxelNet的文章:https://blog.csdn.net/AdamShan/article/details/84837211?spm=1001.2014.3001.5501 )。但是VoxelNet及其继任者SECOND因为都采用了三维卷积,在推理上的实时性比较差。
- 使用Pillar这种方式描述点云数据,并且使用编码器网络学习Pillar特征表示;
- 整个PointPillars方法仅采用2D 卷积层。
这两个特点带来的好处包括:自学习的特征表示会有更好的泛化能力,仅采用2D卷积层在计算上显著提升了速度,此外,Pillar的数据表示不需要工程师对具体的激光雷达(线数不同,垂直角度分布不同)做配置和适配。
如果你不想使用kitti数据集从头训练一个PointPillars网络(考虑到很多读者没有训练用的GPU条件或者没有办法下载完整的Kitti 3D检测数据集),那么你还可以直接下载AdamShan训练好的模型以及一帧Kitti样例测试数据进行PointPillars网络的推理验证:
link: https://pan.baidu.com/s/1cDq5Nwi_EfZflQHHiOOZWA password: 32nn
- checkpoint_epoch_80.pth: 笔者基于Kitti训练的Single head的pointpillars模型checkpoint文件
- txt, png, bin:分别为Kitti测试集中的一帧数据的标定文件、左相机图片、激光雷达点云
将下载好的checkpoint文件(checkpoint_epoch_80.pth
)拷贝到output/kitti_models/pointpillar/default/ckpt/
目录下,将下载好的样例数据000099.bin
拷贝到data/kitti/testing/velodyne/
目录下,将000099.txt
拷贝到data/kitti/testing/calib/
目录下,将000099.png
拷贝到data/kitti/testing/image_2/
目录下。
运行demo.py可视化模型在测试集上的推理效果:
# inside your conda env
cd tools
python demo.py --cfg_file cfgs/kitti_models/pointpillar.yaml --data_path ../data/kitti/testing/velodyne/000099.bin --ckpt ../output/kitti_models/pointpillar/default/ckpt/checkpoint_epoch_80.pth
其中--cfg_file
跟模型配置文件, --data_path
跟要可视化的点云数据(测试集),--ckpt
跟训练的模型的路径。可以看到单帧数据可视化的效果:
再使用以下脚本将检测结果可视化到图像中:
cd visual_tools
python draw_3d_onimg.py
-
结合Open3D的可视化效果,最终得到以下推理结果:
- PointPillars原文:https://arxiv.org/pdf/1812.05784.pdf
- OpenPCDet官方仓库: https://github.com/open-mmlab/OpenPCDet
- 本文项目仓库:https://github.com/AbangLZU/EasyPointPillars
- Adam预训练的模型文件和kitti样例数据下载链接: https://pan.baidu.com/s/1cDq5Nwi_EfZflQHHiOOZWA 密码: 32nn
相关文章
- jenkins自动构建项目源码git pull时出现冲突的终极解决方案(git远程覆盖本地分支)
- 【黑马Android】(05)短信/查询和添加/内容观察者使用/子线程网络图片查看器和Handler消息处理器/html查看器/使用HttpURLConnection采用Post方式请求数据/开源项目
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-有时候项目会无法编译,重新生成就自动卡死或者自动退出怎么办
- Github上优秀的Objective-C项目简介
- Golang优秀开源项目汇总
- 开发故事:我在项目那些有用的eclipse插件
- Angular 项目工程文件结构介绍
- AI开发者大会之AI学习与进阶实践:2020年7月3日《如何转型搞AI?》、《基于AI行业价值的AI学习与进阶路径》、《自动机器学习与前沿AI开源项目》、《使用TensorFlow实现经典模型》
- 【项目实战】基于Java的代码生成器——MapStruct入门介绍
- RTSP服务器综合项目:rtsp实时监控
- Python实现哈里斯鹰优化算法(HHO)优化循环神经网络分类模型(LSTM分类算法)项目实战
- Python实现基于Optuna超参数自动优化的LightGBM分类模型(LGBMClassifier算法)项目实战
- Python实现基于Optuna超参数自动优化的Catboost回归模型(CatBoostRegressor算法)项目实战
- Python项目学习一:项目一:自动添加标签--再次实现
- springboot配置启动后自动打开浏览器访问项目
- [h5棋牌项目]-08-请安装所需的版本的 Windows SDK 或者在项目属性页的问题解决方案
- 【Android 性能优化】应用启动优化 ( 安卓应用启动分析 | ActivityThread 主函数分析 | 应用初始化 | 启动优化项目 )
- thinkphp应用目录不可写,目录无法自动生成! 请手动生成项目目录~
- 采用Eclipse中间Maven构建Web项目错误(一)
- Git SVN Clone 旧项目迁移到 Git 上
- 电商项目“商品分类浏览”如何测试?附详细思维导图
- Pycharm如何选择自动打开最近项目
- 【项目实战】Redis使用场景之待支付订单自动取消、订单自动收货