首页 > 其他分享 >BEVFormer复现(使用docker搭建训练环境)

BEVFormer复现(使用docker搭建训练环境)

时间:2024-09-05 21:25:49浏览次数:7  
标签:data bevformer tools BEVFormer install pip docker 安装 复现

文章目录

一、使用docker创建环境

参考博客在docker中构建深度学习环境

1.1 创建容器

拉取合适的cuda版本镜像创建容器,这里拉取cuda11的镜像

docker run --gpus all --name bevformer --net=host -v /home/kemove/Downloads/data:/workspace/data -it nvidia/cuda:11.1.1-cudnn8-devel-ubuntu20.04 bash

1.2 在容器中安装常用的包

# 获取最新软件包
apt-get update
# 安装vim
apt-get install vim
# 安装ping命令
apt-get install iputils-ping
# 安装wget
apt-get install wget
# 安装ps
apt-get install procps
# 安装git
apt-get install git

一条命令安装

apt-get update &&
apt-get install vim iputils-ping wget procps git

1.3 安装miniconda

进入miniconda官网,选择命令行下载,获取命令行下载的指令。

Screenshot from 2024-01-18 10-17-46

新建终端输入如下指令。

mkdir -p /home/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /home/miniconda3/miniconda.sh
bash /home/miniconda3/miniconda.sh -b -u -p /home/miniconda3/

安装完成后,初始化miniconda和shell

/home/miniconda3/bin/conda init bash
/home/miniconda3/bin/conda init zsh

(可选)取消每次启动自动激活miniconda的基础环境base

conda config --set auto_activate_base false

1.4 安装Pytorch

a. 创建虚拟环境并激活,这里选择Python3.8,大于等于Python3.8均可。

conda create -n open-mmlab python=3.8 -y
conda activate open-mmlab

b. 根据官网指导安装PyTorch和torchvision

pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html
# Recommended torch>=1.9

二、环境配置

2.1 下载源码

git clone https://github.com/fundamentalvision/BEVFormer.git /workspace/bevformer

在coda环境中安装gcc>=5(可选)

conda install -c omgarcia gcc-6 # gcc-6.2

2.2 安装mmcv-full

pip install mmcv-full==1.4.0
# pip install mmcv-full==1.4.0 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html

2.3 安装mmdet和mmseg

pip install mmdet==2.14.0
pip install mmsegmentation==0.14.1

这里重新安装一下opencv
Install opencv-python-headless instead of opencv-python. Server (headless) environments do not have GUI packages installed which is why you are seeing the error. opencv-python depends on Qt which in turn depends on X11 related libraries.

pip uninstall opencv-python
pip install opencv-python-headless

Other alternative is to run sudo apt-get install -y libgl1-mesa-dev which will provide the missing libGL.so.1 if you want to use opencv-python. The libgl1-mesa-dev package might be named differently depending on your GNU/Linux distribution.
总结:在docker中没有GUI页面,所以使用opencv会报错,因此需要安装opencv-python-headless,或者安装缺少的libgl1

2.4 从源码安装mmdet3d

git clone https://github.com/open-mmlab/mmdetection3d.git
cd mmdetection3d
git checkout v0.17.1 # Other versions may not be compatible.
python setup.py install

安装完成后,报错信息如下:

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
yapf 0.40.2 requires importlib-metadata>=6.6.0, but you have importlib-metadata 4.2.0 which is incompatible.


解决方案:

pip install yapf==0.33.0

对于这种版本依赖产生的问题,比如说一个包需要另一个包的版本大于等于多少,一般都是前者版本太新了,通过降低前者的版本来解决依赖问题。
安装完yapf之后,重新执行命令安装

pip setup.py install

使用命令查看安装的版本

pip list | grep mm

2.5 安装Detectron2和Timm

pip install einops fvcore seaborn iopath==0.1.9 timm==0.6.13  typing-extensions==4.5.0 pylint ipython==8.12  numpy==1.19.5 matplotlib==3.5.2 numba==0.48.0 pandas==1.4.4 scikit-image==0.19.3 setuptools==59.5.0
python -m pip install 'git+https://github.com/facebookresearch/detectron2.git'

2.6 下载预训练模型

cd /workspace/BEVFormer
mkdir ckpts
cd ckpts
wget https://github.com/zhiqi-li/storage/releases/download/v1.0/r101_dcn_fcos3d_pretrain.pth

三、数据准备

3.1 下载数据集

