自动驾驶框架 UniAD环境部署

news2024/11/19 1:21:44
  • 感谢大佬们的开源工作 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.coloradmin.cn/o/1629594.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[每周一更]-(第94期):认识英伟达显卡

英伟达显卡&#xff1a;引领图形计算的领先者&#xff0c;显卡也常称为GPU&#xff08;图形处理器 Graphics processing unit&#xff09;&#xff0c;是一种专门在个人电脑、工作站、游戏机和一些移动设备&#xff08;如平板电脑、智能手机等&#xff09;上执行绘图运算工作的…

【STM32+HAL】三轴按键PS2摇杆

一、准备工作&#xff1a; 有关CUBEMX的初始化配置&#xff0c;参见我的另一篇blog&#xff1a;【STM32HAL】CUBEMX初始化配置 有关定时器触发ADC模式配置&#xff0c;详见【STM32HAL】ADC采集波形实现 二、所用工具&#xff1a; 1、芯片&#xff1a; STM32F407VET6 2、CUBE…

大数据面试题 —— Spark数据倾斜及其解决方案

目录 1 调优概述2 数据倾斜发生时的现象3 数据倾斜发生的原理4 如何定位导致数据倾斜的代码4.1 某个 task 执行特别慢的情况4.2 某个 task 莫名其妙内存溢出的情况5 查看导致数据倾斜的 key 的数据分布情况6 数据倾斜的解决方案6.1 使用 Hive ETL 预处理数据6.2 过滤少数导致倾…

Ubuntu中的 Everything 搜索软件 ==> fsearch

本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 在 Windows 中&#xff0c;我经常使用 Everything 来进行文件搜索&#xff0c;搜索效率比 Windows 自带的高出千百倍。 那么在 Ubuntu 系统中&#xff0c;有没有类似的软件呢&#xff1f;那必须有&#xff0c;它就是 FSearch 。…

JavaScript-Web API基本认知-什么是DOM和BOM

基本认知 var、let、const选用Web API作用和分类什么是DOM什么是DOM树DOM对象&#xff08;重要&#xff09;什么是BOM var、let、const选用 var or let or const &#xff1f; 首先var 先排除&#xff0c;老派写法&#xff0c;问题很多&#xff0c;可以淘汰掉… let or const …

Docker 的数据管理 与 Docker 镜像的创建

目录 一、Docker 的数据管理 1.1.数据卷 1.2.数据卷容器 1.3.容器互联&#xff08;使用centos镜像&#xff09; 二、Docker 镜像的创建 2.1.基于现有镜像创建 2.2.基于本地模板创建 2.3.基于Dockerfile创建 2.3.1联合文件系统&#xff08;UnionFs&#xff09; 2.3.2…

多线程模型浅谈

优质博文&#xff1a;IT-BLOG-CN 笔者近期在维护的项目中发现了一些比较随机的问题&#xff0c;时有时无的&#xff0c;排查之后发现是使用多线程导致的&#xff0c;恍然之下研究了下多线程的底层模型相关知识&#xff0c;现不大家简要分享下。 一个程序进程可包含多个线程&am…

全志ARM-超声波测距

超声波测距模块是用来测量距离的一种产品&#xff0c;通过发送和收超声波&#xff0c;利用时间差和声音传播速度&#xff0c; 计算出模块到前方障碍物的距离 1.测距原理&#xff1a; 给Trig端口至少10us的高电平发送声波&#xff0c;Echo信号&#xff0c;由低电平跳转到高电平…

【语音识别】搭建本地的语音转文字系统:FunASR(离线不联网即可使用)

参考自&#xff1a; 参考配置&#xff1a;FunASR/runtime/docs/SDK_advanced_guide_offline_zh.md at main alibaba-damo-academy/FunASR (github.com)参考配置&#xff1a;FunASR/runtime/quick_start_zh.md at 861147c7308b91068ffa02724fdf74ee623a909e alibaba-damo-aca…

