自动驾驶框架 UniAD环境部署

  • 感谢大佬们的开源工作 UniAD-github地址-YYDS
  • 更多bev算法部署参考
  • 如果您觉得本帖对您有帮助,感谢您一键三连支持一波^_^

统一自动驾驶框架 (UniAD) ,第一个将全栈驾驶任务整合到一个深度神经网络中的框架,并可以发挥每个子任务以及各个模块的优势,以执行安全的规划。

细节可参考UniAD-源论文地址
在这里插入图片描述


1 环境配置


  • 基础环境ubuntu-20.04、cuda-11.3、torch-1.10.0、python3.8

  • 建议小白和不想折腾的童鞋直接抄作业, 不要只抄90分,都抄了,为啥不直接抄100分, 不要不好意思^_^

  • 配环境和运行报错可以先看1.2小节错误汇总


1.1 环境安装

ubuntu显卡驱动-cuda-cudnn-conda-TensorRT 安装及其配置参考链接

mmcv-full==1.3.16-1.7.2whl下载
mmcv-full==1.4.7-1.7.2whl下载

# 1 创建虚拟环境
conda create -n uniAD python=3.8 -y
# 2 激活虚拟环境
conda activate uniAD# 3 安装 torch、torchvision、torchaudio
## 安装torch1.11.0以下版本的,不然运行uniAD会报错, 详情见1.2小节
pip install torch==1.10.0+cu113 torchvision==0.11.0+cu113 torchaudio==0.10.0 --extra-index-url https://download.pytorch.org/whl/cu113# 4 安装mmcv-full、mmdet、mmsegmentation
## 4.1 安装mmcv-full,pip在线安装耗时久,建议按4.2采用离线安装 
pip install mmcv-full==1.4.0## 4.2 离线安装mmcv-full 本节开头有mmcv-full==1.3.16-1.7.2whl下载地址,找到1.4.0进行下载后安装, 注意python版本
pip install mmcv_full-1.4.0-cp38-cp38-manylinux1_x86_64.whl## 4.3 安装mmdet、mmsegmentation
pip install mmdet==2.14.0 mmsegmentation==0.14.1# 5 安装scipy、scikit-image
pip install scipy==1.8.0 scikit-image==0.20.0# 6 下载UniAD
## 6.1
git clone https://github.com/OpenDriveLab/UniAD.git
## 6.2 国内可使用魔法下载
git clone https://mirror.ghproxy.com/https://github.com/OpenDriveLab/UniAD.git# 7 下载mmdetection3d
## 7.1 进入UniAD目录
cd UniAD
## 7.2 UniAD目录下, 下载mmdetection3d-v0.17.1版本
## 下载失败可加魔法https://mirror.ghproxy.com/, 格式如6.2
git clone https://github.com/open-mmlab/mmdetection3d.git -b v0.17.1## 7.3 进入安装
cd mmdetection3d
## 7.4 安装mmdetection3d, 耗时比较久
pip install -v -e .# 8 安装UniAD其他依赖
## 8.1  进入UniAD目录, 因为刚刚在mmdetection3d目录直接cd ..即可
cd ..
## 8.2 安装UniAD依赖
pip install -r requirements.txt# 9 更新其他依赖
pip install numpy==1.23.4 yapf==0.40.1
## 更新numpy版本可能会报错与mmdetection3d冲突,可忽略该错误

1.2 错误汇总

