Centerfusion算法环境配置及模型训练

概述

本项目搭建环境如下:
ubuntu20.04(非必须)
nvidia驱动版本515.65.01(非必须)
python3.7(必须)
CUDA11.0(必须)
cuDNN8.0(必须)
pytorch1.7.1(必须)

1. 配置conda环境

1.1 新建conda环境

使用python3.7版本

conda create --name pytorch17 python=3.7    

新开一个终端进入虚拟环境 ,以下所有安装均在该环境下进行

source activate pytorch17  

1.2 安装cuda

conda install cudatoolkit=11.0 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64/   

或者不指定镜像源

conda install -c nvidia cudatoolkit=11.0

1.3 安装cudnn

conda install cudnn=8.0 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/linux-64/  

或者不指定镜像源

conda install -c nvidia cudnn=8.0.4

1.4 安装pytorch

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     

1.5 安装cocoapi

pip install -i https://pypi.douban.com/simple/ cython
pip install -i https://pypi.douban.com/simple/ -U 'git+https://gitee.com/monkeycc/cocoapi.git#subdirectory=PythonAPI'  

2. 配置Centerfusion

2.1 克隆CenterFusion的github库

cd ~
git clone https://github.com/mrnabati/CenterFusion.git

2.2 安装依赖包

pip3 install scikit-learn==0.21.0 
pip3 install opencv-python==4.0.0.21  
pip3 install Cython==0.29.21  
pip3 install numba==0.49.1      
pip3 install progress==1.5
pip3 install matplotlib==3.3.3
pip3 install easydict==1.9
pip3 install scipy==1.5.4
pip3 install pyquaternion==0.9.9
pip3 install nuscenes-devkit==1.0.5 opencv-python==4.0.0.21 numpy==1.19.4    pip3 install pyyaml==5.3.1
pip3 install motmetrics==1.1.3
pip3 install tensorboardx==2.1

2.3 安装DCNv2

下载DCNv2,并执行./make.sh,在此之前需要先修改文件内容换为python3

cd $CF_ROOT/src/lib/model/networks
rm -rf DCNv2
git clone https://github.com/lbin/DCNv2.git
cd DCNv2
./make.sh   

编译可能会报unsupported gpu architecture 'compute_86’错误
错误原因:显卡算力太强,需要进行限制
在conda虚拟环境中降低显卡算力为8.0

conda env config vars set TORCH_CUDA_ARCH_LIST="8.0"

重新启动虚拟环境

conda deactivate
conda activate pytorch17

查看虚拟环境中的环境变量,有刚刚加入的环境变量即可

conda env config vars list

重新编译DCNv2

./make.sh

2.4 下载nuscenes-devkit包

下载该包放入对应位置

cd ~/CenterFusion/src/tools
rm -rf nuscenes-devkit/
git clone https://github.com/nutonomy/nuscenes-devkit.git

3. 数据集准备

3.1 下载数据集

nuScenes网站下载nuScenes数据集
或百度云盘链接: https://pan.baidu.com/s/18XEvDtzrFjHA9XD5vy_uyQ 密码: wu7h
需要注册账号,注册后进入看到以下画面
在这里插入图片描述

下拉至Full dataset (v1.0)
在这里插入图片描述

将下载的文件解压到CenterFusion\data\nuscenes目录中。如下图所示
在这里插入图片描述

3.2 转换数据集格式为COCO格式

cd CenterFusion/src/tools 
python convert_nuScenes.py

报错:ImportError: No module named nuscenes.nuscenes,原因未安装nuscenes-devkit

pip install nuscenes-devkit

