自动驾驶框架 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 directory
 mmdet3d/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.mfbz.cn/a/579879.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL 数据宝典】【索引原理】- 004 优化示例-join in exist

一、join 优化原理 1.1 基本连接方式介绍 JOIN 是 MySQL 用来进行联表操作的&#xff0c;用来匹配两个表的数据&#xff0c;筛选并合并出符合我们要求的结果集。 1.2 驱动表的定义 1.2.1 什么是驱动表 多表关联查询时,第一个被处理的表就是驱动表,使用驱动表去关联其他表.驱…

基于springboot的考勤管理系统

文章目录 项目介绍主要功能截图&#xff1a;部分代码展示设计总结项目获取方式 &#x1f345; 作者主页&#xff1a;超级无敌暴龙战士塔塔开 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &…

Zynq 7000 系列中成功执行BootROM的条件

Zynq 7000设备的启动需要正确的电压序列和I/O引脚控制。BootROM的流程由复位类型、启动模式引脚设置以及启动映像来控制。BootROM对所选启动设备的引脚连接有特定的要求。 Zynq 7000 SoC设备具有电源、时钟和复位要求&#xff0c;这些要求必须得到满足&#xff0c;才能成功执行…

java:SpringBootWeb请求响应

Servlet 用java编写的服务器端程序 客户端发送请求至服务器 服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器 服务器将响应返回给客户端 javaweb的工作原理 在SpringBoot进行web程序开发时,内置了一个核心的Servlet程序DispatcherServlet,称之…

RocketMQ快速入门:namesrv、broker、dashboard的作用及消息发送、消费流程(三)

0. 引言 接触rocketmq之后&#xff0c;大家首当其冲的就会发现需要安装3个组件&#xff1a;namesrv, broker, dashboard&#xff0c;其中dashboard也叫console&#xff0c;为选装。而这几个组件之前的关系是什么呢&#xff0c;消息发送和接收的过程是如何传递的呢&#xff0c;…

应用实战 | 别踩白块小游戏,邀请大家来PK挑战~

“踩白块会输”是一个简单的微信小程序游戏&#xff0c;灵感来自当年火热的别踩白块游戏&#xff0c;程序内分成三个模块&#xff1a;手残模式、经典模式和极速模式&#xff0c;分别对应由易到难的三种玩法&#xff0c;可以查看游戏排名。动画效果采用JS实现&#xff0c;小程序…

Spark-机器学习(6)分类学习之支持向量机

在之前的文章中&#xff0c;我们学习了分类学习之朴素贝叶斯算法&#xff0c;并带来简单案例&#xff0c;学习用法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢…

基于YOLOV8+Pyqt5无人机航拍太阳能电池板检测系统

1.YOLOv8的基本原理 YOLOv8是一种前沿的目标检测技术&#xff0c;它基于先前YOLO版本在目标检测任务上的成功&#xff0c;进一步提升了性能和灵活性&#xff0c;在精度和速度方面都具有尖端性能。在之前YOLO 版本的基础上&#xff0c;YOLOv8 引入了新的功能和优化&#xff0c;…

SpringBoot 常用注解总结超详细(面试)

目录 一、组件相关&#x1f381; Controller Service Repository Component 二、依赖注入相关&#x1f349; Autowired Resource 根据类型注入&#xff08;By Type&#xff09; 根据名称注入&#xff08;By Name&#xff09; 区别 Qualifier Resource 和 Qualifie…

C语言浮点型数据在内存中的存储及取出等的介绍

文章目录 前言一、浮点型在内存中的存储二、浮点数存储规则三、浮点数在内存中的存储&#xff08;32位&#xff09;float类型四、浮点数在内存中的存储&#xff08;64位&#xff09;double类型五、指数E从内存中取出分成三种情况1. E不全为0或不全为12. E全为03. E全为1 六、有…

设计模式之工厂模式FactoryPattern(二)