# 1 报错 1 fatal error: THC/THC.h: No such file or directorymmdet3d/ops/ball_query/src/ball_query.cpp:4:10: fatal error: THC/THC.h: No such file or directory 4 | #include <THC/THC.h>
# 报错的原因是THC方法目前在最新版本的 Pytorch 中已被弃用,并被 ATen API 取代,因此在高版本的Pytorch(版本在1.11.0及以上)编译安装mmdet3d的时候就会遇到无法找到THC/THC.h的报错。
# 修改方法1:#include <THC/THC.h>全部替换成下面2句即可, 使用vscode全局搜索
#include <ATen/cuda/CUDAContext.h> 
#include <ATen/cuda/CUDAEvent.h># 修改方法2 :安装小于torch1.11.0即可, 本人使用的方法2, 方法1请自行验证
安装torch=1.10.0即可# 2 报错2 docker环境中:ImportError: libGL.so.1: cannot open shared object file: No such file or directory
# 安装ffmpeg即可
apt-get install ffmpeg -y# 3 报错3 ModuleNotFoundError: No module named 'numpy.typing'
# 解决方法:更改numpy版本                    
pip install numpy==1.23.4# 4 报错4 TypeError: FormatCode() got an unexpected keyword argument 'verify'
# 更新yapf版本即可
pip install yapf==0.40.1# 5 报错5 FileNotFoundError: [Errno 2] No such file or directory: 'data/nuscenes/maps/expansion/boston-seaport.json'
重新去nuscenes官网下载Map expansion即可,然后解压放入/nuscenes/maps/目录下# 6 报错6 OSError: ckpts/bevformer_r101_dcn_24ep.pth is not a checkpoint file
官方github-安装教程中下载权重即可# 7 报错7 FileNotFoundError: img file does not exist: data/nuscenes/./data/nuscenes/samples/CAM_FRONT/n015-2018-11-21-19-38-26+0800__CAM_FRONT__1542800382862460.jpg
## 解决方法:路径不对,修改如下
projects/mmdet3d_plugin/datasets/pipelines/loading.py 48行注释掉# 8 报错8 RuntimeError: CUDA out of memory. Tried to allocate 2.12 GiB (GPU 0; 47.49 GiB total capacity; 39.66 GiB already allocated; 1.94 GiB free; 41.65 GiB reserved in total by PyTorch)
# 训练到第2个周期,显存爆了,48G不够用, 
# 解决方法:老板加钱, 贫民就别折磨自己了# 9 报错9 运行代码时报错ModuleNotFoundError: No module named 'projects'
# 解决方法:同一个终端中先运行下面代码, 然后重新执行你需要运行的代码
export PYTHONPATH=$PYTHONPATH:"./"import sys
sys.path.append("./")

2 数据集准备

准备数据参考

准备权重参考

2.1 生成数据集

pkl文件可以在准备数据参考链接自己下载,也可以直接运行脚本生成pkl文件。

nuscenes-mini数据集官方下载参考Fast-BEV代码复现实践第2.1节下载数据集篇

  • nuscenes-mini百度网盘下载地址, 下载后直接解压即可使用
# 1 官方直接提供数据集nuscenes.pkl文件下载
cd UniAD/data
mkdir infos && cd infos
# train_infos
wget https://github.com/OpenDriveLab/UniAD/releases/download/v1.0/nuscenes_infos_temporal_train.pkl # val_infos
wget https://github.com/OpenDriveLab/UniAD/releases/download/v1.0/nuscenes_infos_temporal_val.pkl # 2 使用nuscenes数据集生成pkl文件
./tools/uniad_create_data.sh# 本人使用nuscenes-mini生成pkl文件
python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/infos --extra-tag nuscenes --version v1.0-mini --canbus ./data/nuscenes# 3 准备motion_anchor
cd UniAD/data
mkdir others && cd others
wget https://github.com/OpenDriveLab/UniAD/releases/download/v1.0/motion_anchor_infos_mode6.pkl

2.2 下载权重

# 代理https://mirror.ghproxy.com/
# 1. 创建ckpts目录
mkdir ckpts && cd ckpts# 2. 下载预训练权重
# Also the initial state of training stage1 model
wget https://github.com/zhiqi-li/storage/releases/download/v1.0/bevformer_r101_dcn_24ep.pth# 3. Pretrained weights of stage1 model (perception part of UniAD)
wget https://github.com/OpenDriveLab/UniAD/releases/download/v1.0/uniad_base_track_map.pth# 4. Pretrained weights of stage2 model (fully functional UniAD)
wget https://github.com/OpenDriveLab/UniAD/releases/download/v1.0.1/uniad_base_e2e.pth

