MapTR复现记录

感谢 @ alfredgu001324 的大力帮助!

记录一下复现的坑:

时间:2023.7.20-2023.8.2

机器一配置:3090(12G),内存32G,win10,(tb店租一天36块,todesk远程连接)

机器二配置:3090(12G),内存32G,linux,图形化界面,(同上)

机器三配置:1080Ti*2(12G*2),内存96G,linux,命令行界面,服务器上的docker容器

1、安装conda(此处省略)

anaconda下载及安装(保姆级教程) - 知乎 (zhihu.com)

如果是用docker就可以不用conda了。 

2、安装CUDA(此处省略)

win10 Anaconda 配置CUDA、CUDNN、pytorch详细安装教程_anaconda cuda安装_老秦子弟的博客-CSDN博客

Ubuntu安装conda_没有金刚钻,也木有刷子的博客-CSDN博客

docker的话就构建对应的Ubuntu+CUDA+python的镜像,可以参考:
Pytorch Docker镜像构建教程(不同系统、CUDA、Python版本) - 知乎 (zhihu.com)

这里给出我的Dockerfile,可以参考:

# CUDA基础镜像
FROM nvidia/cuda:11.3.1-cudnn8-devel-ubuntu18.04

# 安装基础包
RUN apt update && \
    apt install -y \
        wget build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev \
        libreadline-dev libffi-dev libsqlite3-dev libbz2-dev liblzma-dev && \
    apt clean && \
    rm -rf /var/lib/apt/lists/*

RUN cp  /etc/apt/sources.list  /etc/apt/sources.list.back
RUN sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list
RUN sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list

RUN apt update && apt-get upgrade -y

RUN cd /etc/apt && cp sources.list.back sources.list && apt-get update -y

WORKDIR /temp

# 下载python
RUN wget https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tgz && \
    tar -xvf Python-3.8.10.tgz

# 编译&安装python
RUN cd Python-3.8.10 && \
    ./configure --enable-optimizations && \
    make && \
    make install

RUN mkdir -p /root/.pip && \
    echo "[global]" > /root/.pip/pip.conf && \
    echo "timeout = 6000" >> /root/.pip/pip.conf && \
    echo "index-url = https://pypi.tuna.tsinghua.edu.cn/simple" >> /root/.pip/pip.conf

WORKDIR /workspace

RUN rm -r /temp && \
    ln -s /usr/local/bin/python3.8 /usr/local/bin/python && \
    ln -s /usr/local/bin/pip3.8 /usr/local/bin/pip

# 安装pytorch
# https://pytorch.org/get-started/locally/
RUN pip3 install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html && \
    rm -r /root/.cache/pip

# Install any needed packages
RUN apt-get update && apt-get install -y \
    gcc-5 \
    git \
    wget \
    && rm -rf /var/lib/apt/lists/*

ENV CUDA_HOME /usr/local/cuda
RUN pip3 install -U openmim -i https://pypi.tuna.tsinghua.edu.cn/simple
RUN mim install mmcv-full==1.4.0
RUN mim install mmdet==2.14.0
RUN mim install mmsegmentation==0.14.1
RUN pip3 install timm -i https://pypi.tuna.tsinghua.edu.cn/simple

3、此处开始按照MapTR的教程配置,第一步创建虚拟环境

MapTR的主页:hustvl/MapTR: [ICLR'23 Spotlight] MapTR: Structured Modeling and Learning for Online Vectorized HD Map Construction (github.com)

MapTR的安装教程:

MapTR/docs/install.md at main · hustvl/MapTR (github.com)

conda create -n maptr python=3.8 -y
conda activate maptr

docker里的话 

 4、第二步,下载pytorch

pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html
# Recommended torch>=1.9

 这里可能会出现一些网络问题,试试挂梯子/不挂梯子/用流量等等方法。可能会需要再安装一些依赖的包,直接pip 安装就行。

5、第三步,安装gcc(可选,但安装总没错)

conda install -c omgarcia gcc-5 # gcc-6.2

linux里应该是用这个命令:

apt-get install gcc-5

 6、第四步,安装mmcv-full

pip install mmcv-full==1.4.0
#  pip install mmcv-full==1.4.0 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html

新版本里mmcv-full叫mmcv,mmcv叫mmcv-lite,都是2.0后的版本。不要去用新版本,后面有两个包会起冲突。pip下载得慢可以设置清华源。【Python】pip配置清华镜像源_python清华镜像源_进进呀丶的博客-CSDN博客

也可以用openmmlab的mim下载,但也要下载1.4的版本。

安装 MMCV — mmcv 2.0.1 文档

这个mmcv-full的build的过程有点久,16G内存的电脑会在这里卡死,32G的才能成功。

7、第五步,安装mmdet和mmseg

pip install mmdet==2.14.0
pip install mmsegmentation==0.14.1

同理,如果有问题可以选择清华源或者mim。

8、第六步,安装timm

pip install timm

9、第七步, clone MapTR

git clone https://github.com/hustvl/MapTR.git

 可能有网络问题,可以设置代理、挂梯子、或者用国内git的地址:

MapTR: MapTR ICLR2023

10、第八步,安装mmdet3d和GKT

cd /path/to/MapTR/mmdetection3d
python setup.py develop

cd /path/to/MapTR/projects/mmdet3d_plugin/maptr/modules/ops/geometric_kernel_attn
python setup.py build install

 这一步的坑非常多:

(1)首先这个“cd /path/to/MapTR/mmdetection3d”改成自己的路径,上一步的命令一般会安装在当前文件夹。

(2)这个setup.py文件需要管理员权限运行。所以要以管理员身份运行powershell或者命令行。

(3)这个文件需要安装很多包,并且固定了从境外的源读取,所以最好用梯子,不然网络中断就会超时失败。超时失败就要自行用pip安装对应版本的包。也会出现下面这种错误,把报错的包降级,安装一个旧的版本就行。把需要的包安装之后继续运行"python setup.py develop",重复几次就好了。

RuntimeError: Python version >= 3.9 required.

 (4)GKT在windows系统里好像是用不了的,后面如果报错就把引用了的代码注释掉。

11、第九步,安装其他环境要求

cd /path/to/MapTR
pip install -r requirement.txt

 在windows上需要提前安装visual studio的生成工具,把“基于C++的桌面开发的负载”选上,右边的插件里也要选上。CMake也要提前安装。linux可能也需要安装一些依赖,根据报错安装就行。

第八步和第九步会有包的冲突,在issue里也有提到,下面这个是代码能跑的包的版本,可以自行对照。建议完全按照这个版本来,因为numpy、scipy、scikit-image、pandas、matplotlib等等包都会有冲突的问题,其中python的版本不能改,numpy的版本不能改,其他包根据这两个往下调。另外,把下面列出的这些包安装了就行,其余的包的报错可以不管,比如说av2和nuscenes-devkit这两个包的报错。

av2 0.2.1 requires numpy>=1.21.5
nuscenes-devkit 1.1.10 requires Shapely<=1.8.5

 推荐的包的版本:

Package                   Version      Editable project location
------------------------- ------------ ------------------------------------------------
absl-py                   1.4.0
addict                    2.4.0
anyio                     3.7.1
argcomplete               3.1.1
argon2-cffi               21.3.0
argon2-cffi-bindings      21.2.0
arrow                     1.2.3
asttokens                 2.2.1
async-lru                 2.0.4
attrs                     23.1.0
av                        10.0.0
av2                       0.2.1
Babel                     2.12.1
backcall                  0.2.0
beautifulsoup4            4.12.2
black                     23.7.0
bleach                    6.0.0
cachetools                5.3.1
certifi                   2023.7.22
cffi                      1.15.1
charset-normalizer        3.2.0
click                     8.1.6
colorlog                  6.7.0
comm                      0.1.4
contourpy                 1.1.0
cycler                    0.11.0
debugpy                   1.6.8
decorator                 5.1.1
defusedxml                0.7.1
descartes                 1.1.0
distlib                   0.3.7
exceptiongroup            1.1.2
executing                 1.2.0
fastjsonschema            2.18.0
filelock                  3.12.2
fire                      0.5.0
flake8                    6.1.0
fonttools                 4.42.0
fqdn                      1.5.1
fsspec                    2023.6.0
GeometricKernelAttention  1.0
google-auth               2.22.0
google-auth-oauthlib      1.0.0
grpcio                    1.56.2
huggingface-hub           0.16.4
idna                      3.4
imageio                   2.31.1
importlib-metadata        6.8.0
importlib-resources       6.0.0
iniconfig                 2.0.0
ipykernel                 6.25.0
ipython                   8.12.2
ipython-genutils          0.2.0
ipywidgets                8.1.0
isoduration               20.11.0
jedi                      0.19.0
Jinja2                    3.1.2
joblib                    1.3.1
json5                     0.9.14
jsonpointer               2.4
jsonschema                4.18.6
jsonschema-specifications 2023.7.1
jupyter                   1.0.0
jupyter_client            8.3.0
jupyter-console           6.6.3
jupyter_core              5.3.1
jupyter-events            0.7.0
jupyter-lsp               2.2.0
jupyter_server            2.7.0
jupyter_server_terminals  0.4.4
jupyterlab                4.0.3
jupyterlab-pygments       0.2.2
jupyterlab_server         2.24.0
jupyterlab-widgets        3.0.8
kiwisolver                1.4.4
lazy_loader               0.3
llvmlite                  0.31.0
lyft-dataset-sdk          0.0.8
Markdown                  3.4.4
markdown-it-py            3.0.0
MarkupSafe                2.1.3
matplotlib                3.5.2
matplotlib-inline         0.1.6
mccabe                    0.7.0
mdurl                     0.1.2
mistune                   3.0.1
mmcv-full                 1.4.0
mmdet                     2.14.0
mmdet3d                   0.17.2       /MapTR/mmdetection3d
mmsegmentation            0.14.1
mypy-extensions           1.0.0
nbclient                  0.8.0
nbconvert                 7.7.3
nbformat                  5.9.2
nest-asyncio              1.5.7
networkx                  2.2
notebook                  7.0.1
notebook_shim             0.2.3
nox                       2023.4.22
numba                     0.48.0
numpy                     1.18.5
nuscenes-devkit           1.1.10
oauthlib                  3.2.2
opencv-python             4.8.0.74
overrides                 7.3.1
packaging                 23.1
pandas                    1.3.4
pandocfilters             1.5.0
parso                     0.8.3
pathspec                  0.11.2
pexpect                   4.8.0
pickleshare               0.7.5
Pillow                    10.0.0
pip                       23.2.1
pkgutil_resolve_name      1.3.10
platformdirs              3.10.0
plotly                    5.15.0
pluggy                    1.2.0
plyfile                   1.0.1
prettytable               3.8.0
prometheus-client         0.17.1
prompt-toolkit            3.0.39
protobuf                  4.23.4
psutil                    5.9.5
ptyprocess                0.7.0
pure-eval                 0.2.2
pyarrow                   12.0.1
pyasn1                    0.5.0
pyasn1-modules            0.3.0
pycocotools               2.0.6
pycodestyle               2.11.0
pycparser                 2.21
pyflakes                  3.1.0
Pygments                  2.15.1
pyparsing                 3.0.9
pyproj                    3.5.0
pyquaternion              0.9.9
pytest                    7.4.0
python-dateutil           2.8.2
python-json-logger        2.0.7
pytz                      2023.3
PyWavelets                1.4.1
PyYAML                    6.0.1
pyzmq                     25.1.0
qtconsole                 5.4.3
QtPy                      2.3.1
referencing               0.30.0
requests                  2.31.0
requests-oauthlib         1.3.1
rfc3339-validator         0.1.4
rfc3986-validator         0.1.1
rich                      13.5.2
rpds-py                   0.9.2
rsa                       4.9
safetensors               0.3.1
scikit-image              0.19.3
scikit-learn              1.3.0
scipy                     1.5.0
Send2Trash                1.8.2
setuptools                68.0.0
Shapely                   1.8.5.post1
six                       1.16.0
sniffio                   1.3.0
soupsieve                 2.4.1
stack-data                0.6.2
tenacity                  8.2.2
tensorboard               2.13.0
tensorboard-data-server   0.7.1
termcolor                 2.3.0
terminado                 0.17.1
terminaltables            3.1.10
threadpoolctl             3.2.0
tifffile                  2023.7.10
timm                      0.9.2
tinycss2                  1.2.1
tomli                     2.0.1
torch                     1.9.1+cu111
torchvision               0.10.1+cu111
tornado                   6.3.2
tqdm                      4.65.0
traitlets                 5.9.0
trimesh                   2.35.39
typing_extensions         4.7.1
tzdata                    2023.3
uri-template              1.3.0
urllib3                   1.26.16
virtualenv                20.24.2
wcwidth                   0.2.6
webcolors                 1.13
webencodings              0.5.1
websocket-client          1.6.1
Werkzeug                  2.3.6
wheel                     0.38.4
widgetsnbextension        4.0.8
yapf                      0.40.1
zipp                      3.16.2

12、第十步,下载预训练权重

cd /path/to/MapTR
mkdir ckpts

cd ckpts 
wget https://download.pytorch.org/models/resnet50-19c8e357.pth
wget https://download.pytorch.org/models/resnet18-f37072fd.pth

windows可以手动下载放到对应文件夹里。 

13、准备数据集

挂梯子下载CAN busnuScenes数据集或者找找百度网盘的链接。nuScenes总数据量1.4TB,nuScenes-mini数据量4GB,可以选择性下载。用于测试建议下载nuScenes-mini。

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

将下载的nuScenes放到data文件夹下,canbus和nuScenes放同级文件夹,下的是原版数据集 version 就不用改,下的是 mini 的话就改成 v1.0-mini,还需要另外下载一个map extension,canbus 改成下载的canbus的地址。运行原版数据的生成要大概2-3h,运行后会生成 nuscenes_infos_temporal_{train,val}.pkl

在docker里配置遇到了这两个报错,要用apt-get安装一下。 

ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
apt-get update
apt-get install -y libgl1-mesa-glx
apt-get install -y libglib2.0-0

14、训练/测试

在预训练权重对应的config文件里把权重对应的地址改成自己的地址。

如果是单个GPU跑训练,就把gpu数量和bn层也改掉。单GPU可以不用官方的.sh文件,可以直接用train.py的脚本。

python train.py D:\MapTR-main\MapTR-main\projects\configs\maptr\maptr_nano_r18_110e.py  --gpus 1 --no-validate

具体可以参考:
win10复现maptr(踩坑记录)_婆罗门()的博客-CSDN博客

如果是单GPU跑测试,也可以直接用test.py的脚本,config改成预训练对应的配置文件的地址,ckpt改成预训练的权重地址。另外还要在config文件里把assert注释掉,assert下面的单GPU测试的代码取消注释。

python tools/test.py config ckpt --eval chamfer

多GPU训练/测试就用官方的.sh文件,需要配置一些并行的包,按照报错安装就行。其中.sh文件后面是对应的config文件地址,(权重地址),GPU数量。如果没有8个GPU,也要在config文件里更改GPU数。

./tools/dist_train.sh ./projects/configs/maptr/maptr_tiny_r50_24e.py 8
./tools/dist_test_map.sh ./projects/configs/maptr/maptr_tiny_r50_24e.py ./path/to/ckpts.pth 8

在docker里会有权限问题,"bash: ./tools/dist_test_map.sh: Permission denied",给个权限就行 

chmod +x ./tools/dist_test_map.sh

15、一些报错解决

AttributeError: module 'numpy' has no attribute 'long'

将numpy改成上面包列表里的版本。

ModuleNotFoundError: No module named 'projects'

export一下pythonpath,"export PYTHONPATH=$PYTHONPATH:/home/username/mypackage"

ModuleNotFoundError: No module named 'numpy.typing'

看Traceback,把所有av2的import都注释掉。

ModuleNotFoundError: No module named 'tkinter'

看Traceback,把所有thinter的import都注释掉。

AttributeError: module 'setuptools._distutils' has no attribute 'version'

 将setuptools降级,我是这么解决的:"pip install setuptools==49.6.0"

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值