最近看到了一篇关于线性RNN的3D检测的论文,叫做LION,也是比较感兴趣打算复现一下。由于这篇文章很新,网上还搜不到LION复现的帖子,所以记录一下我的复现经历 (偏小白向),如果有感兴趣的可以交流一下。
LION项目地址(包括论文,代码)——https://happinesslz.github.io/projects/LION/
这里论文就不介绍了,LION是基于openpcdet框架下进行的,不了解的小伙伴可以先简单看一下或者搜一下openpcdet的相关介绍,openpcdet地址:https://github.com/open-mmlab/OpenPCDet
一 准备阶段
在进行复现前,我们应该先查看项目中的README.md,docs目录下的GETTING_STARTED.md和INSTALL.md
其中,主要查看INSTALL.md,如下
首先,先用conda建立一个python3.8的环境,查看自己的cuda版本,如果没有cuda11.8建议下载一个cuda11.8,怎么下载并修改环境变量可以参考https://blog.csdn.net/srh20/article/details/136937398
或者其他博客,网上有很多细致的教学,弄好之后就去安装pytorch2.1.0,去pytorch官网搜索对应的版本,直接在复制在新建的环境中安装
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu118
如果嫌安装太慢可以先去后面的网址手动下载torch、torchvision、torchaudio对应版本的轮子文件,然后再pip install下载好的文件,这部分也有很多博客在讲。python,cuda,pytorch这三部分安装好后我们的准备阶段就ok了,其中第四项spconv可以在下一步下载。
二 安装依赖
这部分是核心部分,也是最痛苦的部分,首先我们接着往下看INSTALL.md
现在我们就可以git clone到pycharm上了,下一步不要直接pip install -r requirements.txt,先查看一下requirements中需要安装哪些依赖。
此时注意到有一些是并没有指定版本的,我们应该先安装有指定版本的,一般未指定版本的库到时候可能会自动安装,这里建议先安装numpy,因为很容易和其他库产生冲突,之后再安装其他指定版本的库,一边安装,一边conda list查看已经安装好的库版本是否对应的上,其中在安装attrs时,说找不到这个库,后来换成了阿里云源成功安装,建议所有的都用阿里云源安装,causal-conv1d这个先暂时不用安装。
pip install xxx -i https://mirrors.aliyun.com/pypi/simple/
在安装一些没有指定版本的库时,有时会自动出现卸载你原来的numpy,并换成新版本的numpy这种情况,此时就要利用百度或gpt想办法查到与numpy1.19.5对应的其他库的版本,如果其他库被卸载并更新也是这种办法,然后自己给定未指定版本的库的版本并重新安装。
我按照renquirements的指定版本安装完所有的库发现其给定的tensorflow2.5.0和typing-extensions4.10.0还是存在冲突,起初我是按照tensorflow需要的版本换成了typing-extensions3.7.4.1,但是后来运行代码时报错说找不到typing-extensions中的某个东西,猜测还是版本太老,于是又换回了4.10.0,虽然还是显示有冲突,但是后来也运行成功了。
其中torch-scatter这个库还是有点问题的,至于什么问题我会在第四章说明,小伙伴们可以直接先看一眼第四章然后再往下进行,或者直接继续到时候再改也可以。
安装好除了causal-conv1d以外的依赖,接下来就可以继续进行下一步了。
python setup.py develop
运行后会生成几个文件,继续往下进行。
由于我只打算使用mamba,所有只执行了mamba的三条指令,RWKV的直接不管。
三 数据集配置
INSTALL.md的内容完成了,接下来看GETTING_STARTED.md。
说明了每个数据集的配置在哪,关于数据集的准备让我们参考OpenPCDet,直接点击OpenPCDet即可,查看openpcdet中的GETTING_STARTED.md部分。
例如我使用的kitti数据集,就将下载好的数据集放到LION/data这个目录下,然后运行下面的指令。
python -m pcdet.datasets.kitti.kitti_dataset create_kitti_infos tools/cfgs/dataset_configs/kitti_dataset.yaml
产生了这几个pkl文件即为配置成功。
四 运行代码
配置好所有环境和数据集后,接下来就是紧张刺激的训练环节了,从README.md中可以看到使用kitti数据集训练的指令为bash run_train_lion_for_kitti.sh,如果你是多GPU,那就先看一下这个脚本里面的内容,并按照你的电脑规格修改,下面是根据我的电脑规格修改后的。由于我只训练mamba的,于是先将下面那四条全部注释掉,第一个参数代表要使用哪几个GPU,我只有两个所以是0,1。第二个参数填你的GPU数量,后面的不用管,改一下最后训练的batch_size,epochs,下一个是检查点的最大保留数量,最后一个是工作进程数,修改好后去cfg_file后面的文件中再修改一下batch_size和epochs。都修改好后就可以直接运行:
bash run_train_lion_for_kitti.sh
如果是单GPU,只需要改cfg_file后面文件中的batch_size和epochs,然后直接运行:
python train.py --cfg_file xx/xx/xxx.yaml
运行后难免会出现一些错误,有时是找不到某个库,注意还是使用之前的方法找到对应的版本直接安装即可,如果实在是版本有冲突,那就挺着,我后来的numpy给我升级成别的版本,但最后还是运行成功了
折腾半天最后有个OSError: libtorch_cuda_cu.so: cannot open shared object file: No such file or directory错误困扰了我很久,发现torch/libs目录中确实没有这个文件,后来也是走了很多弯路,最后在源项目的评论区看到有人有相同的困扰并且作者给出回复"Please make sure these versions of CUDA/CUDNN/Pytorch/torch_scatter are consistent."于是我猜测是torch_scatter这个库出了问题,卸载后参考https://blog.csdn.net/sxf1061700625/article/details/136384595重新安装,安装时一直报错安装不上,然后去官网手动下载对应cuda11.8的版本,最后成功安装,版本为2.1.2+pt21cu118。
其中还有很多曲折,一般通过百度或者gpt都能化解,最后呢也是训练成功了。
测试和推理就参考openpcdet的说明文档即可,在output中找到你训练后生成的pth权重文件,但是在测试时发现并没有返回评价指标,能测试完成后报错FileNotFoundError: [Errno 2] No such file or directory: '/usr/local/cuda:/usr/local/cuda:/usr/local/cuda:/usr/local/cuda/nvvm/lib64'.运行下面指令即可解决:
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/nvvm/lib64:$LD_LIBRARY_PATH
然后就产生会测试结果了。实际上配环境和运行代码的过程中遇到的错误远远比这多,大家遇到问题一定不要灰心,多思考,多尝试。如果有机会的话会更新更加细致的讲解以及其他数据集的训练。