绘唐科技AIGC怎么激活

绘唐科技AIGC怎么激活绘唐科技AIGC怎么激活绘唐科技AIGC怎么激活绘唐科技AIGC怎么激活 这里激活免费3天体验 Docshttps://qvfbz6lhqnd.feishu.cn/wiki/D3YLwmIzmivZ7BkDij6coVcbn7W

【Django】初识Django快速上手

Django简介 Django是一个高级的、开源的Python Web框架&#xff0c;旨在快速、高效地开发高质量的Web应用程序 https://developer.mozilla.org/zh-CN/docs/Learn/Server-side/Django/Introduction 安装Django pip install Django如果要知道安装的Django的版本&#xff0c;可…

机器学习:深入解析SVM的核心概念(问题与解答篇)【一、间隔与支持向量】

直接阅读原始论文可能有点难和复杂&#xff0c;所以导师直接推荐我阅读周志华的《西瓜书》&#xff01;&#xff01;然后仔细阅读其中的第六章&#xff1a;支持向量机 间隔与支持向量 问题一&#xff1a;什么叫法向量&#xff1f;为什么是叫法向量 在这个线性方程中&#xff…

新科技辅助器具赋能视障生活:让盲人出行融入日常

随着科技日新月异的发展&#xff0c;一款名为蝙蝠避障专为改善盲人日常生活的盲人日常生活辅助器具应运而生&#xff0c;它通过巧妙整合实时避障与拍照识别功能&#xff0c;成功改变了盲人朋友们的生活格局&#xff0c;为他们提供了更为便捷、高效的生活体验。 这款非同…

数据结构——二叉树的顺序存储(堆)(C++实现)

数据结构——二叉树的顺序存储&#xff08;堆&#xff09;&#xff08;C实现&#xff09; 二叉树可以顺序存储的前提堆的定义堆的分类大根堆小根堆 整体结构把握两种调整算法向上调整算法递归版本 非递归版本向下调整算法非递归版本 向上调整算法和向下调整算法的比较 我们接着…

1. 房屋租赁管理系统(Java项目 springboot/vue)

1.此系统的受众 1.1 在校学习的学生&#xff0c;可用于日常学习使用或是毕业设计使用 1.2 毕业一到两年的开发人员&#xff0c;用于锻炼自己的独立功能模块设计能力&#xff0c;增强代码编写能力。 1.3 亦可以部署为商化项目使用。 2. 技术栈 jdk8springbootvue2mysq5.7&8…

论文阅读之MMSD2.0: Towards a Reliable Multi-modal Sarcasm Detection System

文章目录 论文地址主要内容主要贡献模型图技术细节数据集改进多视图CLIP框架文本视图图像视图图像-文本交互视图 实验结果 论文地址 https://arxiv.org/pdf/2307.07135 主要内容 这篇文章介绍了一个名为MMSD2.0的多模态讽刺检测系统的构建&#xff0c;旨在提高现有讽刺检测系…

Amazon云计算AWS之[5]关系数据库服务RDS

文章目录 RDS的基本原理主从备份和下读写分离 RDS的使用 RDS的基本原理 Amazon RDS(Amazon Relational Database Service) 将MySQL数据库移植到集群中&#xff0c;在一定的范围内解决了关系数据库的可扩展性问题。 MySQL集群方式采用Share-Nothing架构。每台数据库服务器都是…

JavaEE——介绍 HTTPServlet 三部分使用与 cookie 和 session 的阐述

文章目录 一、HTTPServlet介绍其中的关键 三个方法 二、HTTPServletRequest(处理请求)1.分块介绍方法作用get 为前缀的方法字段中 含有 getParameter 字段 的方法(前后端交互)&#xff1a;字段中 含有 getHeader 字段 的方法&#xff1a; 2.解释前后端的交互过程3.使用 json 格…

【小迪安全2023】第59天:服务攻防-中间件安全CVE复现lSApacheTomcatNginx

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

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

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