bevfusion(multi task) 复现笔记

复现的笔记,有问题大家可以一起交流交流

 paper:https://arxiv.org/abs/2205.13542

 code:GitHub - mit-han-lab/bevfusion: [ICRA'23] BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird's-Eye View Representation

1 基础环境配置

电脑配置:19-13900K,RTX4090

显卡驱动:525.116.04

环境:     Ubuntu20.04

                python=3.8.0

                torch=1.10.0

                cuda=11.3

                cudnn=8.2

不同的模型存在包的版本冲突,最好使用虚拟环境

1.1 创建虚拟环境

# 自己的ubuntu先安装anacconda3或者miniconda

# 创建虚拟环境
conda create -n bevfusion_multi_task python=3.8.0

#进入虚拟环境
conda activate bevfusion_multi_task

1.2 安装各种依赖包

根据自己的机器的型号安装相应的cuda和torch包。Previous PyTorch Versions | PyTorchInstalling previous versions of PyTorchicon-default.png?t=N7T8https://pytorch.org/get-started/previous-versions/复现使用的版本如下:

conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=11.3 -c pytorch -c conda-forge -y

安装相应依赖:

# 安装mpi4py时的依赖openmpi
sudo apt-get install wget libgl1-mesa-glx libglib2.0-0 openmpi-bin openmpi-common libopenmpi-dev libgtk2.0-dev git -y

执行上述代码,可跳过(安装OpenMPI).

安装OpenMPI,我主要参考这篇文章

        首先去OpenMPI官网下载所需要的版本。然后解压

#​解压

tar xjf openmpi-4.0.4.tar.bz2    

#安装
mkdir software    # 新建openmpi-4.0.4的安装目录
cd openmpi-4.0.4  # 进入解压后的目录
./configure --prefix=/home/user/software/openmpi-4.0.4  #./configure --prefix="安装目录所在的绝对路径"
make all install  # 安装全部

        然后配置环境

#打开配置文件
gedit ~/.bashrc  


#把下面的内容放在bashrc的最后面,不知道如何更改绝对路径,可以按下面照抄,把user改成自己的用户名即可。
export PATH=/home/user/software/openmpi-4.0.4/bin:$PATH

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/user/software/openmpi-4.0.4/lib:$LD_LIBRARY_PATH

export LIBRARY_PATH=/home/user/software/openmpi-4.0.4/lib:$LIBRARY_PATH

export INCLUDE=/home/user/software/openmpi-4.0.4/include:$INCLUDE

export MANPATH=/home/user/software/openmpi-4.0.4/share/man:$MANPATH

        保存退出,并更新环境,让添加的环境变量生效。

source ~/.bashrc  

        可以使用一下命令查看包的版本。

mpiexec -V

        安装其他的包

#安装部分依赖包
pip install torchpack Pillow==8.4.0 tqdm nuscenes-devkit mpi4py==3.0.3 numba==0.48.0 numpy==1.23.0 ninja==1.11.1 opencv-python==4.8.0.74 opencv-python-headless==4.8.0.74 yapf==0.40.1

#使用mim安装mmcv包

#安装mim
pip install -U openmim
#安装mmcv
mim install mmcv-full==1.4.0

#安装mmdet
pip install mmdet==2.20.0

#最新的setuptools会报冲突,先卸载再安装更低的版本
#卸载
pip uninstall setuptools
#安装
conda install setuptools==56.1.0

2 拉取源码和配置bevfusion

# 建议拉取源码的地址 
git clone https://gitee.com/linClubs/bevfusion.git

# 官方源码已更新,可以根据本贴的内容进行相应包的调整  
git clone https://github.com/mit-han-lab/bevfusion.git

2.1 修改部分文件

# mmdet3d/ops/spconv/src/indice_cuda.cu   把文件中的4096全部修改为256

2.2 编译和安装

python setup.py develop

3  数据集的准备

3.1下载数据集

        下载nuscenes 数据集。根据自己的需要下载完整的数据集或者mini数据集。把Map expansion中解压的三个文件夹放在map的文件夹下(map文件夹下就有了7个文件,四个图片文件和三个文件夹)。

        mini数据集:

        组织 mini数据集文件如下:

data
  └──nuscenes
       ├── maps
       │    ├── basemap
       │    ├── expansion
       │    ├── prediction
       ├── samples
       ├── sweeps
       └── v1.0-mini

        完整的数据集:

         组织完整的数据集文件如下:

data
  └──nuscenes
      ├── maps
      │   ├── basemap
      │   ├── expansion
      │   ├── prediction
      ├── samples
      ├── sweeps
      ├── v1.0-test
      ├── v1.0-trainval

3.2 数据预处理

# 生成mini数据集
python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --version v1.0-mini

# 生成完整数据集
python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes

        运行之后会生成相应的.pkl文件。

例如:
mmdetection3d
├── mmdet3d
├── tools
├── configs
├── data
│   ├── nuscenes
│   │   ├── maps
│   │   ├── samples
│   │   ├── sweeps
│   │   ├── v1.0-test
|   |   ├── v1.0-trainval
│   │   ├── nuscenes_database
│   │   ├── nuscenes_infos_train.pkl
│   │   ├── nuscenes_infos_val.pkl
│   │   ├── nuscenes_infos_test.pkl
│   │   ├── nuscenes_dbinfos_train.pkl

3.3 下载预训练权重,如果命令无法下载,到readme文件上直接下载。

./tools/download_pretrained.sh

4 训练和评估

        单卡训练

#训练只有相机的探测
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

#训练只有相机的分割
torchpack dist-run -np 1 python tools/train.py configs/nuscenes/seg/camera-bev256d2.yaml --model.encoders.camera.backbone.init_cfg.checkpoint pretrained/swint-nuimages-pretrained.pth

#训练只有lidar的检测器
torchpack dist-run -np 1 python tools/train.py configs/nuscenes/det/transfusion/secfpn/lidar/voxelnet_0p075.yaml

#训练只有lidar的分割模型
torchpack dist-run -np 1 python tools/train.py configs/nuscenes/seg/lidar-centerpoint-bev128.yaml

#训练融合模型
torchpack dist-run -np 1 python tools/train.py configs/nuscenes/det/transfusion/secfpn/camera+lidar/swint_v0p075/convfuser.yaml --model.encoders.camera.backbone.init_cfg.checkpoint pretrained/swint-nuimages-pretrained.pth --load_from pretrained/lidar-only-det.pth 

        多卡训练,只需要把np的参数后的1改成自己相应的卡的数据即可。

        评估

        单卡

#融合性能评估
torchpack dist-run -np 1 python tools/test.py configs/nuscenes/det/transfusion/secfpn/camera+lidar/swint_v0p075/convfuser.yaml pretrained/bevfusion-det.pth --eval bbox

#分割性能评估
torchpack dist-run -np 1 python tools/test.py configs/nuscenes/seg/fusion-bev256d2-lss.yaml pretrained/bevfusion-seg.pth --eval map

        多卡评估,只需要把np的参数后的1改成自己相应的卡的数据即可。

        可视化,来自这里

# 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

问题汇总

##将mmdet3d/ops/spconv/src/indice_cuda.cu文件里面所有的4096改为256



#1 error: [Errno 2] No such file or directory: ':/usr/local/cuda/bin/nvcc'

#解决办法:
#先确定 cuda 是否安装成功
nvcc -V
#安装成功的话直接在命令行里输入
​export CUDA_HOME=/usr/local/cuda


#2 ModuleNotFoundError: No module named 'flash_attn'

#解决办法:
pip install flash_attn==0.2.0
#如果还是不对,可以多尝试几个版本

#3 RuntimeError: BEVFusion: PytorchStreamReader failed reading zip archive: failed finding central directory

#解决办法:
#首先下载pth文件:https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_tiny_patch4_window7_224.pth
#打开:./configs/nuscenes/det/centerhead/lssfpn/camera/256x704/swint/default.yaml
# 更改 checkpoint :自己的训练的模型路径/swint-nuimages-pretrained.pth


#3 AttributeError: module 'distutils' has no attribute 'version'

#解决办法:
#首先
pip uninstall setuptools
#然后
conda install setuptools==58.0.4


#4 TypeError: FormatCode() got an unexpected keyword argument ‘verify‘

#解决办法:降低yapf版本
首先
pip uninstall yapf
#然后
pip install yapf==0.40.1



#5 FileNotFoundError: [Errno 2] No such file or directory: 'data/nuscenes//nuscenes_infos_train.pkl

#解决办法:您可以检查 bevfusion 目录中是否有额外的 nuscense 文件夹,并且该文件夹包含 nuscense_infos_train_radar.pkl 和 nuscense_infos_val_radar.pkl。如果文件存在, 然后修改 bevfusion中 ->tools->data_converter->nuscenes_converter.py的102行

info_path = osp.join(info_prefix,
                     '{}_infos_train_radar.pkl'.format(info_prefix))
mmcv.dump(data, info_path)
data['infos'] = val_nusc_infos
info_val_path = osp.join(info_prefix,
                         '{}_infos_val_radar.pkl'.format(info_prefix))
#改成如下代码:

info_path = osp.join(info_prefix,
                     '{}_infos_train.pkl'.format(info_prefix))
mmcv.dump(data, info_path)
data['infos'] = val_nusc_infos
info_val_path = osp.join(info_prefix,
                         '{}_infos_val.pkl'.format(info_prefix))
  • 34
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
几篇CVPR关于multi-task的论文笔记整理,包括 一、 多任务课程学习Curriculum Learning of Multiple Tasks 1 --------------^CVPR2015/CVPR2016v--------------- 5 二、 词典对分类器驱动卷积神经网络进行对象检测Dictionary Pair Classifier Driven Convolutional Neural Networks for Object Detection 5 三、 用于同时检测和分割的多尺度贴片聚合(MPA)* Multi-scale Patch Aggregation (MPA) for Simultaneous Detection and Segmentation ∗ 7 四、 通过多任务网络级联实现感知语义分割Instance-aware Semantic Segmentation via Multi-task Network Cascades 10 五、 十字绣网络多任务学习Cross-stitch Networks for Multi-task Learning 15 --------------^CVPR2016/CVPR2017v--------------- 23 六、 多任务相关粒子滤波器用于鲁棒物体跟踪Multi-Task Correlation Particle Filter for Robust Object Tracking 23 七、 多任务网络中的全自适应特征共享与人物属性分类中的应用Fully-Adaptive Feature Sharing in Multi-Task Networks With Applications in Person Attribute Classification 28 八、 超越triplet loss:一个深层次的四重网络,用于人员重新识别Beyond triplet loss: a deep quadruplet network for person re-identification 33 九、 弱监督级联卷积网络Weakly Supervised Cascaded Convolutional Networks 38 十、 从单一图像深度联合雨水检测和去除Deep Joint Rain Detection and Removal from a Single Image 43 十一、 什么可以帮助行人检测?What Can Help Pedestrian Detection? (将额外的特征聚合到基于CNN的行人检测框架) 46 十二、 人员搜索的联合检测和识别特征学习Joint Detection and Identification Feature Learning for Person Search 50 十三、 UberNet:使用多种数据集和有限内存训练用于低,中,高级视觉的通用卷积神经网络UberNet: Training a Universal Convolutional Neural Network for Low-, Mid-, and High-Level Vision using Diverse Datasets and Limited Memory 62 一共13篇,希望能够帮助到大家

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值