CenterFusion项目超详细环境搭建步骤(这几天正在做)

CenterFusion项目超详细环境搭建步骤(这几天正在做),第1张

目录
  • 一、环境配置
  • 二、数据集准备
  • 三、预训练模型下载
  • 四、训练
  • 五、参考资料

说明:本文引用 CenterFusion: Center-based Radar and Camera Fusion for 3D Object Detection,复现此论文中的代码,互相学习。

注意:由于博主这几天都在复现这个项目,博客的内容的进度也是博主项目复现的进度,如果遇到找不到页面的情况,是由于内容在待审核,过一会儿就出来了。

省钱小妙招:如果租的服务器可以选择临时用或者不用 GPU,建议先不用 GPU,后面需要 GPU 的时候再打开就行了,其中构建可变性卷积库模型训练的时候才需要用 GPU

一、环境配置
  • 先把源码下载下来。
  • CenterFusion 源码地址:https://github.com/mrnabati/CenterFusion
  • 按照 ConterFusion 中的 README.md 文件中的步骤进行配置。

第1步:新建虚拟环境

  • 根据 README.md 文件中的信息可知,需要 python3.7 的版本。
  • 所以新建一个 python3.7 的虚拟环境。
conda create -n env1 python=3.7
  • 更新bashrc中的环境变量。
conda init bash && source /root/.bashrc
  • 切换到创建的虚拟环境:env1
conda activate env1

第2步:安装 Pytorch

  • 从官网上查看安装 Pytorch 的命令:https://pytorch.org/get-started/previous-versions/
  • 选择 Pytorch 1.7.1 版本,根据自己系统的 cuda 版本选择,由于我的云服务器系统中的 cuda 是 11.1 版本,所以选择下图红框的命令。
  • 命令如下:
pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html

第3步:安装 COCOAPI

  • 命令如下:
pip install cython
pip install -U 'git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'
  • 如果安装失败,多试几次就行了。

第4步:克隆 CenterFusion 存储库

  • 其实就是使用 git 下载 CenterFusion 源码并放进 CF_ROOT 这个路径中。
  • 这里,我手动将源码上传到云服务器中并解压缩了。
  • 解压缩后的文件夹为 CenterFusion-master,使用如下命令可以重命名文件夹:
mv + 重命名前 + 重命名后
如: mv CenterFusion-master CenterFusion
  • 根据自己的 CenterFusion 路径建立快捷方式:
CF_ROOT=/root/CenterFusion

第5步:安装环境所需要的包

  • 命令如下:
cd $CF_ROOT
pip install -r requirements.txt

第6步:构建可变形卷积库

  • 源码中是没有 DCNv2 这个文件夹的,所以需要下载。
  • 这里去这个网址:https://github.com/lbin/DCNv2/tree/pytorch_1.7 下载 DCNv2==1.7 版本的,然后再上传到服务器中。
  • unzip 解压缩命令(防止自己忘记):
unzip -d 路径 .zip压缩包
  • 这里需要解压缩到 $CF_ROOT/src/lib/model/networks 文件夹下。
unzip -d $CF_ROOT/src/lib/model/networks DCNv2-pytorch_1.7.zip
  • 然后重命名 DCNv2-pytorch_1.7 为 DCNv2。
  • 进入 DCNv2 中执行 make.sh 文件。
cd DCNv2
./make.sh
  • 执行过程中,会出现警告
warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
  • 不是代码的问题,最后出现 Finished processing dependencies for DCNv2==0.1 即可
