LSS:Lift, Splat, Shoot 论文代码复现

LSS: Lift, Splat, Shoot 论文代码复现

论文地址

代码地址

环境搭建

使用anaconda创建虚拟环境

conda create -n LSS python=3.8

激活环境

conda acticate LSS

安装pytorch

pip install torch-1.9.0+cu102-cp38-cp38-linux_x86_64.whl
pip install torchvision-0.10.0+cu102-cp38-cp38-linux_x86_64.whl

为了节省时间和流量我一般下载离线的安装包,当然也可以直接按照官网中的在线安装

安装所需要的其他工具包

pip install nuscenes-devkit tensorboardX efficientnet_pytorch==0.7.0

数据集准备

数据集下载

nuscenes

需要下载Full datasetMap expansion

image-20240610215515414

image-20240610215717582

数据集准备

  1. 在git clone下来的工程目录下创建data文件夹,并将Full dataset压缩包里的文件解压到在这里

  2. 将解压得到的文件夹重命名为mini

  3. Map expansion压缩包里的文件解压到刚重命名的mini文件夹下的map目录

代码运行

下载模型文件到任意位置

模型文件

能够正确运行的目录结构大概如下

.
├── data
│   └── mini
│       ├── LICENSE
│       ├── maps
│       ├── samples
│       ├── sweeps
│       └── v1.0-mini
├── efficientnet-b0-355c32eb.pth
├── imgs
│   ├── check.gif
│   └── eval.gif
├── LICENSE
├── main.py
├── README.md
├── requirment.txt
└── src
    ├── data.py
    ├── explore.py
    ├── __init__.py
    ├── models.py
    ├── __pycache__
    │   ├── data.cpython-38.pyc
    │   ├── explore.cpython-38.pyc
    │   ├── __init__.cpython-38.pyc
    │   ├── models.cpython-38.pyc
    │   ├── tools.cpython-38.pyc
    │   └── train.cpython-38.pyc
    ├── tools.py
    └── train.py

Evaluate a model(评估模型)

python main.py eval_model_iou mini --modelf=./efficientnet-b0-355c32eb.pth --dataroot=./data/ --gpuid=0
  • modelf 参数为下载的模型地址
  • dataroot参数为数据集的地址,也就是mini文件夹所在的位置
  • gpuid如果没有多个GPU就为0

如果遇到如下错误,删除int即可

ImportError: cannot import name 'int' from 'numpy' (/home/wang/.conda/envs/LSS/lib/python3.8/site-packages/numpy/__init__.py)

如果遇到如下错误,导致Missing key(s) in state_dict:

Traceback (most recent call last):
  File "main.py", line 13, in <module>
    Fire({
  File "/home/wang/.conda/envs/LSS/lib/python3.8/site-packages/fire/core.py", line 143, in Fire
    component_trace = _Fire(component, args, parsed_flag_args, context, name)
  File "/home/wang/.conda/envs/LSS/lib/python3.8/site-packages/fire/core.py", line 477, in _Fire
    component, remaining_args = _CallAndUpdateTrace(
  File "/home/wang/.conda/envs/LSS/lib/python3.8/site-packages/fire/core.py", line 693, in _CallAndUpdateTrace
    component = fn(*varargs, **kwargs)
  File "/home/wang/Project/BEV/lift-splat-shoot/src/explore.py", line 239, in eval_model_iou
    model.load_state_dict(torch.load(modelf))
  File "/home/wang/.conda/envs/LSS/lib/python3.8/site-packages/torch/nn/modules/module.py", line 2189, in load_state_dict
    raise RuntimeError('Error(s) in loading state_dict for {}:\n\t{}'.format(
RuntimeError: Error(s) in loading state_dict for LiftSplatShoot:

解决办法是:定位到上面报错的这一行

File "/home/wang/Project/BEV/lift-splat-shoot/src/explore.py", line 239, in eval_model_iou
    model.load_state_dict(torch.load(modelf))

model.load_state_dict(torch.load(*modelf*)),改为

model.load_state_dict(torch.load(modelf), False)

然后再次运行,输出以下内容成功

running eval...
{'loss': 0.7084423531720667, 'iou': 0.03712283950617284}

Visualize Predictions(可视化预测)

python main.py viz_model_preds mini --modelf=./efficientnet-b0-355c32eb.pth --dataroot=./data/ --map_folder=./data/mini/ --gpuid=0

会遇到与之前一样的错误,找到model.load_state_dict(torch.load(*modelf*)),跟之前的改法一样。

运行成功的结果如下

loading ./efficientnet-b0-355c32eb.pth
saving eval000000_000.jpg
saving eval000000_001.jpg

并有合成的bev效果图如下

eval000000_000


LSS:Lift, Splat, Shoot 论文代码复现
https://wjhln.github.io/2024/06/10/LSS Lift, Splat, Shoot 论文与代码复现/
作者
王嘉浩
发布于
2024年6月10日
许可协议