UniAD本地测试(使用docker搭建训练环境)

ops/2024/10/23 18:29:17/

文章目录

  • 一、构建docker镜像
  • 二、从docker镜像构建容器
    • 2.1 构建容器
    • 2.2 测试环境是否正常
  • 三、下载预训练权重文件
  • 四、数据准备
    • 4.1 下载数据集
    • 4.2 建立文件夹的软连接
    • 4.3 生成数据信息
      • 4.3.1 调整包的版本
    • 4.4 准备Motion Anchors
  • 五、训练评估
    • 5.1 测试环境是否正常
    • 5.2 训练模型
    • 5.3 评估模型

docker_1">一、构建docker镜像

UniAD源码地址https://github.com/OpenDriveLab/UniAD,源码文件中docker文件下的Dockerfile提供了构建环境镜像的文件,我根据这一文件略微做了修改,以下是我使用的Dockerfile,亲测可以构建成功。


FROM nvidia/cuda:11.1.1-cudnn8-devel-ubuntu20.04ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Stockholm
ENV http_proxy ""
ENV https_proxy ""RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneENV NVIDIA_DRIVER_CAPABILITIES ${NVIDIA_DRIVER_CAPABILITIES},compute,displaySHELL [ "/bin/bash", "--login", "-c" ]# To fix GPG key error when running apt-get update
RUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pub
RUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub#install libs first
RUN apt-get update -q && \apt-get install -q -y \wget \python3.8-dev \python3-pip \python3.8-tk \git \ninja-build \ffmpeg libsm6 libxext6 libglib2.0-0 libsm6 libxrender-dev libxext6 \&& apt-get clean \&& rm -rf /var/lib/apt/lists/*# intall pytorch
ENV TORCH_CUDA_ARCH_LIST="6.0 6.1 7.0 7.5 8.0+PTX"
ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all"
ENV PATH=${PATH}:/usr/local/cuda:/usr/local/cuda/bin
RUN pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.htmlRUN pip uninstall numpy scikit-image pandas matplotlib shapely setuptools urllib3 -y
RUN pip install numpy==1.20.0 scikit-image==0.19.3 pandas==1.4.4 matplotlib==3.6 shapely==1.8.5.post1 setuptools==59.5.0
RUN pip install scikit-learn pyquaternion cachetools descartes future tensorboard
RUN pip install IPython# Install MMCV-series
ENV CUDA_HOME=/usr/local/cuda
ENV FORCE_CUDA="1"RUN pip install mmcv-full==1.4.0 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html
RUN pip install mmdet==2.14.0
RUN pip install mmsegmentation==0.14.1# Install mmdetection3d
RUN git clone --branch v0.17.1 --single-branch https://github.com/open-mmlab/mmdetection3d.git
WORKDIR /mmdetection3d
RUN pip install scipy==1.7.3 scikit-image==0.20.0
RUN pip install --no-cache-dir -v -e .# Copy to python dist-package foldder
RUN cp -r /mmdetection3d/mmdet3d /usr/local/lib/python3.8/dist-packages# Install UniAD from source
WORKDIR /
RUN git clone https://github.com/OpenDriveLab/UniAD.git
WORKDIR /UniAD
RUN pip install -r requirements.txt
# We need this old version of torchmetrics to run UniAD...
RUN pip install torchmetrics==0.8.2# Link python to python3
RUN ln /usr/bin/python3 /usr/bin/python
  1. 与Dockerfile文件同级,新建终端,执行以下命令,构建镜像
docker build --network=host -t uniad:v1.0 .
  • 构建成功后如图所示
    image.png

docker_81">二、从docker镜像构建容器

2.1 构建容器

docker run --name UniAD --gpus all -v /home/kemove/Downloads/data:/root/data -e NVIDIA_DRIVER_CAPABILITIES=all -v /etc/localtime:/etc/localtime:ro   -v /tmp/.X11-unix:/tmp/.X11-unix   -e DISPLAY=unix$DISPLAY   -e GDK_SCALE   -e GDK_DPI_SCALE --network=host --privileged -v /dev/bus/usb:/dev/bus/usb -it uniad:v1.0 /bin/bash
  • 指令解析
    • docker run:Docker 命令,用于运行容器
    • --name UniAD:给容器指定一个名字 UniAD,便于管理和识别
    • --gpus all:启用 GPU 支持,并将所有可用的 GPU 分配给容器,需要确保 Docker 已正确配置 NVIDIA 容器工具包
    • -v /home/kemove/Downloads/data:/root/data:使用 -v 选项挂载卷,将主机上的 /home/kemove/Downloads/data 目录挂载到容器中的 /root/data 目录,这允许容器访问主机上的数据目录,这里把nuScenes数据集挂载进来
    • -e NVIDIA_DRIVER_CAPABILITIES=all:设置环境变量NVIDIA_DRIVER_CAPABILITIESall,启用所有的 GPU 功能(如图形加速、视频编码等),以确保容器可以使用 GPU 所有的能力
    • -v /etc/localtime:/etc/localtime:ro:将主机的 /etc/localtime 挂载到容器的 /etc/localtime,并以只读模式(ro),保证容器中的时间和主机系统一致
    • -v /tmp/.X11-unix:/tmp/.X11-unix:挂载主机的 X11 Unix socket,使容器可以使用主机的图形显示系统。这在容器需要运行图形界面应用时非常有用
    • -e DISPLAY=unix$DISPLAY:设置 DISPLAY 环境变量,指定容器使用主机的 X11 显示,使得容器内的 GUI 应用可以在主机上显示,unix$DISPLAY 表示使用主机上的显示
    • -e GDK_SCALE-e GDK_DPI_SCALE:这些环境变量用于调整 GTK 应用的缩放比例和 DPI 设置,通常用于高分辨率显示器,如果设置了这些变量,容器中的 GTK 应用将按照指定的缩放比例显示
    • --network=host:指定容器使用主机的网络堆栈,这意味着容器将与主机共享相同的网络接口和 IP 地址,适用于需要与主机紧密集成的网络应用
    • --privileged:以“特权模式”运行容器,授予容器更多的权限,允许它访问主机上的所有设备(如 USB 设备、显卡等),特权模式通常用于需要直接操作硬件的容器
    • -v /dev/bus/usb:/dev/bus/usb:挂载主机的 USB 设备目录 /dev/bus/usb,允许容器访问主机的 USB 设备(如连接的相机、存储设备等)
    • -it-i 表示保持标准输入打开,以便与容器交互;-t 表示分配一个伪终端,使你可以在容器内使用命令行
    • uniad:v1.0:要运行的 Docker 镜像的名称和版本号(uniad:v1.0
    • /bin/bash:容器启动后运行的命令,在这种情况下,启动一个 Bash shell,允许用户在容器内执行交互式命令
      PS:配置 NVIDIA 容器工具包参考我的博客在docker中构建深度学习环境
      nuScenes数据集下载参考我的博客BEVFormer复现(使用docker搭建训练环境)

2.2 测试环境是否正常

  1. 测试显卡是否能够正常调用
nvidia-smi

Screenshot from 2024-09-22 13-50-33.png
2. 测试pytorch是否正常调用cuda等,依次输入以下指令,显示结果如图所示,说明环境基本正常

python
import torch
print(torch.__version__)
print(torch.cuda.is_available())
print(torch.backends.cudnn.version())

Screenshot from 2024-09-22 13-50-48.png

三、下载预训练权重文件

  • 在Dockerfile文件中,已经下载UniAD的源码和依赖文件,因此不再需要下载源码,只需下载预训练的权重
cd /UniAD
mkdir ckpts && cd ckpts
# Pretrained weights of bevformer
# Also the initial state of training stage1 model
wget https://github.com/zhiqi-li/storage/releases/download/v1.0/bevformer_r101_dcn_24ep.pth
# Pretrained weights of stage1 model (perception part of UniAD)
wget https://github.com/OpenDriveLab/UniAD/releases/download/v1.0/uniad_base_track_map.pth
# Pretrained weights of stage2 model (fully functional UniAD)
wget https://github.com/OpenDriveLab/UniAD/releases/download/v1.0.1/uniad_base_e2e.pth

四、数据准备

4.1 下载数据集

可以在百度网盘下载我整理好的数据集,完整版和mini版均有
链接: https://pan.baidu.com/s/1as03f6dn5_5ZB7y37iBMBA 提取码: 398k

4.2 建立文件夹的软连接

  • 从镜像构建容器时,已经将数据集挂载到了/root/data目录下,此处将数据集从/root/data软链接到/UniAD/data/即可
ln -s /root/data/ /UniAD/data/

4.3 生成数据信息

官方提供了两种方案

  1. 下载准备好的数据信息
cd /UniAD/data
mkdir infos && cd infos
wget https://github.com/OpenDriveLab/UniAD/releases/download/v1.0/nuscenes_infos_temporal_train.pkl  # train_infos
wget https://github.com/OpenDriveLab/UniAD/releases/download/v1.0/nuscenes_infos_temporal_val.pkl  # val_infos
  1. 自己生成数据信息
cd /UniAD/data
mkdir infos
cd /UniAD
./tools/uniad_create_data.sh
# This will generate nuscenes_infos_temporal_{train,val}.pkl

这里更推荐使用第二种方式,使用第二种方式可以检查以下程序能不能正常运行。

4.3.1 调整包的版本

这里果然会因为包的版本问题产生冲突,首先报错

  File "/usr/local/lib/python3.8/dist-packages/PIL/_typing.py", line 10, in <module>NumpyArray = npt.NDArray[Any]
AttributeError: module 'numpy.typing' has no attribute 'NDArray'

查询得知,这是因为numpy的版本过低,不支持NDArry,建议安装1.20.0版本以上,使用指令pip list | grep numpy查看numpy的版本发现当前numpy版本为1.20.0,因此使用以下指令更新numpy

pip install --upgrade numpy

更新完成后,包的依赖关系不满足,报了一堆版本依赖的错误,如图所示
image.png
开始逐个解决,分析发现以下问题

  • numpy更新完后版本过高
  • matplotlib版本过高
  • scikit-image版本过高
  • nuscenes-devkit版本过高
## 后来发现网上的信息是错误的,安装1.19.0版本的numpy完美解决NDArry报错的问题
pip install numpy==1.19.0
## matplotlib降版本
pip install matplotlib==3.5.3
## nuscenes-devkit降版本
pip install nuscenes-devkit==1.1.5
## scikit-image降版本
pip install scikit-image==0.19.3

最后用以下指令检查,显示没有损坏的依赖关系,万事大吉

pip check

image.png
重新执行以下指令生成pkl文件

cd /UniAD
./tools/uniad_create_data.sh

出现以下界面说明开始正常生成,数据集较大需要很久,这个时候就可以去遛个弯了
Screenshot from 2024-09-22 16-05-05.png

4.4 准备Motion Anchors

cd /UniAD/data
mkdir others && cd others
wget https://github.com/OpenDriveLab/UniAD/releases/download/v1.0/motion_anchor_infos_mode6.pkl

生成成功后,文件结构如下所示:

UniAD
├── projects/
├── tools/
├── ckpts/
│   ├── bevformer_r101_dcn_24ep.pth
│   ├── uniad_base_track_map.pth
|    ├── uniad_base_e2e.pth
├── data/
│   ├── nuscenes/
│   │   ├── can_bus/
│   │   ├── maps/
│   │   ├── samples/
│   │   ├── sweeps/
│   │   ├── v1.0-test/
│   │   ├── v1.0-trainval/
│   ├── infos/
│   │   ├── nuscenes_infos_temporal_train.pkl
│   │   ├── nuscenes_infos_temporal_val.pkl
│   ├── others/
│   │   ├── motion_anchor_infos_mode6.pkl

五、训练评估

5.1 测试环境是否正常

cd /UniAD
./tools/uniad_dist_eval.sh ./projects/configs/stage1_track_map/base_track_map.py ./ckpts/uniad_base_track_map.pth 1

Screenshot from 2024-09-22 19-31-27.png
这里会报错说numpy库没有typing模块,总之感觉还是numpy库版本的问题,因此尝试安装不同版本的numpy,最后安装的numpy==1.21.0解决了问题

pip install numpy==1.21.0

环境正常则输出结果如下:
image.png

5.2 训练模型

./tools/uniad_dist_train.sh ./projects/configs/stage1_track_map/base_track_map.py 1

果然,显存是不够的,报错如图
Screenshot from 2024-10-16 18-36-26.png
端到端果然不是一般实验室能玩得起的,这里可以尝试更改图片大小和缩小BEV网格的大小,尝试能不能训练起来,但训练效果肯定会大打折扣,这里就不实验了。

5.3 评估模型

4090推理还是可以的

./tools/uniad_dist_eval.sh ./projects/configs/stage2_e2e/base_e2e.py ./ckpts/uniad_base_e2e.pth  1

部分推理结果如图所示
image.png


http://www.ppmy.cn/ops/127893.html

相关文章

Docker 下安装 ElasticSearch 和 Kibana (单节点)

Docker 下安装 ElasticSearch 和 Kibana &#xff08;单节点&#xff09; Docker 安装 ES 创建 docker 网络 需要 docker 中的 es 和 kibana 进行网络通信&#xff0c;使用 docker 网络进行容器间通信 # 创建名为 es-network 的桥接网络 docker network create es-network# 查…

100种算法【Python版】第4篇——回溯法

念念不忘,必有回响 1 回溯法原理2 示例说明2.1 生成子集2.1.1 回溯法思路2.1.2 Python3代码2.2 N皇后问题2.2.1 回溯法思路2.2.2 Python3代码3 回溯法应用3.1 组合3.1.1 回溯法思路3.1.2 Python3代码3.2 数独 Solver3.2.1 回溯法思路3.2.2 Python3代码3.3 多重背包问题3.3.1 P…

‌竞赛报名网站毕设计算机毕业设计基于SpringBootSSM框架

目录 一.摘要 二.概述 2.1 国内外研究 三、需求分析 3.1 实现步骤 四. 功能描述 4.2 功能图展示 4.3相关技术 一.摘要 本文旨在设计并实现一个竞赛报名网站&#xff0c;以满足各类竞赛活动的在线报名需求。通过对用户需求的分析&#xff0c;确定了网站的主要功能&…

明日周刊-第23期

十月已过半&#xff0c;气温也转凉了&#xff0c;大家注意保温哦。冬吃萝卜&#xff0c;夏吃姜&#xff0c;在快要到来的冬季大家可以选择多吃点萝卜。 配图是本周末去商场抓娃娃的时候拍的照片&#xff0c;现在抓娃娃单次普遍都控制在1块钱以下了&#xff0c;还记得多年前的抓…

软件定义汽车时代,当前智能汽车软件开发模式是什么?

软件定义汽车&#xff0c;EE架构从分布式向中央计算演进。当前智能汽车控制器正在从智驾域、座舱域、车身域、动力域和底盘域等五域于一体的网关时代向可能仅剩下前区、后区控制器的中央计算时代演进。 智舱一体、行泊一体大融合情况下&#xff0c;智能汽车的开发模式是什么&a…

【CSS】网页美学的魔法画笔

我的主页&#xff1a;2的n次方_ CSS 用于定义网页的样式&#xff0c;包括字体、颜色、布局、背景等各个方面。它与 HTML 紧密结合&#xff0c;HTML 负责构建网页的结构&#xff0c;而 CSS 则负责美化这个结构。 1. 三种引入方式 1.1. 行内样式 直接在标签内引用 style …

【python3】函数注解

Python 函数注解 (Function Annotations) Python 函数注解 (Function Annotations)函数注解的基本语法基本语法格式示例 特殊类型注解注解信息的存储与访问函数注解的实际用途注意事项小结 函数注解是 Python 的一种特性&#xff0c;用于为函数的参数和返回值添加 元数据。注解…

线下陪玩导游系统软件源码,家政预约服务源码(h5+小程序+app)

游戏陪玩系统源码陪玩小程序源码搭建基于PHP&#xff0b;MySQL陪玩系统app源码陪玩系统定制开发服务、成品陪玩系统源码 系统基于Nginx或者Apache PHP7.3 数据库mysql5.6 前端为uniapp-vue2.0 后端为thinkphp6 有域名授权加密&#xff0c;其他开源可二开 演示源码下载 开…