然后将convert_nuScenes.py文件的56行修改为NUM_SWEEPS = 3
![\]](https://img-blog.csdnimg.cn/8a3732a2f95b4fd29c7f3976d746f594.png)

运行py文件要使用python3

python3 convert_nuScenes.py

成功转换

4. 预训练模型文件下载

在这里插入图片描述

作者提供文件在google drive
centerfusion_e60
centernet_baseline_e170
百度云盘链接: https://pan.baidu.com/s/1j_M5AzD2chkAPNjCrEq7Zg 密码: veup

下载后放入/CenterFusion/models文件夹下

5. 常见错误及其解决方案

5.1 错误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/autodl-tmp/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 这样的路径,实在找不到的话可以先训练一下子,等它报错,然后看倒数第二个路径就可以很容易找到了。

5.2 错误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/autodl-tmp/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

5.3 错误3

训练模型之后,在 CenterFusion 下生成 exp/ddd/centerfusion/logs_20xx-xx-xx-xx-xx/log.txt 文件,打开文件后,会发现这是空的!!!这是因为在 CenterFusion/src/lib/logger.py 文件中第 52 行

self.log = open(log_dir + '/log.txt', 'w')

这是是以写的方式打开,每次写的时候都会覆盖原来文件中的内容,应该以追加的方式打开,应该将参数 ‘w’ 改为 ‘a’ 即可

5.4 错误4

RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED

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

6. 算法测试训练

6.1 算法训练

不过在训练之前需要修改 train.sh 中的参数
(1)设置训练集 train_split 的值,可选 train、mini_train 这两个数据集
(2)设置测试集 val_split 的值,可选 val、mini_val、test 这三个数据集
(3)我训练时报错,发现 4GB 的显存不够用,gtx16504GB显卡把 batch_size 改为了 1,RTXA20008GB显卡把 batch_size 改为了 6,刚好跑满 现在显存7762MiB / 8192MiB大于 24 GB 的显卡可以不用改,改成1后训练基本没用,不收敛
(4)由于电脑配置有点low,只配置了一个 gpu,所以参数由 gpu 0,1 改为 gpu 0 ,用了两个 GPU 的话可以不用改
在这里插入图片描述

cd ~/CenterFusion
bash experiments/train.sh

在这里插入图片描述
在这里插入图片描述

6.2 算法测试

  • 修改如下参数:
    (1)设置验证集 val_split 的值,可选 val、mini_val、test
    (2)可视化(非必须):添加参数 --debug 4 即可,选项help如下
    [图片]

修改test.sh,由于只有一个GPU,所以测试时需要修改配置
在这里插入图片描述

另外还需要修改load的model,将/CenterFusion/exp/ddd/centerfusion/中训练好的pth文件复制到model文件夹中,修改名字,并在test.sh中加载该模型,修改后如下

export CUDA_VISIBLE_DEVICES=0
cd src

## Perform detection and evaluation
python test.py ddd \
    --exp_id centerfusion \
    --dataset nuscenes \
    --val_split mini_val \
    --run_dataset_eval \
    --num_workers 4 \
    --nuscenes_att \
    --velocity \
    --gpus 0 \
    --pointcloud \
    --radar_sweeps 3 \
    --max_pc_dist 60.0 \
    --pc_z_offset -0.0 \
    --load_model ../models/z99_mini_train_1205.pth \
    --flip_test \
    --debug 4 \
    # --resume \

增加–debug 4后报错
可视化需要修改代码,将CenterFusion/src/lib/utils下的debugger.py做部分修改,github issue如下debug mode in test.sh gives error (-5:Bad argument) in function ‘line’ · Issue #42 · mrnabati/CenterFusion · GitHub

  • 这是加了参数 --debug 4 后执行 debug 会产生的错误
Traceback (most recent call last):
  File "test.py", line 215, in <module>
    prefetch_test(opt)
  File "test.py", line 125, in prefetch_test
    ret = detector.run(pre_processed_images)
  File "/root/CenterFusion/src/lib/detector.py", line 151, in run
    self.show_results(self.debugger, image, results)
  File "/root/CenterFusion/src/lib/detector.py", line 429, in show_results
    img_id='bird_pred', cnt=self.cnt)
  File "/root/CenterFusion/src/lib/utils/debugger.py", line 426, in add_bird_view
    lineType=cv2.LINE_AA)
cv2.error: OpenCV(4.5.5) :-1: error: (-5:Bad argument) in function 'line'
> Overload resolution failed:
>  - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
>  - Can't parse 'pt1'. Sequence item with index 0 has a wrong type
  • 看错误提示,修改 CenterFusion/src/lib/utils/debugger.py 第 424 行,如下,对四个 rect 值进行强转,具体如下
      cv2.line(bird_view, (int(rect[e[0]][0]), int(rect[e[0]][1])),
              (int(rect[e[1]][0]), int(rect[e[1]][1])), lc, t,
              lineType=cv2.LINE_AA)

然后就可以测试了

cd ~/CenterFusion
bash experiments/test.sh

在这里插入图片描述

生成的可视化检测结果位于/CenterFusion/exp/ddd/centerfusion/debug
在这里插入图片描述

Bird view
在这里插入图片描述

Camera view
在这里插入图片描述

  • 8
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 59
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

HIT_Vanni

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

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

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

打赏作者

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

抵扣说明:

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

余额充值