nuScenes数据集可以前往官网下载,地址为https://www.nuscenes.org/nuscenes
需要注意:

  • nuScenes数据集有完整版和mini版两种,完整版有400多G,各位可以按照自己的硬盘空间决定
  • 使用完整版数据集训练时候,会报错误issue,下面的回答说换小一些的数据集就不会报错,尝试使用mini数据集确实不会报错,目前我还没有找到解决方案,可能需要算力更高的服务器或者更大的内存空间?因此推荐使用mini数据集测试。
    除了官网下载之外,可以在百度网盘下载我整理好的数据集,完整版和mini版均有。
    链接: https://pan.baidu.com/s/1as03f6dn5_5ZB7y37iBMBA 提取码: 398k

3.2 建立文件夹的软连接

ln -s /workspace/data/ /workspace/bevformer/

3.3 生成特定的标注文件

python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --version v1.0-mini --canbus ./data

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

bevformer
├── projects/
├── tools/
├── configs/
├── ckpts/
│   ├── r101_dcn_fcos3d_pretrain.pth
├── data/
│   ├── can_bus/
│   ├── nuscenes/
│   │   ├── maps/
│   │   ├── samples/
│   │   ├── sweeps/
│   │   ├── v1.0-test/
 |     |    ├── v1.0-trainval/
 |     |    ├── nuscenes_infos_temporal_train.pkl
 |     |    ├── nuscenes_infos_temporal_val.pkl

四、训练与测试

4.1 训练

我这里使用的单卡4090,训练bevformer_base显示显存不够,这里训练bevformer_small,需要注意的是,不管是base还是small,都需要将workers_per_gpu=4改为workers_per_gpu=0,否则会报错

./tools/dist_train.sh ./projects/configs/bevformer/bevformer_small.py 1

出现以下页面,说明模型已经愉快的开始训练啦

4.2 测试

./tools/dist_test.sh ./projects/configs/bevformer/bevformer_small.py ./work_dirs/bevformer_small/latest.pth 1

4.3 可视化

对4.2测试完成的结果进行可视化需要修改配置文件./tools/analsis_tools/visual.py

# 1. 引用库
# 28行
import os

# 2. 注释部分代码,不需要可视化界面,直接保存图片
# 468-469行
# if verbose:
	#	plt.show()

# 3. 修改main函数,472-484行
if __name__ == '__main__':
# 数据集路径,mini数据集为v1.0-mini,full数据集为v1.0-trainval
nusc = NuScenes(version='v1.0-mini', dataroot='./data/nuscenes', verbose=True)
# render_annotation('7603b030b42a4b1caa8c443ccc1a7d52')
# result_nusc.json路径
bevformer_results = mmcv.load('test/bevformer_small/Sun_May_12_23_12_20_2024/pts_bbox/results_nusc.json')
# 添加result目录
save_dir="result"
if not os.path.exists(save_dir):
	os.mkdir(save_dir)
sample_token_list = list(bevformer_results['results'].keys())
for id in range(0, 10):
	render_sample_data(sample_token_list[id],
	pred_data=bevformer_results,out_path=os.path.join(save_dir,sample_token_list[id]))

修改完成后执行

python tools/analysis_tools/visual.py

执行完成后在result文件夹下会保存可视化的结果,如图所示

打开图片可以看到可视化结果,绿色为真值标签,蓝色为预测结果

五、docker镜像

如果不想经历上述配的环境过程,我已经将配置好的docker镜像上传,拉取镜像构建容器之后,只需要配置数据集和预训练模型即可运行。
拉取镜像命令:

docker pull aitotra/bevformer:v1.0-mini

六、报错汇总

报错1 ImportError: libGL.so.1: cannot open shared object file: No such file or directory
修改:安装libsm6 libxext6 libgl1-mesa-glx
apt-get install libsm6 libxext6 libgl1-mesa-glx
 
报错2 ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
修改:安装libglib2.0-dev
apt-get install libglib2.0-dev

报错3 ModuleNotFoundError: No module named 'tools'
修改:添加python环境变量
export PYTHONPATH="./"

报错4
from data_converter import indoor_converter as indoor
File "/home/lin/Documents/BEVFormer/tools/data_converter/indoor_converter.py", line 6, in <module>
from tools.data_converter.s3dis_data_utils import S3DISData, S3DISSegData
ModuleNotFoundError: No module named 'tools.data_converter'

修改:./tools/data_converter/indoor_converter.py的6-8行位置左右
将from tools.data_converter.s3dis_data_utils import S3DISData, S3DISSegData改成由from data_converter.s3dis_data_utils import ...
也就是tools.data_converter换成data_converter

