开源项目 Lidar AI Solution 的环境配置,记录自己环境配置过程,仅供自己参考,只进行最最最基本的运行,不涉及任何原理分析(主要是不会)
博主环境如下:
系统:Ubuntu20.04
显卡:RTX3060
显卡驱动:510.108.03
CUDA:11.6
cuDNN:8.4.0
TensorRT:8.4.1
整个环境配置的重点和难点在于整个项目的完整拉取
以下内容均 Copy 自 Lidar AI Solutin 的 README 文档,请大家熟读熟读熟读文档
Lidar AI Solution 项目为自动驾驶 3D-Lidar 提供了一个高性能的解决方案,在加速 sparse convolution/CenterPoint/BEVFusion/OSD/Conversion 方面做得非常好
sudo apt-get install git-lfs
git clone --recursive https://github.com/NVIDIA-AI-IOT/Lidar_AI_Solution
cd Lidar_AI_Solution
一定一定一定要按照上述方法完整拉取整个项目(PS:完整项目在 Linux 下大概有 365M 的大小),不要去直接点击 Code ==> DownZIP 下载,也不要直接 git clone 下载,因为该项目依赖于其他项目,因此加上 --recursive 指令是为了循环克隆子项目。
注意:项目的完整拉取非常非常非常重要,后续的问题基本上都是因为没有完整的拉取整个项目所导致的
接下来我们就来聊聊如何完整的拉取整个 repo
首先如果在 Linux 下执行上述指令你会发现由于访问的是外网会非常缓慢,当然你如果有一个好的代理应该是没有问题的,博主之前下了一晚上才下完,但是由于网络经常断开,因此也不能确保整个项目是否完整。当然网上也提供了一些快速高效下载方法,博主也没去折腾了,感兴趣的可以看看 git clone --recursive快速高效下载方法
由于在 Linux 上没有找到合适的代理,也不愿去折腾高速下载方法,因此博主决定在 Windows 下去拉取整个 repo (主要是因为 Windows 下有代理)
在此之前你需要在 Windows 下面安装 git 和 git lfs,比较简单,这里提供博主主要参考的文章:
将 git 和 git lfs 安装完成后,就可以在 cmd 窗口正常执行 git 指令了,指令如下:(PS:一定要记得开代理)
sudo apt-get install git-lfs
git clone --recursive https://github.com/NVIDIA-AI-IOT/Lidar_AI_Solution
完整的项目拉取如下图所示:
下载完成以后把整个项目拷贝到 Linux 进行后续操作就行,值得注意的是,从 Windows 拉取的代码放在 Linux 下会有一个小小的 bug,这个我们之后也会提到。
这里博主也提供下博主自己拉取的整个 repo,感兴趣的可以自行下载,下载链接 Baidu Drive (注意该代码下载于 2023/5/25 日,若有改动请参考最新)
至此,整个项目文件就准备好了,对于每个任务可以查看对应子文件夹下的 README 文档
Copy 自 CUDA-BEVFusion 的 README.md 文档
这个 repo 包含使用 CUDA & TensorRT 进行 BEVFusion 推理的源码和模型
Model | Framework | Precision | mAP | NDS | FPS |
---|---|---|---|---|---|
Swin-Tiny BEVFusion-Base |
Pytorch | FP32+FP16 | 68.52 | 71.38 | 8.4(on RTX3090) |
ResNet50 | Pytorch | FP32+FP16 | 67.93 | 70.97 | - |
ResNet50 | TensorRT | FP16 | 67.89 | 70.98 | 18(on ORIN) |
ResNet50-PTQ | TensorRT | FP16+INT8 | 67.66 | 70.81 | 25(on ORIN) |
为了构建 bevfusion,我们需要以依赖以下库:
上面性能表中的数据是我们在 Nvidia Orin 平台上,使用 TensorRT-8.6、cuda-11.4 以及 cudnn8.6 得到的
关于 CUDA、CUDNN、TensorRT 的安装可以参考 Ubuntu20.04部署YOLOv5 或者 Ubuntu20.04软件安装大全 这里不再赘述
你可能会发现博主的 TensorRT 版本似乎并不满足要求,是的,但博主没去安装高版本的 TensorRT,先将就用吧,后续推理也就提示了一个 API 的警告,并没有太大的错误。软件版本不要求完全一致,但是需要尽可能的对应
注:在安装完 apt install git-lfs
以后请使用 git clone --recursive
来拉取整个项目,确保依赖的完整性
# 下载模型和数据到 CUDA-BEVFusion 文件夹
cd CUDA-BEVFusion
# 解压模型和数据压缩文件
unzip model.zip
unzip nuScenes-example-data.zip
# 下面是解压后整个文件夹的结构
CUDA-BEVFusion
|-- example-data
|-- 0-FRONT.jpg
|-- 1-FRONT_RIGHT.jpg
|-- ...
|-- camera_intrinsics.tensor
|-- ...
|-- example-data.pth
`-- points.tensor
|-- src
|-- qat
|-- model
|-- resnet50int8
| |-- bevfusion_ptq.pth
| |-- camera.backbone.onnx
| |-- camera.vtransform.onnx
| |-- default.yaml
| |-- fuser.onnx
| |-- head.bbox.onnx
| `-- lidar.backbone.xyz.onnx
|-- resnet50
`-- swint
|-- bevfusion
`-- tool
好,在正式配置之前我们需要解决一个小bug,也就是之前提到过的,当你在 Windows 下面拉取代码放到 Linux 上面时会导致执行 shell 脚本时报错,如下图所示:
原因是 Windows 和 Linux 的 .sh 脚本文件格式不同,如果在脚本中有空行,脚本是在 Windows 下进行编辑之后传到 Linux 上去执行的话,就会出现这个问题
Windows 下的换行符是\r\n,而 Linux 下的换行符是 \n,没有识别/r,所以会导致上述错误,这个属于脚本编码的问题
解决办法是在对应脚本文件目录下,执行以下命令即可
vim enviroment.sh
:set ff=unix
:wq
上述通过 vim 编辑器打开脚本文件后设置格式为 Linux 格式并保存退出
参考自 Linux下执行Shell脚本出现$‘\r‘: command not found解决方法
因此,如果你的项目是从 Windows 复制到 Linux 下的话,可能存在上述问题,请将 tools 文件夹下的所有脚本文件均按照上述方法修改为 Linux 格式,请确保 tools 下所有 .sh 文件格式均修改完成
OK! 解决了上述小 bug 之后按照 README.md 就可以正常执行推理了
1. 安装 python 依赖库
sudo apt install libprotobuf-dev
pip install onnx
如果需要使用 Python 推理的话需要安装
这里有些问题需要和大家讨论下,我看 Issues 里面有人提问说推理遇到了一些问题,杜老师是说 sudo apt install libprotobuf-dev=3.6.1
但是我安装时说找不到对应版本,如下图所示:
我们可以使用 apt-cache show package 查找指定包的详情,参考自 【Linux】使用apt-get查询并安装指定版本的软件
sudo apt update
sudo apt-cache show package
可以看到查找有多个版 3.6.1.3-2ubuntu5.2、3.6.1.3-2ubuntu5,博主随便安装了一个指令如下:
sudo apt install libprotobuf-dev=3.6.1.3-2ubuntu5.2
但是在后续执行 Python 推理的时候出现如下警告,最终能编译完成,但是执行的时候直接 Segmentation fault 崩溃了
从编译警告不难看出,protobuf编译的版本是 3.20.3 与要求的版本 3.6.1 并不匹配,博主之前有安装过 protobuf,而 CMakeLists.txt 中是通过 find_pakcage 去找 protobuf 的,找到了之前下载的 3.20.3 版本,还有一些其它的警告也是与 protobuf 相关的,因此可能需要自己手动指定下 protobuf 的头文件和库文件路径,让它正常匹配到所对应的 3.6.1 版本,而不是其它的版本。
因此,博主最终也没解决 Python 推理,等有时间再去折腾吧,C++ 的推理一切正常,下面我们继续。
2. 在 environments.sh 文件中修改 TensorRT/CUDA/CUDNN/BEVFusion 变量
# 修改为你当前使用的路径
export TensorRT_Lib=/path/to/TensorRT/lib
export TensorRT_Inc=/path/to/TensorRT/include
export TensorRT_Bin=/path/to/TensorRT/bin
export CUDA_Lib=/path/to/cuda/lib64
export CUDA_Inc=/path/to/cuda/include
export CUDA_Bin=/path/to/cuda/bin
export CUDA_HOME=/path/to/cuda
export CUDNN_Lib=/path/to/cudnn/lib
# resnet50/resnet50int8/swint
export DEBUG_MODEL=resnet50int8
# fp16/int8
export DEBUG_PRECISION=int8
export DEBUG_DATA=example-data
export USE_Python=OFF
博主修改后如下所示:
export TensorRT_Lib=/opt/TensorRT-8.4.1.5/lib
export TensorRT_Inc=/opt/TensorRT-8.4.1.5/include
export TensorRT_Bin=/opt/TensorRT-8.4.1.5/bin
export CUDA_Lib=/usr/local/cuda-11.6/lib64
export CUDA_Inc=/usr/local/cuda-11.6/include
export CUDA_Bin=/usr/local/cuda-11.6/bin
export CUDA_HOME=/usr/local/cuda-11.6/
export CUDNN_Lib=/usr/local/cuda-11.6/lib64
# resnet50/resnet50int8/swint
export DEBUG_MODEL=resnet50int8
# fp16/int8
export DEBUG_PRECISION=int8
export DEBUG_DATA=example-data
export USE_Python=OFF
3.在终端上执行 enviroment.sh 文件
bash tool/enviroment.sh
博主执行完之后如下图所示:
1.利用 tensorRT 构建模型
bash tool/build_trt_engine.sh
博主执行完之后如下图所示:
2.编译并运行程序
bash tool/run.sh
博主执行完之后如下图所示:
build/cuda-bevfusion.jpg 如下图所示:
至此,CUDA-BEVFusion 的环境配置到这里就结束了!!!
后续的 onnx 和 PTQ 模型导出的细节、Python推理、进一步的性能提升相关内容需要大家自行去了解了
分析:没有找到稀疏卷积的库文件,其库文件位于 libraries/3DSparseConvolution/libspconv 中,如果你没有完整拉取整个项目会发现该文件夹下的 lib 文件为空,导致无法找到库文件
解决办法:完整拉取整个项目
分析:这个问题在 Issues 17 有人遇到,博主遇到这个问题是因为在问题 1 中的 libspconv.so 找不到时利用手动添加的方式,手动下载库文件导致的
解决办法:完整拉取整个项目
Copy 自 CUDA-CenterPoint 的 README.md 文档
这个 repo 包含使用 CUDA & TensorRT 进行 CenterPoint 推理的源码和模型
整个推理分为以下几个阶段:
- Voxelization with CUDA kernel
- 3D backbone with NV spconv-scn
- RPN & CenterHead with TensorRT
- Decode & NMS with CUDA kernel
这个 demo 使用 nuScenes Dataset 中的激光雷达数据,onnx 模型可以通过给定的脚本从下面给出的 checkpoint 中导出
Dataset | Checkpoint | Config |
---|---|---|
nuScenes | epoch_20.pth | nusc_centerpoint_voxelnet_0075voxel_fix_bn_z |
为了构建 centerpoint 推理需要 CUDA、TesorRT、libspconv 库,注意 libspconv 在 Tesla 平台只支持 sm_80 & sm_86,在嵌入式平台只支持 sm_87
Tesla 平台
Ubuntu20.04 x86_64 with Nvidia Tesla A30
CUDA 11.4 + cuDNN 8.4.1 + TensorRT 8.4.12.5
嵌入式平台
Nvidia Drive Orin 6.0.3.0
CUDA 11.4 + cuDNN 8.3.3 + TensorRT 8.4.10.4
在编译运行之前还需要做几件事情
首先,如果你的项目是从 Windows 下面复制到 Linux 下面的,请按照之前 CUDA-BEVFusion 所讲,将 tool 文件夹下的所有 .sh 脚本文件格式均修改为 Linux 格式,具体方法请参照 2.5.2 小节,这里不再赘述
然后,你需要修改 CMakeLists.txt 中的内容,具体修改如下:
# 30行 修改tensorRT路径
set(TENSORRT_ROOT /opt/TensorRT-8.4.1.5)
# 31行 修改CUDA路径
set(CUDA_TOOLKIT_ROOT_DIR /usr/local/cuda-11.6)
最后,在 data 文件夹下创建一个 prediction 文件夹用于保存预测结果信息
在测试数据上运行检测过程,指令如下:
cd CUDA-CenterPoint
bash tool/build.trt.sh
mkdir -p build && cd build
cmake .. && make -j
./centerpoint ../data/test/ --verbose
至此,CUDA-CenterPoint 的环境配置到这里就结束了!!!
后续的可视化推理结果以及推理结果评估博主没有尝试,感兴趣的可以自己看看
Copy 自 CUDA-PointPillars 的 README.md 文档
这个 repo 包含使用 TensorRT 进行 pointpillars 推理的源码和模型,模型由 OpenPCDet 创建由 onnx_graphsurgeon 修改
整个推理分为 4 个阶段:
- Convert points cloud into 4-channle voxels
- Extend 4-channel voxels to 10-channel voxel features
- Run TensorRT engine to get 3D-detection raw data
- Parse bounding box, class type and direction
这个 demo 使用 KITTI 数据集中的激光雷达数据,onnx 文件可以通过 tool 文件夹下的脚本从预训练模型中导出
为了构建 pointpillars 推理,需要 TensorRT、CUDA 以及在 TensorRT 中的 PillarScatter layer 插件
由于我们拉取的 Lidar_AI_Solution 项目已经包含了 CUDA-PointPillars 因此不需要单独去拉取该 repo 了
在正式编译运行之前还需要修改下对应的 CMakeLists.txt 文件,修改内容如下:
# 61行 修改TensorRT头文件路径
set(TENSORRT_INCLUDE_DIRS /opt/TensorRT-8.4.1.5/include)
# 62行 修改TensorRT库文件路径
set(TENSORRT_LIBRARY_DIRS /opt/TensorRT-8.4.1.5/lib)
修改完成后执行如下指令完成编译:
mkdir build && cd build
cmake .. && make -j$(nproc)
./demo
${nproc}
会显示当前进程可用的CPU数量,博主的数量为12,上述指令等价于
cmake .. && make -j12
编译过程如下图所示:
至此,CUDA-PointPillars 的环境配置到这里就结束了!!!
这篇博客主要介绍了 Lidar_AI_Solution 的环境配置,也就是将 README 文档重新 Copy 了一次,没有涉及到任何的原理分析,大家在环境配置过程中一定要熟读 README 文档,不要忘记安装对应的库和包,除此之外,可以到 Issues 里面多看看别人遇到的一些问题,可能你也遇到过。
该 repo 中涉及到了大量的知识,包括剪枝、量化、部署、BEV感知、Lidar点云、3D检测…,集大成者,感觉把前面所学的剪枝、量化、自动驾驶CV课程全都串起来了呀,如果大家对这个 repo 感兴趣的话可以自行研究。
最后如果大家觉得这个 repo 对你有帮助的话,不妨帮忙点个 ️ 支持一波!!!
文章浏览阅读2w次。mac电脑触控板快速选择前提:在截图或者选择的时候,点击触控板在拖动会很麻烦,mac提供一个三指拖移的功能,能够用三指快速拖移,这样就变成四指切换。步骤左上角,点击苹果logo,选择系统偏好设置点击辅助功能,选择“鼠标与触控板”点击“触控板选项”,勾选启动拖移,选择“三指拖移”,选择“好”就设置完毕啦。这样,就可以一指滑动,轻触点击;二指滑动三指拖移四指切换面板棒呆..._mac trackpad 两指移动
文章浏览阅读2.2k次。文章目录1 图片被划分为CTU2 图片被划分为SubPicture、Slice、Tile2.1 Tile、SLice、SubPicture的概念2.2 光栅扫描分区模式2.3 矩形分区模式3 CTU以树形继续向下划分3.1 HEVC的划分方式3.2 VVC的划分方式3.3 编解码方式3.4 示例3.5 高层参数及限制3.6 帧内的色度独立划分4 CU在图片边缘的划分5 CU冗余划分的限制6 虚拟管..._h.266 ctb
文章浏览阅读1.5k次。从零开始搭建自己的vue组件库——01创建引言项目创建修改目录结构添加第一个组件以及样式文件夹引言因工作需要,要打造一套属于自己团队的组件库,本人也是第一次接到这种任务,虽然不着急,但是之前从来没做过,因此特意再此记录下过程,也希望自己能坚持下去,当然,过程中少不了查阅各种资料,也会再次记录下各种各样的问题,本组件库的开发基于vue2.0,主要用于pc端,会参考element-ui进行开发项目创建首先第一步是要创建一个vue工程vue create xxxx创建具体流程在这里不再详细说明,创建完_vue构建自己的组件库
文章浏览阅读1.3k次。神经网络在优化中的应用:万能的模型+误差修正函数“,每次根据训练得到的结果与预想结果进行误差分析,进而修改权值和阈值,一步一步得到能输出和预想结果一致的模型。举一个例子:比如某厂商生产一种产品,投放到市场之后得到了消费者的反馈,根据消费者的反馈,厂商对产品进一步升级,优化,从而生产出让消费者更满意的产品。这就是BP神经网络的核心。BP神经网络是一种按误差反向传播(简称误差反传)训练的多层前馈网络,其算法称为BP算法,它的基本思想是梯度下降法,利用梯度搜索技术,以期使网络的实际输出值和期望输出值的误差均方
文章浏览阅读282次。适配器模式我们先讲适配器模式,后面的装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式,都是依赖于适配器模式中的对象的适配器模式为起源的。适配器模式,简单来讲,就是某个类的接口和另一个接口不匹配,将某个类的接口转换成客户端期望的另一个接口表示。目的是消除由于接口不匹配所造成的类的兼容性问题。1.类的适配器模式我们还是模拟一个场景,市电都是220V的交流电,但是手机充电是5..._android 适配器adapter相当于service层次吗吗
文章浏览阅读3.3k次。本篇主要介绍PCIe总线的复位方式。PCIe总线规定了两个复位方式:Conventional Reset和FLR(Function Level Reset),而Conventional Reset又可以进一步分为两大类:Fundamental Reset和Non-Fundamental Reset。Fundamental Reset方式包括Cold和WarmReset方式,可以将PCIe将设备中的绝大多数内部寄存器和内部状态都恢复成初始值;而Non-FundamentalReset方式为Hot Res._pcie flr复位使用方法
文章浏览阅读793次。参考地址:http://blog.csdn.net/jj120522/article/details/8075249
文章浏览阅读649次。总的来说,Twitter是一种强大的社交媒体工具,它有着许多优点,比如实时信息更新、广泛的观众和社区参与度高。用户可以实时获取和发布信息,无论是新闻、活动更新、产品发布,甚至是天气预报,这些都可以在Twitter上即时发布。限制的表达方式:Twitter的推文长度有限制(目前是280个字符),这限制了用户的表达方式。隐私问题:尽管Twitter提供了一些隐私设置,但用户的推文和信息仍然可能被大量的人看到。信息过载:由于Twitter上信息更新的速度非常快,用户可能会感到信息过载。_tiwwer软件亮点
文章浏览阅读421次。前言Hello我又来了,快年底了,作为一个有抱负的码农,我想给自己攒一个年终总结。自上上篇写了手动搭建Redis集群和MySQL主从同步(非Docker)和上篇写了动手实现MySQL读写分离and故障转移之后,索性这次把数据库中最核心的也是最难搞懂的内容,也就是索引,分享给大家。这篇博客我会谈谈对于索引结构我自己的看法,以及分享如何从零开始一层一层向上最终理解索引结构。从一个简单的..._insert into userweight(jdate,name,height,weight)values(?,?,?,?)
文章浏览阅读63次。简单来说Stable Diffusion是一个文本到图像的潜在扩散模型,由CompVis、Stability AI和LAION的研究人员和工程师创建。它使用来自LAION-5B数据库子集的512x512图像进行训练。使用这个模型,可以生成包括人脸在内的任何图像,因为有开源的预训练模型,所以我们也可以在自己的机器上运行它。****_stable diffusion 训练 ai画画
文章浏览阅读1.1k次。微软最近宣布,它打算以25亿美金收购Minecraft的Mojang,然而这样天价的数字收购意思到底在哪儿?Xsolla今天带来一手海外专业人士对其收购做出的分析,与大家分享。丹·皮尔森首先, 收购问题的标准是价格吗?难道这笔交易对于双方都具有战略意义?再就是具体到本次收购的一些问题。微软将如何打破甚至拨出25亿的收购,到2015年六月底?它在哪里可以采取特_mojang 股票
文章浏览阅读1.6k次。容器编排与调度是当前云计算发展的热点方向之一。Kubernetes、Mesos、Docker Swarm等开源框架已经成为众多公司和组织选择容器编排工具的基础设施层级,通过编排技术,可以实现集群管理自动化,资源利用率提高,灵活应对业务变化,快速响应用户需求等诸多优势。本系列文章将系统地介绍Kubernetes中常用的容器编排组件及其工作原理。希望能够给需要学习和掌握容器编排技术的读者提供有价值的参考信息。Kubernetes集群中包含多个节点和资源,不同节点上的Pod需要运行在不同的物理机或虚拟机上。