二、数据集准备
  • NuScenes 数据集官网:http://www.kaotop.com/file/tupian/20220429/lili pfont color= | | ` -- ... | |-- CAM_BACK_LEFT | |-- CAM_BACK_RIGHT | |-- CAM_FRONT | |-- CAM_FRONT_LEFT | |-- CAM_FRONT_RIGHT | |-- RADAR_BACK_LEFT | | | -- xxx.pcd | | ` -- ... | |-- RADAR_BACK_RIGHT | |-- RADAR_FRON | |-- RADAR_FRONT_LEFT | `-- RADAR_FRONT_RIGHT |-- sweeps |-- v1.0-mini |-- v1.0-test `-- v1.0-trainval

    • 如果没下载 Trainval 部分,当然是没 v1.0-trainval 文件夹
    • 最后将数据集,转换为 COCO 格式,不过在转换之前,需要修改一点代码,在/CenterFusion/src/tools/convert_nuScenes.py 文件中
    • 首先第 27 行,如果没下载 Trainval 部分,将 SPLITS 值改成如下:
    SPLITS = {
              'mini_val': 'v1.0-mini',
              'mini_train': 'v1.0-mini',
              'test': 'v1.0-test',
              }
    
    • 然后第 56 行将 NUM_SWEEPS 的值改为 3,否则后面出现找不到数据集路径的错误
    • 然后开始转换。
    cd $CF_ROOT/src/tools
    python convert_nuScenes.py
    
    • 如果转换的过程中,突然被 killed 掉,那是因为内存不够了,需要换个更大内存的服务器。
    • 如果想要更加深入了解 nuscenes 转 coco 格式的 python 代码的执行过程,也就是 convert_nuScenes.py 文件,但又看不太懂,参考博客:NuScenes 数据集转 COCO 格式 convert_nuScenes.py 文件详解
    三、预训练模型下载
    • 下载两个模型:
      ①centerfusion_e60:https://drive.google.com/uc?export=download&id=1XaYx7JJJmQ6TBjCJJster-Z7ERyqu4Ig
      ②centernet_baseline_e170:https://drive.google.com/uc?export=download&id=1iFF7a5oueFfB5GnUoHFDnntFdTst-bVI
    • 然后将其解压缩到 /CenterFusion/models 文件夹中即可。
    四、训练
    • 使用 /CenterFusion/experiments/train.sh 脚本可以用来训练网络。
    • 不过在训练之前需要修改 train.sh 中的参数。
    • (1)如果没下载 Trainval 部分,需要将 train_split 的值改为 mini_train
      (2)我训练时报错,发现 24GB 的显存不够用,把 batch_size 改为了 16 ,大于 24 GB 的显卡可以不用改
      (3)由于包里钱钱不太多只配置了一个 gpu,所以参数由 gpu 0,1 改为 gpu 0 ,用了两个 GPU 的话可以不用改
    • 在训练过程中,都会遇到如下问题,先解决后,再一次性训练成功

    错误1:

    Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
    Traceback (most recent call last):
      File "test.py", line 215, in <module>
        prefetch_test(opt)
      File "test.py", line 73, in prefetch_test
        Logger(opt)
      File "/root/CenterFusion/src/lib/logger.py", line 34, in __init__
        subprocess.check_output(["git", "describe", "--always"])))
      File "/root/miniconda3/envs/env1/lib/python3.7/subprocess.py", line 411, in check_output
        **kwargs).stdout
      File "/root/miniconda3/envs/env1/lib/python3.7/subprocess.py", line 512, in run
        output=stdout, stderr=stderr)
    subprocess.CalledProcessError: Command '['git', 'describe', '--always']' returned non-zero exit status 128.
    
    • 看倒数第二个 File 路径,打开 /root/miniconda3/envs/env1/lib/python3.7/subprocess.py 文件,修改第 411-1=410 行,将 check=True 改为 check=False 即可。
    • 如果是其它服务器,或者没有使用虚拟环境,去找 …/lib/python3.7/subprocess.py 这样的路径,实在找不到的话可以先训练一下子,等它报错,然后看倒数第二个路径就可以很容易找到了。

    错误2:

    python: can't open file 'tools/nuscenes-devkit/python-sdk/nuscenes/eval/detection/evaluate.py': [Errno 2] No such file or directory
    Traceback (most recent call last):
      File "main.py", line 140, in <module>
        main(opt)
      File "main.py", line 106, in main
        with open('{}/metrics_summary.json'.format(out_dir), 'r') as f:
    FileNotFoundError: [Errno 2] No such file or directory: '/root/CenterFusion/src/lib/../../exp/ddd/centerfusion/nuscenes_eval_det_output_mini_val//metrics_summary.json'
    
    • 这是由于 ~/CenterFusion/src/tools/nuscenes-devkit 这个文件夹居然是空的还要自己手动去下载。
    • 命令如下:
    #在 ~/CenterFusion/src/tools 文件夹下,先删除原来的空文件夹
    rm -rf nuscenes-devkit
    #再下载 nuscenes-devkit
    git clone https://github.com/nutonomy/nuscenes-devkit.git
    
    • 下载失败没事,再试几次就好了。

    错误3:

    RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED
    
    • 如果严格按照我的这个步骤配置,应该是不会出错的。
    • 但是如果出现这个错误,那么就是你的 cuda、cudnn、pytorch 这几个版本不匹配导致的。
    • 怎么解决呢?首先查看系统的 cuda、cudnn 版本,具体的命令就自己查吧,然后根据系统的 cuda、cudnn 版本,选择对应的 pytorch 版本,如果还没解决,私我吧。

    开始训练

    • 排除了这几个错误后,开始训练(可能还会遇到错误,遇到了再贴出来解决)。
    cd $CF_ROOT
    bash experiments/train.sh
    
    • 训练结束,如下图(训练完了再贴出来):
    • 由于训练时间太长,以及一些要求,这阵子博主需要翻译并弄清楚 CenterFusion 论文中的内容,以及使用 pytorch 中的工具将训练过程可视化出来,并弄清楚源码,解析最后的参数含义,所以先暂停更新,最后会将实际成果(训练过程可视化、参数含义、代码执行过程等等)贴出来。
    五、参考资料

    [1] CenterFusion代码复现
    [2] CenterFusion算法环境配置与demo运行 CenterFusion: Center-based Radar and Camera Fusion for 3D Object Detection
    [3] 解决setup.py编译C++代码的-Wstrict-prototypes警告
    [4] 运行中的程序突然出现"Killed"原因
    [5] 成功解决subprocess.CalledProcessError: Command ‘[‘git‘, ‘describe‘]‘ returned non-zero exit status 128.
    [6] pytorch错误:RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED (安装cuda)

    欢迎分享,转载请注明来源:内存溢出

    原文地址:https://54852.com/langs/787376.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-05
下一篇2022-05-05

发表评论

登录后才能评论

评论列表(0条)

    保存