MapTR代码复现实践

MapTR代码复现实践


1 环境配置

  • ubuntu20.04,python-3.8, torch-1.10.0, cuda-11.3, cudnn-8.6
  • 不要问其他版本能不能通,小白和不想折腾环境的童鞋直接抄作业
  • 默认显卡驱动cuda,cudnn,conda已装好,未安装请参考cuda, cudnn,conda安装

1.1 源码下载与环境安装

  1. 下载源码
# 1 拉取MapTR源码
git clone https://github.com/hustvl/MapTR.git
  1. 环境安装
  • 默认cuda,cudnn,conda已经安装完成,如果未完成请参考下面链接

cuda,cudnn,conda,python虚拟环境安装及配置参考

  • 本人使用版本 cuda-11.3, python3.8,cudnn-8.6.0,torch-1.10.0+cu113,torchvision-0.11.0+cu113 不想折腾的小伙伴请直接抄作业
# 1 创建虚拟环境 
conda create -n maptr python=3.8

# 2 激活虚拟环境
conda activate maptr

# 3 下载torch
pip install torch==1.10.0+cu113 torchvision==0.11.0+cu113 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html


pip install mmcv-full==1.4.0 mmdet==2.14.0 mmsegmentation==0.14.1 timm==0.9.5

# 4 安装mmdetection3d
cd mmdetection3d
export CUDA_HOME=/usr/local/cuda-11.3
pip install -v e .

# 5 其他功能包
cd ./
pip install -r requirement.txt 

# 6 安装maptr相关的插件
cd ./projects/mmdet3d_plugin/maptr/modules/ops/geometric_kernel_attn
python setup.py build install
'''
 终端显示:Processing dependencies for GeometricKernelAttention==1.0
          Finished processing dependencies for GeometricKernelAttention==1.0 
'''

# 7 更新networkx,numpy,setuptools版本,2.2在maptr-v2运行时会报错
pip install networkx==2.3 numpy==1.22.2 setuptools==58.2.0

# 8 spconv-cu113可以不安装, 本人没有安装
pip install spconv-cu113 -i https://pypi.tuna.tsinghua.edu.cn/simple


  1. 查看版本号
# 1. mmlab相关
pip list | grep mm
# 显示如下:
comm                      0.1.4
mmcv-full                 1.4.0
mmdet                     2.14.0
mmdet3d                   0.17.2
mmsegmentation            0.14.1
timm                      0.9.5


# 2. torch相关
pip list | grep torch
# 显示如下:
torch                     1.10.0+cu113
torchaudio                0.10.0+rocm4.1
torchvision               0.11.0+cu113

1.2 报错修改

# 错误1
...
    from numba.np.ufunc import _internal
SystemError: initialization of _internal failed without raising an exception
# 修改方法: 降低numpy版本即可
pip install numpy==1.22.4

# 错误2
ModuleNotFoundError: No module named 'spconv'
# 修改方法  需要跟cuda配置上, 本人是cuda-11.3, 安装版本如下
pip install spconv-cu113

# 错误3
ModuleNotFoundError: No module named 'IPython'
# 修改方法
pip install IPython

# 错误4
# 情况1:No module named 'projects.mmdet3d_plugin'
# 情况2:ModuleNotFoundError: No module named 'tools'
# 情况3: ModuleNotFoundError: No module named 'tools.data_converter'
# 情况4:ModuleNotFoundError: No module named 'projects'`
# 因为tools、projects、projects.mmdet3d_plugin都是从本地导入模块, 
# 导入失败要么是python环境变量没生效, 要么是模块的路径不对
# 修改办法: 更新python-path环境即可, 当前python虚拟环境的终端执行下面语句
export PYTHONPATH=$PYTHONPATH:"./"
# 如果还报错检查这句代码的路径是否正确, 可是使用绝对路径代替