2.3 数据集、权重目录结构

nuscenes-mini生成的数据目录data如下, 权重目录ckpts如下

nuscenes-full全部数据集可能生成目录结构与下不同, 可参考准备数据参考

UniAD
├── projects/
├── tools/
├── ckpts/
│   ├── bevformer_r101_dcn_24ep.pth
│   ├── uniad_base_track_map.pth
│   ├── uniad_base_e2e.pth
data
├── infos
│   ├── nuscenes_infos_temporal_train.pkl
│   ├── nuscenes_infos_temporal_train_mono3d.coco.json
│   ├── nuscenes_infos_temporal_val.pkl
│   └── nuscenes_infos_temporal_val_mono3d.coco.json
├── nuscenes
│   ├── can_bus
│   ├── maps
│   ├── samples
│   ├── sweeps
│   ├── v1.0-mini
├──  others
│   └── motion_anchor_infos_mode6.pkl
├── ...

3 运行

# 1 修改配置
## 测试环境是否正常时,由于该模型占用显存比较大,先把/projects/configs/stage1_track_map/base_track_map.py与./projects/configs/stage2_e2e/base_e2e.py中的samples_per_gpu与workers_per_gpu两个参数设为1进行测试
samples_per_gpu=1
workers_per_gpu=1
## 正常训练时, 可以根据显存大小进行调整, 逐渐增大, 直到显存拉满 # 2 训练
## 2.1 脚本运行 
### 脚本命令最后的1指使用了1个gpu,因为本人的只有一张卡, 所以给1
./tools/uniad_dist_train.sh ./projects/configs/stage1_track_map/base_track_map.py 1## 2.2 不适用脚本
python ./tools/train.py ./projects/configs/stage1_track_map/base_track_map.py  --gpus 1
## 训练完成生成结果保存到./work_dirs目录下# 3 验证
./tools/uniad_dist_eval.sh ./projects/configs/stage1_track_map/base_track_map.py /PATH/TO/YOUR/CKPT.pth N_GPUS# 第一阶段, 不带轨迹
./tools/uniad_dist_eval.sh ./projects/configs/stage1_track_map/base_track_map.py ./ckpts/uniad_base_track_map.pth 1
## KeyError: 'traj'1阶段运行可视化有bug, 没有traj这个参数, 直接进行2阶段可视化# 第二阶段, 带轨迹
./tools/uniad_dist_eval.sh ./projects/configs/stage2_e2e/base_e2e.py ./ckpts/uniad_base_e2e.pth 1
## 运行后生成结果默认保存到output与test目录下,可视化结果需要output目录下results.pkl文件# 4 可视化
## 采用2阶段的生成results.pkl的结果进行可视化
./tools/analysis_tools/visualize/run.py --predroot output/results.pkl --out_folder ./vis-dir --demo_video test_demo.avi --project_to_cam True
# 运行完成后生成可视化结果保存./vis-dir目录, 显示如下

在这里插入图片描述

在这里插入图片描述


  • 更多bev算法部署参考
  • 如果您觉得本帖对您有帮助,感谢您一键三连支持一波^_^

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/660798.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GZIP格式解析和Deflate静态Huffman解压缩

GZIP是封装了Deflate压缩的格式文件&#xff0c;Deflate使用了无压缩、HuffmanLZ77进行压缩&#xff0c;Huffman包括静态Huffman和动态Huffman。 Java实现了GZIP格式解析&#xff0c;静态Huffman解压缩&#xff0c;CRC32校验 gzip文件格式解析代码&#xff1a; BinaryInputSt…

浅谈 HTTPS

文章目录 HTTPS 简介HTTPS 特点与 HTTP 的区别HTTPS 工作流程1. 服务端生成密钥对2. 服务端申请数字证书3. 服务端发送数字证书4. 客户端验证数字证书5. 客户端解析证书内容6. 客户端传送加密信息7. 服务端解密信息8. 双方协商生成会话密钥并交换9. 使用会话密钥进行通信 总结 …

