BEVFormer的复现

BevFormer复现

参考:BEVFormer代码复现实践

服务器:Autodl

环境:ubuntu20.04,python-3.8, torch-1.10.0, cuda-11.3, cudnn-8.6

环境安装

1 拉取源码

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

2 创建虚拟环境

conda create -n bev python=3.8 -y

3 激活虚拟环境

conda activate bev

4 安装torch,torchvision,torchaudio

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

5 conda安装

conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=11.3 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch/linux-64/

6 gcc版本

conda install -c omgarcia gcc-6

7 mmopenlib系列 mmcv-full会装很久,只要电脑没卡住都是正常现象

pip install mmcv-full==1.4.0 mmdet==2.14.0 mmsegmentation==0.14.1

8 源码安装mmdet3d-v0.17.1版本

8.1 进入BEVFormer目录

cd BEVFormer

8.2 下载mmdetection3d

git clone https://github.com/open-mmlab/mmdetection3d.git

8.3 进入mmdetection3d目录

cd mmdetection3d

8.4 切换v0.17.1

git checkout v0.17.1

8.5 安装mmdet3d-v0.17.1版本

python setup.py install

9 安装 Detectron2 and Timm

9.1 安装基本python依赖包

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 yapf==0.40.1

9.2 安装 Detectron2

python -m pip install 'git+https://github.com/facebookresearch/detectron2.git'

10 下载预训练模型

10.1 进入BEVFormer目录

cd BEVFormer

10.2 创建并进入ckpts文件夹

mkdir ckpts && cd ckpts

10.3 下载预训练权重r101_dcn_fcos3d_pretrain.pth

wget https://github.com/zhiqi-li/storage/releases/download/v1.0/r101_dcn_fcos3d_pretrain.pth

数据集

  1. 数据集下载

下载地址 提取码:v3cv

下载后数据放入data目录结构如下

# data文件夹展开,can_bus内容太多,这就不展开
data
├── can_bus   
    ├──...
└── nuscenes
    ├── maps
    ├── samples
    ├── sweeps
    └── v1.0-mini
  1. 生成训练需要的数据集格式
# 1 mini数据集 
python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --version v1.0-mini --canbus ./data

# 2 full数据集 可以将v1.0-mini复制一份命名v1.0-trainval
python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --version v1.0 --canbus ./data

运行上面代码后会在data/nuscenes/目录下生成2pkl2json 文件如下:

data
├── can_bus   
    ├──...
└── nuscenes
    ├── maps
    ├── nuscenes_infos_temporal_train.pkl
    ├── nuscenes_infos_temporal_train_mono3d.coco.json
    ├── nuscenes_infos_temporal_val.pkl
    ├── nuscenes_infos_temporal_val_mono3d.coco.json
    ├── samples
    ├── sweeps
    └── v1.0-mini

训练

  1. 修改配置文件

训练前,修改配置文件./projects/configs/bevformer/bevformer_base.py参数, 主要下面4个参数:

前期测试环境是否正确, 建议设置max_epochs=2,samples_per_gpu=1,workers_per_gpu=0

load_from  # 预训练权重路径
max_epochs # 训练周期
samples_per_gpu=1, # bitch_size
workers_per_gpu=0, 
  1. 训练

最后一个参数是显卡个数, 只有一张显卡写1,8张写8

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

训练6个周期,每2个周期保存一次权重,完成后生成valwork_dirs目录结构如下:

val
└── work_dirs
    └── bevformer_base
        └── Wed_Sep_27_21_04_49_2023
            └── pts_bbox

work_dirs
└──
    └── bevformer_base
        ├── 20230927_210445.log
        ├── 20230927_210445.log.json
        ├── bevformer_base.py
        ├── epoch_2.pth
        ├── epoch_4.pth
        ├── epoch_6.pth
        ├── latest.pth -> epoch_6.pth
        └── tf_logs
  1. 使用fp16精度训练模型

./tools/fp16/dist_train.sh ./projects/configs/bevformer_fp16/bevformer_tiny_fp16.py 1

由于租借服务器显存不够,下一步使用已经训练好的模型进行

测试

已训练模型下载 提取码:n998

  1. 测试评估

./tools/dist_test.sh ./projects/configs/bevformer/bevformer_base.py train/bevformer_r101_dcn_24ep.pth 1

生成test目录结构如下:

results_nusc.json就是检测结果

test
└── bevformer_base
    └── Wed_Dec_11_16_23_05_2024
        └── pts_bbox
            ├── metrics_details.json
            ├── metrics_summary.json
            ├── plots
            └── results_nusc.json

可视化

  1. 修改tools/analysis_tools/visual.py可视化代码
# 修改1 替换主函数
if __name__ == '__main__':
    # 数据集路径,使用mini就用v1.0-mini, 使用full就用v1.0-trainval
    nusc = NuScenes(version='v1.0-mini', dataroot='../autodl-tmp/data/nuscenes', verbose=False)
    # results_nusc.json路径
    bevformer_results = mmcv.load('test/bevformer_base/Wed_Dec_11_16_23_05_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]))

# 修改2:将visual.py中的下面2句注释掉,就不用每次关闭当前显示窗口生成下一张图
# if verbose:
#     plt.show()
  1. 运行

python tools/analysis_tools/visual.py

结果图像保存到result目录下, 可视化如下:

image-20241223160406505

image-20241223160448038

运行报错

报错信息:ModuleNotFoundError: No module named 'tools.data_converter'

解决办法:在BEVFormer/tools/目录下添加一个空的__init__.py文件即可解决。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