惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
IT之家
IT之家
B
Blog
博客园_首页
博客园 - 司徒正美
有赞技术团队
有赞技术团队
博客园 - 聂微东
I
InfoQ
美团技术团队
GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志
H
Help Net Security
大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
WordPress大学
WordPress大学
The GitHub Blog
The GitHub Blog
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
Microsoft Azure Blog
Microsoft Azure Blog
Engineering at Meta
Engineering at Meta
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog

又见苍岚

COLMAP PatchMatch Stereo 算法详解 事件驱动的状态机框架:从理论到工程实践 Git 在国内网络环境下无法 Push 的排查与修复 —— 配置 Clash 代理 分段五次多项式插值原理详解 路径插值方法深度对比研究 Claude Code 使用指南 OpenClaw 记忆管理与技能创建指南 CBS(Conflict-Based Search)算法详解 A* 算法及其变种详解 OpenClaw 配置多 Agents Windows Powershell 无法加载文件,因为在此系统上禁止运行脚本问题的解决方案 MaxClaw 安装流程 大模型 AI 名词介绍 AList 网盘聚合工具简介 Protobuf 简介与测试 Claude Code 简介以及 GLM 4.7 模型接入 Github 歌词下载工具 163MusicLyrics Python __getattr__ 懒加载 Python TypedDict 机器人仿真平台 Gazebo 安装记录 机器人仿真平台 Gazebo 简介 多机器人路径规划问题(Multi-Agent Path Finding, MAPF)简介 Python exifread 读取修改过的 jpeg 信息错误问题修复 3D 坐标系变换的理解 3D 旋转矩阵基本概念 MongoDB Compass 介绍 Python 环境管理工具 uv Flutter 开发指南 Snipaste 安装下载与黑屏问题解决方案 全局路径规划算法记录
Fast-BEV 代码实践
Yiwei Zhang · 2024-09-06 · via 又见苍岚

FastBEV 在纯视觉方案中性价比较高,本文记录代码复现过程。

背景

实践步骤

  1. 环境准备
  2. 数据准备
  3. 模型训练

环境准备

环境需求

  • 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

环境配置

说明: 这里说明一下,为之后的同学填坑

  1. mmcv-full 1.4.0 比较久远了其实,因此所需环境也比较古老,mmlab 提供的 whl 并未包含该版本,因此安装需要自己编译,但是编译过程中需要引入 pytorch 的 THC/THC.h 头文件,而 pytorch 在 1.10 以后的版本(1.11+)将该文件删除了,因此最高 pytorch 版本为 1.10

  2. mmcv-full 和 pytorch 版本既然锁死,到 Pytorch 的安装界面中可以看到,1.10 版本的 torch 支持最高版本的 CUDA 为 11.3, 因此 CUDA 版本我定在了 11.3

  3. cuda 11.3 的官方文档中,记录了所需的 gcc 版本

    可以看到 gcc 版本为 9.x,因此我在当前使用了 9.5 的 gcc 版本

  4. 其他环境正常安装就好了

CUDA 11.3

下载地址:https://developer.nvidia.com/cuda-11.3.0-download-archive

pytorch
1
2
pip install torch==1.10.0+cu113 -f https://download.pytorch.org/whl/torch_stable.html
pip install torchvision==0.11.0+cu113 -f https://download.pytorch.org/whl/torch_stable.html
gcc 版本

gcc 版本选择

python packages

mmcv whl 包链接:https://download.openmmlab.com/mmcv/dist/cu113/torch1.10.0/index.html

1
2
3
4
5
6
7
8
# 安装mmcv-full
pip install mmcv-full==1.4.0

# 安装mmdet
pip install mmdet==2.14.0

# 安装mmdet
pip install mmsegmentation==0.14.1

下载 fastBev 源码

仓库地址:https://github.com/Sense-GVT/Fast-BEV

将 fast-bev 安装到 python 环境

1
pip install -v -e . 

准备数据集

数据下载

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

数据生成

  1. 运行create_data.py
1
python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --workers 10 --version v1.0-mini

执行后,产生下面红框中的文件

  1. 运行nuscenes_seq_converter.py

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

修改后,运行:

1
python tools/data_converter/nuscenes_seq_converter.py

生成 nuscenes_infos_train_4d_interval3_max60.pklnuscenes_infos_val_4d_interval3_max60.pkl 两个文件,
这两个文件就是训练需要的数据集,如下图所示:

  1. 修改 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
2
3
4
5
file_client_args = dict(backend='disk')
# file_client_args = dict(
# backend='petrel',
# path_mapping=dict({
# data_root: 'public-1424:s3://openmmlab/datasets/detection3d/nuscenes/'}))

安装setuptools-58.0.4版本

1
pip install setuptools==58.0.4

配置文件中预训练模型地址修改, 代码331行,load_from参数指向第1步下载的预训练模型地址,如果不知道相对路径,可以直接给绝对路径,我这里是相对路径

1
load_from = 'pretrained_models/cascade_mask_rcnn_r18_fpn_coco-mstrain_3x_20e_nuim_bbox_mAP_0.5110_segm_mAP_0.4070.pth'

训练

1
python tools/train.py configs/fastbev/exp/paper/fastbev_m0_r18_s256x704_v200x200x4_c192_d2_f4.py --work-dir work_dir --gpu-ids 0

参数说明

1
2
3
--gpu-ids  0代表gpu使用第1块。本机只有一块gpu
--work-dir 输出文件目录,包含日志等文件
其他参数详情建train.py中parse_args()函数

测试

训练时每完成一个 epoch 会在 work_dir 保存 epoch_x.pth 文件,我们用这个文件来进行推断。

测试推理

1
python tools/test.py configs/fastbev/exp/paper/fastbev_m0_r18_s256x704_v200x200x4_c192_d2_f4.py work_dir/epoch_1.pth --out output/result.pkl
  • out 必须跟.pkl后缀。用来保存检测结果
1
2
--out 必须跟.pkl后缀。用来保存检测结果
--show 不要加,加上会报错,可能原作者未优化好

可视化

tools/misc/visualize_results.py 把上一步的 result.pkl 生成视频流展示。

  1. 直接运行代码会报错 assert len(_list) == len(sort)

解决办法:Fast -BEV/mmdet3d/datasets/nuscenes monocular_dataset.py, 找到192行修改成193行样子:

  1. 写下 mp4 时报错,TypeError: write() got an unexpected keyword argument 'fps'

解决方案:

1
pip install imageio-ffmpeg
  1. 运行可视化代码:
1
python tools/misc/visualize_results.py configs/fastbev/exp/paper/fastbev_m0_r18_s256x704_v200x200x4_c192_d2_f4.py --result output/result.pkl --show-dir show_dir

生成的文件如下图所示:

发现m0-r18模型效果不是很好,很多只检测了个寂寞,可以尝试用 m5-r50epoch_20pth下载链接

  1. 运行效果

    下载的模型运行了 m4-r50 的结果:

参考资料

文章链接:
https://www.zywvvd.com/notes/study/deep-learning/bev/fastbev/fastbev-practice/