本项目搭建环境如下:
ubuntu20.04(非必须)
nvidia驱动版本515.65.01(非必须)
python3.7(必须)
CUDA11.0(必须)
cuDNN8.0(必须)
pytorch1.7.1(必须)
使用python3.7版本
conda create --name pytorch17 python=3.7
新开一个终端进入虚拟环境 ,以下所有安装均在该环境下进行
source activate pytorch17
conda install cudatoolkit=11.0 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/linux-64/
或者不指定镜像源
conda install -c nvidia cudatoolkit=11.0
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
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
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'
cd ~
git clone https://github.com/mrnabati/CenterFusion.git
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
下载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
下载该包放入对应位置
cd ~/CenterFusion/src/tools
rm -rf nuscenes-devkit/
git clone https://github.com/nutonomy/nuscenes-devkit.git
从nuScenes网站下载nuScenes数据集
或百度云盘链接: https://pan.baidu.com/s/18XEvDtzrFjHA9XD5vy_uyQ 密码: wu7h
需要注册账号,注册后进入看到以下画面
将下载的文件解压到CenterFusion\data\nuscenes目录中。如下图所示
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
成功转换
作者提供文件在google drive
centerfusion_e60
centernet_baseline_e170
百度云盘链接: https://pan.baidu.com/s/1j_M5AzD2chkAPNjCrEq7Zg 密码: veup
下载后放入/CenterFusion/models文件夹下
Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
Traceback (most recent call last):
File "test.py", line 215, in
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 这样的路径,实在找不到的话可以先训练一下子,等它报错,然后看倒数第二个路径就可以很容易找到了。
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
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
训练模型之后,在 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’ 即可
RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED
如果严格按照我的这个步骤配置,应该是不会出错的。
但是如果出现这个错误,那么就是你的 cuda、cudnn、pytorch 这几个版本不匹配导致的。
怎么解决呢?首先查看系统的 cuda、cudnn 版本,具体的命令就自己查吧,然后根据系统的 cuda、cudnn 版本,选择对应的 pytorch 版本
不过在训练之前需要修改 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
修改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
Traceback (most recent call last):
File "test.py", line 215, in
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