本文最后更新于:2025年4月30日 下午
FastBEV 在纯视觉方案中性价比较高,本文记录代码复现过程。
背景
实践步骤
- 环境准备
- 数据准备
- 模型训练
环境准备
环境需求
- CUDA>=9.2
- GCC>=5.4
- Python>=3.6
- Pytorch>=1.8.1
- Torchvision>=0.9.1
- MMCV-full==1.4.0
- MMDetection==2.14.0
- MMSegmentation==0.14.1
上述环境为官方代码仓库所记录的需求
实际环境
这里记录我的环境配置
- Ubuntu 22.04
- CUDA 11.3
- gcc / g++ 9.5.0
- python 3.8.19
- pytorch 1.10.0+cu113
- torchvision 0.11.0+cu113
- mmcv-full 1.4.0
- mmdetection 2.14.0
- mmsegmentation 0.14.1
- mmdet3d 0.16.0
环境配置
说明: 这里说明一下,为之后的同学填坑
-
mmcv-full 1.4.0 比较久远了其实,因此所需环境也比较古老,mmlab 提供的 whl 并未包含该版本,因此安装需要自己编译,但是编译过程中需要引入 pytorch 的
THC/THC.h头文件,而 pytorch 在 1.10 以后的版本(1.11+)将该文件删除了,因此最高 pytorch 版本为 1.10 -
mmcv-full 和 pytorch 版本既然锁死,到 Pytorch 的安装界面中可以看到,1.10 版本的 torch 支持最高版本的 CUDA 为 11.3, 因此 CUDA 版本我定在了 11.3
-
在 cuda 11.3 的官方文档中,记录了所需的 gcc 版本

可以看到 gcc 版本为 9.x,因此我在当前使用了 9.5 的 gcc 版本
-
其他环境正常安装就好了
CUDA 11.3
下载地址:https://developer.nvidia.com/cuda-11.3.0-download-archive
pytorch
1 | |
gcc 版本
python packages
mmcv whl 包链接:https://download.openmmlab.com/mmcv/dist/cu113/torch1.10.0/index.html
1 | |
下载 fastBev 源码
仓库地址:https://github.com/Sense-GVT/Fast-BEV
将 fast-bev 安装到 python 环境
1 | |
准备数据集
数据下载
nuscenes数据集,nuscenes下载地址
这里只测试 nuscense 提供 mini 版本, 下载 map 跟 mini:

-
下载后得到2个压缩的文件
- nuScenes-map-expansion-v1.3.zip
- v1.0-mini.tgz
-
解压到当前目录
解压得到nuScenes-map-expansion-v1.3与v1.0-mini两个目录, 把nuScenes-map-expansion-v1.3中的三个文件复制到v1.0-mini/map目录下。最终得到新v1.0-mini目录,就行训练所需的数据集。

-
数据集转换为FastBEV支持格式
进入
Fast-BEV工程目标, 创建data目录,然后将上面的v1.0-mini文件夹复制到./Fast-BEV/data下, 并将v1.0-mini重命名为nuscenes, 目录结构如下图所示:
因为使用的mini数据集, 转换时候加上参数
--version该数据未提供v1.0-test文件如果使用全部的nuscenes数据可以不加
--version
数据生成
- 运行create_data.py
1 | |
执行后,产生下面红框中的文件

- 运行nuscenes_seq_converter.py
由于使用的mini数据集无test文件,需要修改nuscenes_seq_converter.py文件,找到代码15行和20行,修改如下:

修改后,运行:
1 | |
生成 nuscenes_infos_train_4d_interval3_max60.pkl 与 nuscenes_infos_val_4d_interval3_max60.pkl 两个文件,
这两个文件就是训练需要的数据集,如下图所示:

-
修改
dataset文件nuscenes_monocular_dataset_map_2.py
修改第 27 行

训练
预训练模型
模型 下载链接 ,提供了r18,r34,r50三种残差网络模型。这里下载 cascade_mask_rcnn_r18_fpn_coco-mstrain_3x_20e_nuim_bbox_mAP_0.5110_segm_mAP_0.4070.pth
下载后,新建一个pretrained_models目录放入其中。

修改配置文件
以 configs/fastbev/exp/paper/fastbev_m0_r18_s256x704_v200x200x4_c192_d2_f4.py,文件为例:
- 将该配置文件中的将SyncBN改成BN,将AdamW2换成Adam;
- 该配置文件中146行代码去掉注释; 147-150代码加上注释, 如下所示
1 | |
安装setuptools-58.0.4版本
1 | |
配置文件中预训练模型地址修改, 代码331行,load_from参数指向第1步下载的预训练模型地址,如果不知道相对路径,可以直接给绝对路径,我这里是相对路径
1 | |
训练
1 | |
参数说明
1 | |

测试
训练时每完成一个 epoch 会在 work_dir 保存 epoch_x.pth 文件,我们用这个文件来进行推断。
测试推理
1 | |
- out 必须跟.pkl后缀。用来保存检测结果
1 | |
可视化
用 tools/misc/visualize_results.py 把上一步的 result.pkl 生成视频流展示。
- 直接运行代码会报错
assert len(_list) == len(sort)
解决办法:Fast -BEV/mmdet3d/datasets/nuscenes monocular_dataset.py, 找到192行修改成193行样子:

- 写下 mp4 时报错,
TypeError: write() got an unexpected keyword argument 'fps'
解决方案:
1 | |
- 运行可视化代码:
1 | |
生成的文件如下图所示:

发现
m0-r18模型效果不是很好,很多只检测了个寂寞,可以尝试用m5-r50的epoch_20pth,下载链接
-
运行效果
下载的模型运行了 m4-r50 的结果:
参考资料
- https://blog.csdn.net/h904798869/article/details/130317240?spm=1001.2014.3001.5502
- https://github.com/Sense-GVT/Fast-BEV
- https://download.openmmlab.com/mmcv/dist/index.html
- https://download.openmmlab.com/mmcv/dist/cu113/torch1.10.0/index.html
文章链接:
https://www.zywvvd.com/notes/study/deep-learning/bev/fastbev/fastbev-practice/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付