数据挖掘之基于K近邻算法的原油和纳斯达克股票数据预测分析

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在当今日益复杂的金融市场中&#xff0c;准确地预测原油价格和纳斯达克股票市场的走势对于投资者、政…

【STM32】快速使用F407通用定时器输出可变PWM

网上的文章太啰嗦&#xff0c;这里直接开始。 使用的是STM32CubeIDE&#xff0c;HAL。以通用定时器TIM12在 通道2上输出1KHz的PWM为例。 要确定输出的引脚、定时器连接在哪里。 TIM2、3、4、5、12、13、14在APB1上&#xff0c;最大计数频率84M。 TIM1、8、9、10、11在APB2…

【docker 】Windows10安装 Docker

安装 Hyper-V Hyper-V 是微软开发的虚拟机&#xff0c;仅适用于 Windows 10。 按键&#xff1a; win键X &#xff0c;选着程序和功能 在查找设置中输入&#xff1a;启用或关闭Windows功能 选中Hyper-V 点击确定 安装 Docker Desktop for Windows Docker Desktop 官方下载…

vxeTable在vxe-modal提示工具栏无法关联表格

一般情况我们直接在created钩子中去关联工具栏&#xff0c;这样写正常情况下没有问题 const $tableRight this.$refs.tableRefRight;const $toolbarRight this.$refs.toolbarRefRight;if ($tableRight && $toolbarRight) {$tableRight.connect($toolbarRight);}在vxe…

管理能力学习笔记八:Will-Skill矩阵“盘“团队

如何把握带教中的“度”&#xff0c;才能在把事情做好的基础上&#xff0c;又能使员工获得成长呢&#xff1f; 需要做到 合理授权 & 适当辅导 如何做到&#xff1f; 通过使用 意愿-技能矩阵(Will-Skill Matrix) 辨别不同带教方法的适用情形&#xff0c;"盘"…

kube-prometheus部署到 k8s 集群

文章目录 **修改镜像地址****访问配置****修改 Prometheus 的 service****修改 Grafana 的 service****修改 Alertmanager 的 service****安装****Prometheus验证****Alertmanager验证****Grafana验证****卸载****Grafana显示时间问题** 或者配置ingress添加ingress访问grafana…

React复习笔记

基础语法 创建项目 借助脚手架&#xff0c;新建一个React项目(可以使用vite或者cra&#xff0c;这里使用cra) npx create-react-app 项目名 create-react-app是React脚手架的名称 启动项目 npm start 或者 yarn start src是源文件index.js相当于Vue的main.js文件。整个…

Go语言map

map 概念 在Go语言中&#xff0c;map 是一种内建的数据结构&#xff0c;它提供了一种关联式的存储机制&#xff0c;允许你以键值对的形式存储数据。每个键都是唯一的&#xff0c;并且与一个值相关联。你可以通过键来查找、添加、更新和删除值&#xff0c;这类似于其他编程语言…

低功耗数字IC后端设计实现典型案例| UPF Flow如何避免工具乱用Always On Buffer?

下图所示为咱们社区低功耗四核A7 Top Hierarchical Flow后端训练营中的一个案例&#xff0c;设计中存在若干个Power Domain&#xff0c;其中Power Domain2(简称PD2)为default Top Domain&#xff0c;Power Domain1&#xff08;简称PD1&#xff09;为一个需要power off的domain&…

Gateway Predicate断言(谓词)

是什么 Spring Cloud Gateway匹配路由作为Spring WebFlux HandlerMapping基础设施的一部分。 Spring Cloud Gateway包含许多内置的路由谓词工厂。 所有这些谓词都匹配HTTP请求的不同属性。 您可以使用逻辑 and 语句来联合收割机组合多个路由谓词工厂。 Predicate就是为了实现一…