错误5 TypeError: FormatCode() got an unexpected keyword argument 'verify'
修改:更新yapf版本为0.40.1
pip install yapf==0.40.1

错误6 显存爆炸
修改:samples_per_gpu=1, 甚至samples_per_gpu=0
或者选择训练bevformer_small

对于以下这种报错
对于没有安装的包,直接使用pip安装即可,对于前者需要后者更新版本的包,对前者降低版本处理。

标签:data,bevformer,tools,BEVFormer,install,pip,docker,安装,复现
From: https://blog.csdn.net/m0_55127902/article/details/141938490

相关文章

  • Docker常用命令
    Docker常用命令1.docker部署Mysql命令解读dockerrun-d\--namemysql\-p3306:3306\-eTZ=Asia/Shanghai\-eMYSQL_ROOT_PASSWORD=123\mysqldockerrun;创建并且运行一个容器,-d让容器在后台运行–namemysql意思是给容器取名字,唯一的-p3306:3......
  • 深入解析 Docker exec 命令
      目录Dockerexec命令详解常用选项示例注意 Docker容器允许你在隔离的环境中运行应用程序,这样可以确保应用运行所需的环境是一致的,无论是在开发、测试还是生产环境中。当需要在Docker容器中执行命令时,通常会用到dockerexec命令。下面是对dockerexec命令......
  • docker命令
    Docker基础命令查看docker运行状态systemctlstatusdocker关闭dockersystemctlstopdocker启动dockersystemctlstartdocker重启dockersystemctlrestartdockerdocker设置随服务启动而自启动systemctlenabledocker查看docker版本号信息dockerversiondo......
  • docker安装skywalking
     创建网络dockernetworkcreate-dbridgeelastic 一、安装oapdockerrun--nameoap-d\-eTZ=Asia/Shanghai\-p12800:12800\-p11800:11800\--netelastic\--linkelasticsearch:elasticsearch\-eSW_STORAGE=elasticsearch7\-eSW_STORAGE_ES_CLUS......
  • RK3568------Openharmony 4.0-Release Docker移植、部署
    RK3568------Openharmony4.0-ReleaseDocker移植、部署文章目录RK3568------Openharmony4.0-ReleaseDocker移植、部署前言一、Docker简述1.1轻量级虚拟化1.2一致性1.3可移植性1.4高效的资源利用1.5易于部署和扩展二、移植思路三、移植实例四、遇到的问题五、......
  • docker制作tomcat镜像方法
    docker制作tomcat镜像方法【说明】制作tomcat镜像,需要在官网下载tomcatbinary压缩包。tomcat官网:https://tomcat.apache.org/download-90.cgi【配置方法】新建一个/opt/tomcat/目录,将下载tomcat与jdk安装包上传并解压缩:#mkdir-p/opt/tomcat;cd/opt/tomcat#......
  • 云服务器+docker:还在为项目上线苦恼?一文包你解决(保姆级教程,图文并茂,万字起步!!!)
    目录Blue留言机:学习视频以及参考资料 :1、学习之前的必备操作:第一步:购买服务器选择一台免费的云服务器(包白嫖的)配置服务器的一点说明:查看自己是否购买成功:第一种查看方式:第二种查看方式:第二步:对服务器配置做点更改第三步:下载xshell第四步:使用xshell第五步:下载XFT......
  • Centos 安装 Docker
    文章目录卸载旧版Docker(如果之前装过Docker的话)配置Docker的yum库和源sudu安装Docker启动和校验配置镜像加速卸载旧版Docker(如果之前装过Docker的话)yumremovedocker\docker-client\docker-client-latest\docker-common\docker-l......
  • Docker 部署 Redis (图文并茂超详细)
    部署Redis(Docker)[Step1]:拉取Redis镜像,推荐使用7的Redis版本dockerpullredis:7.0.12[Step2]:创建Redis相关目录➡️启动Redis容器➡️拷贝文件➡️授权文件夹➡️删除容器#创建Redis相关目录mkdir-p/data/redis/{conf,data,log}t......
  • Docker 配置国内镜像源
    由于GFW的原因,在下载镜像的时候,经常会出现下载失败的情况,此时就可以使用国内的镜像源。什么是镜像源:简单来说就是某个组织(学校、公司、甚至是个人)先通过某种手段将国外的镜像下载下来,然后上传到国内的网站,这样我们在国内就可以通过这个网站下载到镜像源‍起因笔者有一次在......