# 错误5
TypeError: FormatCode() got an unexpected keyword argument 'verify'
# 修改办法: 降低yapf版本
pip install yapf==0.40.1

# 错误6 
ImportError: libcudart.so.11.0: cannot open shared object file: No such file or directory
# 原因: 安装的mmcv与cuda版本没对用上,建议去whl官方下载离线安装
# 修改参考1.4.1安装mmcv-full教程

# 错误7
# AttributeError: module 'distutils' has no attribute 'version'
修改:更新setuptools版本
pip install setuptools==58.4.0

# 错误8
# docker里面提示libGL.so.1不存在
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
# 修改方法:安装ffmpeg即可
apt-get install ffmpeg -y

# 错误9 pip安装mmcv-full时报错
subprocess.CalledProcessError: Command '['which', 'g++']' returned non-zero exit status 1.
      [end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for mmcv-full
# 修改方法:由于g++,gcc工具没安装,安装build-essential即可
sudo apt-get install build-essential

# 错误10 训练时显存爆炸 RuntimeError: CUDA out of memory
# 修改:先将配置文件中samples_per_gpu改为1即可workers_per_gpu改0测试环境,
# 后期正式训练时逐渐增加这2个参数的数字, 直到显存占满
# 如果设置成1和0都显存不够, 可以更换显卡了
samples_per_gpu=1, workers_per_gpu=0 

# 错误11:
AttributeError: module 'numpy' has no attribute 'long'
# 解决方法 numpy小于1.24.0版本
pip install numpy==1.22.2

# 错误12:
ModuleNotFoundError: No module named 'numpy.typing'
...
    raise ChildFailedError(
torch.distributed.elastic.multiprocessing.errors.ChildFailedError: 

# 解决方法 升级numpy,我使用1.22.2,samples_per_gpu与workers_per_gpu该下
pip install numpy==1.22.2

# 错误13:
    raise nx.NodeNotFound('target node %s not in graph' % target)
networkx.exception.NodeNotFound: target node [(-1.514, 30.0), (2.908, 30.0), (8.48, -30.0), (11.714, -30.0), (6.259, 30.0)] not in graph
# 解决办法: 更新networkx==2.3版本即可
pip install networkx==2.3

  • 所有运行代码报错请参考1.2节报错修改

2 制作数据集

  • nuscenes-mini为例子

2.1 下载Can bus

Can bus

  • 找到 CAN bus expansionexpand 点击US即可下载

2020 年 2 月,nusenes官网发布了 CAN 总线扩展。它包含有关车辆路线、IMU、姿态、转向角反馈、电池、制动器、档位、信号、轮速、油门、扭矩、太阳能传感器、里程计等的低级车辆数据。要安装此扩展,请按照以下说明进行操作。

2.2 下载nuscenes-mini

下载参考Fast-BEV代码复现实践第2.1节下载数据集篇

将下载的数据放入./data目录下(新建一个data即可)

最终数据集目录结构如下,can_bus文件太多,这里不便展开

data
├── can_bus
└── nuscenes
    ├── maps
    ├── nuscenes_gt_database
    ├── samples
    ├── sweeps
    └── v1.0-mini

2.3 生成训练数据集

# full
python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --version v1.0 --canbus ./data

# mini 本人使用的mini
python tools/create_data.py nuscenes --root-path ./data/nuscenes --out-dir ./data/nuscenes --extra-tag nuscenes --version v1.0-mini --canbus ./data

3 训练train

  1. 下载resnet预训练权重

本人使用的resnet50-19c8e357.pth, resnet18-f37072fd.pth可以不下载

# 1 在MapTR目录下新建ckpts目录
mkdir ckpts

# 2 进入目录
cd ckpts 

# 3 下载resnet50预训练权重
wget https://download.pytorch.org/models/resnet50-19c8e357.pth

# 4 下载resnet18预训练权重
wget https://download.pytorch.org/models/resnet18-f37072fd.pth
  1. 修改projects/configs/maptr/maptr_nano_r18_110e.py配置文件中相关参数
# 1. 预训练权重
pretrained=dict(img='ckpts/resnet50-19c8e357.pth'),

# 2. BN层修改 单卡BN,多卡用SyncBN
# norm_cfg=dict(type='SyncBN', requires_grad=True), # 多卡BN层
norm_cfg=dict(type='BN', requires_grad=True),    # 单卡BN层

# 3. 数据集位置
data_root = 'data/nuscenes/'

# 4. samples_per_gpu和workers_per_gpu
samples_per_gpu=6,
workers_per_gpu=2,

# 训练周期
total_epochs = 100

# 5训练  单卡训练代码最后跟个`1`,八卡最后跟个`8`
./tools/dist_train.sh ./projects/configs/maptr/maptr_nano_r18_110e.py 1
  • 其他配置文件训练与上面修改一致,对应上即可, 如果搞不清楚相对路径直接使用绝对路径即可,省事

  • 训练完成后结果保存在work_dirs目录下。

4 预测

tools/maptr/vis_pred.py

  1. 下载官方训练好的权重和配置文件

下载地址见官方readme

  • 本人下载的 maptr_tiny_r50_24e.pth下载地址 和对应config作为测试
  1. 修改配置文件

由于将权重文件放入config/maptr_tiny_r50_24e.py目录,

需要修改maptr_tiny_r50_24e.py中的_base_参数custom_nus-3d.pydefault_runtime.py文件的路径

  • 搞不清楚路径直接上绝对路径即可,本人的如下:
_base_ = [
    '../projects/configs/datasets/custom_nus-3d.py',
    '../projects/configs/_base_/default_runtime.py'
]
  1. 运行
python tools/maptr/vis_pred.py config/maptr_tiny_r50_24e.py ckpts/maptr_tiny_r50_24e.pth  --show-dir ./vis_dirs
  • 结果保存在./vis_dirs目录下
  1. 生成可视化视频
python tools/maptr/generate_video.py ./vis_dirs
  • 生成demo.mp4视频流某一帧显示如下:

在这里插入图片描述


  • 如果觉得本文章可以,一键三连一波,^_^
  • 欢迎加入Q-472648720,大家一起学习bev相关知识1+1>2😊
  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
GitHub代码复现是指在GitHub上找到一个感兴趣或有用的开源代码项目,并通过阅读代码、运行代码并进行修改来重新实现或再次创建整个项目。 首先,需要在GitHub上搜索并找到目标项目。可以通过GitHub的搜索功能,输入关键词、项目名称、描述等来筛选出符合条件的项目。选择一个代码质量好、维护活跃的项目会更有保障。 一旦找到了目标项目,就可以clone(克隆)该项目到本地。可以使用git命令行或者通过GitHub Desktop等工具进行操作。克隆项目后,就可以在本地对代码进行修改、调试、定制等。 接下来,对项目进行配置和安装依赖。一般来说,项目中会有一个readme文件或者其他文档来指导配置环境和安装所需的依赖包。根据项目要求进行配置和安装。 然后,就可以运行项目了。根据项目的要求,可能需要提供一些参数或者数据集。根据项目的文档,在终端或者IDE中运行相应的命令或者程序。 当项目运行成功后,就可以根据自己的需求对代码进行修改和优化。可以根据项目的架构和实现逻辑进行更改,添加新的功能,或者提升代码的性能等。 最后,如果对项目的改进比较显著,可以考虑提交自己的贡献给项目的维护者。可以通过Fork项目、修改代码、提交Pull Request等方式向项目提交自己的改动。项目维护者会进行代码审查,并决定是否接受你的改动。 总之,GitHub代码复现是一个学习和交流的过程。通过复现别人的代码,可以提升自己的编程能力,了解项目的实现细节,还可以与其他开发者交流、合作,共同提高。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全网最菜的Slamer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值