本文最后更新于:2024年9月12日 下午
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/
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付