本文主要是介绍BEVFusion代码复现实践,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
bevfusion代码复现环境部署
- mit版本代码github地址
- 本人代码仓库地址 ,求个☆
^_^
- Fast-BEV代码复现实践
- BEVFustion-TensorRT部署
- BEV各算法环境部署实战汇总
- 如果觉得本文章可以,一键三连支持一波,
^_^
- 部署有问题的小伙伴欢迎留言和加
Q
裙-472648720
1 环境安装
python-3.8, torch-1.10.0, cuda-11.3
- 不要问其他版本能不能通,小白和不想折腾环境的童鞋直接抄作业
- 虚拟环境
- conda(含显卡驱动,cuda安装)构建虚拟环境参考链接
# 1 创建虚拟环境
conda create -n bevfusion python=3.8
# 2 激活虚拟环境
conda activate bevfusion
- 后面python包都是安装在虚拟环境中
- torch安装
cuda与torch版本查询 我用的torch-1.10.0
pip install torch==1.10.0+cu113 torchvision==0.11.0+cu113 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html
- 其他依赖安装
libgl
与libopenmpi-dev
# 安装mpi4py时依赖openmpi,不然会报错fatal error: mpi.h
sudo apt-get install wget libgl1-mesa-glx libglib2.0-0 openmpi-bin openmpi-common libopenmpi-dev libgtk2.0-dev git -y
openlib
相关包
pip install Pillow==8.4.0 tqdm torchpack mmcv-full==1.4.0 mmdet==2.20.0 nuscenes-devkit mpi4py==3.0.3 numba==0.48.0 setuptools==56.1.0 ninja==1.11.1 numpy==1.23.4 opencv-python==4.8.0.74 opencv-python-headless==4.8.0.74 yapf==0.40.1
安装mmcv-full
时,可能需要时间比较长,只要电脑没卡住,都是正常的
- 根据
setup.py
进行配置, 这里会安装mmdet3d
包
下载源码运行setup.py
,建议直接拉取本人的仓库代码,以免作者版本更新,遇到新的问题。
- 拉取源码
# 1 拉取官方源码
git clone https://github.com/mit-han-lab/bevfusion.git
# 本人仓库拉取
git clone https://gitee.com/linClubs/bevfusion.git
- 运行
setup.py
pip install -v -e .# -v 调试信息
# -e 可编辑模型
# . 寻找当前目录下的setup.py
- 运行完,显示如下:
mmdet3d
版本0.0.0
,不影响代码的运行
Successfully installed mmdet3d-0.0.0
- 查看环境
- 查看
torch,cuda
相关包版本号
pip list | grep torch
- 查看mmopenlab相关包版本号
pip list | grep mm
2 报错修改汇总
-
将
mmdet3d/ops/spconv/src/indice_cuda.cu
文件里面所有的4096
改为256
-
算力更改:setup.py文件中第22行左右,只保留一行
-gencode=arch=compute_86,code=sm_86"
- 参数86就是自己显卡的算力根据实际修改, 显卡算力查询
- 运行报错
- 1 错误1 运行
tools/visualize.py
报错No module named 'torchpack.utils.tqdm
修改:把tools/visualize.py
文件中from torchpack.utils.tqdm import tqdm
改成from tqdm import tqdm
,如下:
# from torchpack.utils.tqdm import tqdm
from tqdm import tqdm
- 2 错误2
mmdet3d/models/vtransforms/base.py
中2个forward
函数的参数都加上metas
变量,加到**kwargs
前即可,如下所示
def forward(
...
metas,
**kwargs,
):
# 3 错误3
# return _bootstrap._gcd_import(name[level:], package, level)
# ImportError: libGL.so.1: cannot open shared object file: No such file or directory
修改:安装opencv-python的依赖
sudo apt install libgl1-mesa-glx libglib2.0-0# 4 错误4:#raise AttributeError("module {!r} has no attribute "
#AttributeError: module 'numpy' has no attribute 'long'
修改:更新numpy的版本pip install numpy==1.23.4# 5 错误5:#text, _ = FormatCode(text, style_config=yapf_style, verify=True)
#TypeError: FormatCode() got an unexpected keyword argument 'verify'
修改:更新yapf版本
pip install yapf==0.40.1# 6 错误6:
# AttributeError: module 'distutils' has no attribute 'version'
修改:更新setuptools版本
pip install setuptools==58.4.0
- distributed分布式训练
- 如果需要多卡训练,请把
distributed
参数设置为True
,直接vs-code全局搜索找到distributed
3 运行
3.1 准备数据集
nuscenes-mini
数据集得加上--version v1.0-mini
参数,下以nuscenes-mini
作代码验证
具体下载细节参考Fast-BEV代码复现实践的第2小节数据集准备内容
下载后数据集后运行create_data.py
生成训练数据,
create_data.py
只运行下面代码第一行nuscenes-mini
即可
# nuscenes-mini
python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --version v1.0-mini# nuscenes
python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes
原始总共4个文件夹 maps,samples,sweeps,v1.0-mini
,运行create_data.py
后生成3
个pkl
文件和一个nuscenes_gt_database
文件夹,目录结构如下:
data└──nuscenes├── maps├── nuscenes_dbinfos_train.pkl├── nuscenes_gt_database├── nuscenes_infos_train.pkl├── nuscenes_infos_val.pkl├── samples├── sweeps└── v1.0-mini
3.2 预训练权重
./tools/download_pretrained.sh
- 运行后会在cd pretrained中生成7个权重文件,具体信息可以阅读
./tools/download_pretrained.sh
文件内容 - 使用
swint-nuimages-pretrained.pth
这个预训练权重进行训练 - 如果运行上
./tools/download_pretrained.sh
下载失败,可以直接在github的readme上点击下载地址 - 加文章末尾群号, 群文件也有
swint-nuimages-pretrained.pth
文件
3.3 训练
根据显卡性能修改参数:
- 只有一张显卡:
-np 1
configs/default.yaml
中修改epoch:max_epochs: 2
(本人只跑2个周期测试)configs/nuscenes/det/centerhead/lssfpn/camera/256x704/swint/default.yaml
文件中,测试环境是否正确时,建议设置samples_per_gpu
:1
,,后期训练根据硬件配置修改,如果使用其他配置文件,修改同理。- 测试环境时,
configs/nuscenes/default.yaml
中workers_per_gpu
参数修改为0:workers_per_gpu
:0
,samples_per_gpu: 1
torchpack dist-run -np 1 python tools/train.py configs/nuscenes/det/centerhead/lssfpn/camera/256x704/swint/default.yaml --model.encoders.camera.backbone.init_cfg.checkpoint pretrained/swint-nuimages-pretrained.pth --run-dir train_result
- 训练完成后会在
train_result目录下生成下面文件
结构如下:
└── train_result├── 20230809_203249.log├── 20230809_203249.log.json├── configs.yaml├── epoch_2.pth├── latest.pth -> epoch_2.pth├── logging└── tf_logs
# pretrained
torchpack dist-run -np 1 python tools/test.py configs/nuscenes/det/centerhead/lssfpn/camera/256x704/swint/default.yaml pretrained/swint-nuimages-pretrained.pth --eval bbox --out box.pkl# Custom
torchpack dist-run -np 1 python tools/test.py train_result/configs.yaml train_result/latest.pth --eval bbox --out box.pkl
运行后会生成box.pkl文档
3.5 visualize
- 首先改错误
1.2
小节3.
的2个错误
# Custom
torchpack dist-run -np 1 python tools/visualize.py train_result/configs.yaml --mode pred --checkpoint train_result/latest.pth --bbox-score 0.2 --out-dir vis_result# gt
torchpack dist-run -np 1 python tools/visualize.py train_result/configs.yaml --mode gt --checkpoint train_result/latest.pth --bbox-score 0.5 --out-dir vis_result# pretrained
torchpack dist-run -np 1 python tools/visualize.py train_result/configs.yaml --mode pred --checkpoint pretrained/swint-nuimages-pretrained.pth --bbox-score 0.2 --out-dir vis_result
- 运行后会在
vis_result
下生成可视化结果,如下:
└── vis_result├── camera-0├── camera-1├── camera-2├── camera-3├── camera-4├── camera-5└── lidar
运行--mode gt
模式,也就是标签数据可视化,自己训练权重效果比较差(原因:钞能力有限),可视化结果如下:
小伙伴们部署时遇到问题,欢迎各位小伙伴留言,欢迎进入bev交流抠抠裙472648720,大家一起学bev!
如果觉得文章可以,一键三连支持一波,瑞思拜^-^
这篇关于BEVFusion代码复现实践的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!