BEVFormer复现(使用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安装即可,对于前者需要后者更新版本的包,对前者降低版本处理。

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aitotra01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值