BEVFormer论文复现
目前在学自动驾驶感知方向朝着强端到端方向发展这也是我第一篇真正开始复现的论文复现时间是2026/4由于bevformer的代码是在三四年前维护的所以会到一些环境问题我希望能在此处做个记录同时希望能对其他人提供提供一些帮助如果你遇到一些问题或者希望交流欢迎联系--------------------------------------------------------在正式复现之前我想对BEVFormer这篇论文做介绍一、2021年特斯拉在自动驾驶感知里提出的BEVTransformer,他的主要原理是把多摄像头图像先转换到BEVBird’s Eye View鸟瞰视角再用Transformer做多视角、多时序的信息融合最终在统一的 BEV 空间里完成车道线、障碍物、占用、运动等任务它更像是一种整体范式 / 系统思路多相机输入 → 统一到 BEV 表达 → 用注意力机制融合空间与时间 → 在 BEV 上做感知预测二、那么BEVFormer这篇论文是什么BEVFormer是之后学术界把这条路线明确论文化、模块化、标准化的一种代表方法。它的核心是维护一组BEV query用spatial cross-attention从多相机特征中取信息更新 BEV 表示用temporal self-attention融合历史帧 BEV提高时序稳定性和动态目标建模能力所以 BEVFormer 可以看成对“从图像构建 BEV并用 Transformer 融合空间/时间信息”这条路线的一个更学术化、可复现、结构定义更清晰的实现三、特斯拉提出的思想和这篇论文的关系是什么最准确地说BEVFormer不是特斯拉方法的简单改名版而是和特斯拉思路高度同源、理念相近的学术代表作。关系大致是特斯拉 BEVTransformer工业界先展示出来的系统思路BEVFormer学术界把这类思路整理成清晰架构后的典型方法有兴趣可以多了解感知的发展的历程以及特斯拉的FSD发展方向个人认为在自动驾驶这个行业上在未来美国更可能定义技术上限中国更可能定义产业规模。-----------------------------------下面正式开始论文的复现我这次复现只做论文的测试工作也就是用训练好的权重在测试集上做测试#预开始github原网址https://github.com/zhiqi-li/BEVFormer本地连接服务器#1.打开windows的powershell或者任何能连接服务器的 #2.输入你的服务器的端口、用户名、IP地址 ssh -p 端口号 用户名IP地址 #3.找到一个不使用root(sudo)也能创建文件的目录 #4.创建一个文件夹目录名为bevformer1,之后从git库clone的东西就在这个目录下 mkdir bevformer1下面图片是我的文件目录结构还不着急等会会自动创建记住BEVFormer和mmdetevtion3d在同个目录下就行##不要问我怎么有可视化界面的可以查阅资料安装vnc#第一步创建虚拟环境#移到bevformer1下 cd bevformer1 #创建名为bevformer的虚拟环境bevformer论文要求python3.8版本 conda create -n bevformer python3.8 -y #激活虚拟环境 conda activate bevformer 接下来安装的各种库、包、pytorch都是在这个虚拟环境下安装的 #可选查看当前存在的虚拟环境 conda env list#第二步安装pytorch#还是在bevformer1目录下 cd bevformer1 #安装pytorch pip install torch1.9.1cu111 torchvision0.10.1cu111 torchaudio0.9.1 \ -f https://download.pytorch.org/whl/torch_stable.html ##上面这条命令除了安装torch等系列包之外还会自动拉取最新的numpy等包比如安装numpy1.24但是作者要求numpy1.19,你如果发现这个问题先别管后面会有将numpy降级的命令#第三步安装mmcv-full、mmdet 和 mmsegmentationcd bevformer1 #安装mmcv-full pip install mmcv-full1.4.0 \ -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html #安装 mmdet 和 mmsegmentation pip install mmdet2.14.0 pip install mmsegmentation0.14.1#第四步拉取并安装 mmdetection3d这一步可能会出现问题#记住cd 到bevformer1目录下 cd ~/bevformer1 #从 GitHub 克隆 mmdetection3d仓库到本地 git clone https://github.com/open-mmlab/mmdetection3d.git #进入刚克隆的 mmdetection3d目录 cd mmdetection3d #切换到 mmdetection3d的 v0.17.1版本分支 git checkout v0.17.1 #安装当前目录下的Python包 pip install -v -e . ##注意上面这条命令和github作者给的不一样作者给的是python setup.py install ##pip install -v -e .是“可编辑模式安装”能够自动处理问题作者给的安装命令要求很严格#第五步安装其余Python依赖以及安装detectron2#这里会将之前安装的numpy1.24降级成作者要求的1.19 pip install einops fvcore seaborn iopath0.1.9 timm0.6.13 typing-extensions4 pylint ipython8.12 numpy1.19.5 matplotlib3.5.2 numba0.48.0 \ pandas1.4.4 scikit-image0.19.3 setuptools59.5.0 ##这里如果出现不兼容的问题直接升级或者降级即可别动Numpy其他的匹配他就行 #检查一下前面安装的包 python - PY import torch import mmcv import mmdet print(torch:, torch.__version__) print(mmcv:, mmcv.__version__) print(mmdet:, mmdet.__version__) print(cuda available:, torch.cuda.is_available()) PY #安装detectron2 python -m pip install detectron20.6 -f \ https://dl.fbaipublicfiles.com/detectron2/wheels/cu111/torch1.9/index.html #这条安装命令和github上给的不一样应该按照de2 0.6才对#第六步下载官方BEVFormer代码#依旧在bevformer1目录下 cd bevformer1 #从github上拉去作者的源码 git clone https://github.com/fundamentalvision/BEVFormer.git#第七步安装目录准备下载数据集#这里需要回到刚从github拉来的BEVFormer目录下面 cd BEVFormer #首先需要创建数据集目录数据集包括两个一个是nuscenes的六个摄像头的数据集一个是can_bus涵盖车的结构 mkdir -p ckpts mkdir -p data mkdir -p data/nuscenes mkdir -p data/can_bus find . -maxdepth 2 -type d | sort ##最后形成我上面图片发的目录结构 #准备一个用来存储数据集压缩包的目录 mkdir downloads#第八步下载数据集#在本地你自己的笔记本上通过Nuscenes官网下载两个东西can_bus和nuscenes_tiny数据集 #这个数据集是tiny版本的适合简单复现如果你觉得自己硬件够可以下载完整的 #使用scp命令将下载的两个数据集应该一个是zip版本的一个是tgz这两个都是压缩包传回服务器 scp can_bus本地存储地址 用户名IP地址~/bevformer1/BEVFormer/downloads scp nuscenes_tiny本地存储地址 用户名IP地址~/bevformer1/BEVFormer/downloads#第九步解压数据集cd BEVFormer #将downloads里的两个数据集分别解压到/BEVFormer/data/can_bus目录和/BEVFormer/data/nuscenes目录下 tar -xzf downloads/v1.0-mini.tgz -C data/nuscenes unzip downloads/can_bus.zip -d data/can_bus 记得检查解压后不要多了一层#第十步下载tiny权重我们这次复现不去训练而只是简单测试,使其能运行即可cd BEVFormer #下载权重文件bevformer_tiny_epoch_24.pth wget -O ckpts/bevformer_tiny_epoch_24.pth \ https://github.com/zhiqi-li/storage/releases/download/v1.0/bevformer_tiny_epoch ls -lh ckpts#第十一步生成pkl文件#在开始生成pkl之前需要先完成两步 ##第一步检查两个目录 cd /bevformer1/BEVFormer ls tools ls tools/data_converter #我们要确认tools/__init__.py和tools/data_converter/__init__.py 这两个文件在不在 #如果没有就创建他们 cd /bevformer1/BEVFormer touch tools/__init__.py touch tools/data_converter/__init__.py ls tools | grep __init__ ls tools/data_converter | grep __init__ #第二步打开tools/create_data.py 将所有的from data_converter import XXX修改成from tools.data_converter import XXX修改如下————进入BEVFormer/tools/data_converter#以上两部完成后生成pkl文件 PYTHONPATH. python -m tools.create_data nuscenes \--root-path ./data/nuscenes \--out-dir ./data/nuscenes \--extra-tag nuscenes \--version v1.0-mini \--canbus ./data#第十二步测试数据集#正式测试之前需完成以下步骤 ##给 projects 补上包初始化文件 touch projects/__init__.py touch projects/mmdet3d_plugin/__init__.py #正式测试 bash ./tools/dist_test.sh \ ./projects/configs/bevformer/bevformer_tiny.py \ ./ckpts/bevformer_tiny_epoch_24.pth \ 1 \--eval bbox \--cfg-options data.workers_per_gpu2 可能会出现某个包版本太高太低的错误直接升级或者降级即可