一、简单工厂 package com.xu.demo.factoryPattern;/*** 简单工厂模式类*/ public class SimpleFactoryPattern {public static Phone create(String name) {//根据输入对象名称判断返回相匹配的对象if("IPhone".equals(name)) {//返回对象return new IPhone();}else…

Java算法--队列

队列 队列介绍 队列是一个有序列表&#xff0c;可以用数组或是链表来实现。遵循先入先出的原则。即&#xff1a;先存入队列的数据&#xff0c;要先取出。后存入的要后取出 数组模拟队列思路 队列本身是有序列表&#xff0c;若使用数组的结构来存储队列的数据&#xff0c;则…

自动驾驶新书“五一”节马上上市了

我和杨子江教授合写的《自动驾驶系统开发》终于在清华大学出版社三校稿之后即将在五一节后出版。 清华大学汽车学院的李克强教授和工程院院士撰写了序言。 该书得到了唯一华人图灵奖获得者姚期智院士、西安交大管晓宏教授和科学院院士以及杨强教授和院士等的推荐&#xff0c;…

git变更远端仓库名之后如何修改本地仓库配置的另一种方法?(删remote指针、添加、绑定master)

背景 如果某个远端的仓库地址变化后&#xff0c;本地仓库可以修改对应的remote。 之前谈过几种方法&#xff0c;比如重新设置一个新的remote的指针&#xff0c;绑定到新地址。然后删除origin&#xff0c;然后把新指针mv到origin。比如直接seturl修改&#xff08;git remote se…

基于HTML+CSS+JavaScript的表白网页

基于HTMLCSSJavaScript的表白网页 前言效果截图&#xff08;为GIF格式&#xff09;部分代码领取源码下期更新预报 前言 大部分人都有喜欢的人&#xff0c;学会这个表白代码&#xff0c;下次表白你肯定会成功。 效果截图&#xff08;为GIF格式&#xff09; 部分代码 index.htm…

使用 Python 和 DirectShow 从相机捕获图像

在 Python 中使用 OpenCV 是视觉应用程序原型的一个非常好的解决方案,它允许您快速起草和测试算法。处理从文件中读取的图像非常容易,如果要处理从相机捕获的图像,则不那么容易。OpenCV 提供了一些基本方法来访问链接到 PC 的相机(通过对象),但大多数时候,即使对于简单的…

在no branch上commit后,再切换到其他分支,找不到no branch分支的修改怎么办?

解决办法 通过git reflog我们可以查看历史提交记录&#xff0c;这里的第二条提交&#xff08;fbd3ea8&#xff09;就是我在no branch上的提交。 再通过git checkout -b backup fbd3ea8&#xff0c;恢复到上次提交的状态&#xff0c;并且为其创建个分支backup&#xff0c;此时…

B+tree - B+树深度解析+C语言实现+opencv绘图助解

Btree - B树深度解析C语言实现opencv绘图助解 1. 概述2. Btree介绍3. Btree算法实现3.1 插入分裂 3.2 删除向右借位&#xff08;左旋&#xff09;向左借位&#xff08;右旋&#xff09;合并 3.3 查询和遍历3.3.1 查询3.3.2 遍历 3.4 优化优化1(匀key)优化2(升级key)优化3(拓展兄…

池化整合多元数据库,zData X 一体机助力证券公司IT基础架构革新

引言 近期&#xff0c;云和恩墨 zData X 多元数据库一体机&#xff08;以下简称 zData X&#xff09;在某证券公司的OA、短信和CRM业务系统中成功上线&#xff0c;标志着其IT基础架构完成从集中式存储向池化高性能分布式存储的转变。zData X 成功整合了该证券公司使用的达梦、O…

SEO之链接原理(三)

初创企业需要建站的朋友看这篇文章&#xff0c;谢谢支持&#xff1a; 我给不会敲代码又想搭建网站的人建议 &#xff08;接上一篇&#xff09; 4、 Google PR PR是 PageRank 的缩写。Google PR理论是所有基于链接的搜索引擎理论中最有名的。 PR是Google创始人之一拉里佩奇发明…