说明:本文引用 CenterFusion: Center-based Radar and Camera Fusion for 3D Object Detection,复现此论文中的代码,互相学习。
注意:由于博主这几天都在复现这个项目,博客的内容的进度也是博主项目复现的进度,如果遇到找不到页面的情况,是由于内容在待审核,过一会儿就出来了。
一、环境配置
第1步:新建虚拟环境
- 根据 README.md 文件中的信息可知,需要 python3.7 的版本。
- 所以新建一个 python3.7 的虚拟环境。
conda create -n env1 python=3.7
conda init bash && source /root/.bashrc
conda activate env1
第2步:安装 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
第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步:构建可变形卷积库
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
- 执行过程中,会出现警告,只要最后出现 Finished processing dependencies for DCNv2==0.1 即可
二、数据集准备
-
NuScenes 数据集官网:https://www.nuscenes.org/download -
需要注册,再下载中找到完整的 NuScenes 数据集。 -
Mini 部分全部下载下来。 -
Trainval 部分只需要下载 Metadata,然后每个部分只需要下载 Keyframe(关键帧数据)、Radar(毫米波雷达数据)、Camera(相机数据)这三个,Lidar(激光雷达数据)就不用下载,共 10 个 part。 -
Test 部分需要下载 Metadata,再下载 Radar、Camera 即可。 -
共计 240GB 左右太特么大了!!!! -
最后将下载下来的数据集压缩包 .tgz 上传到服务器中。 -
这里先在 /CenterFusion/data 路径下新建一个 【nuscenes】文件夹,然后将 tgz 压缩包解压到 nuscenes 文件夹中。 -
如果想偷懒,而且会写批量解压缩 tgz 到指定文件夹的 sh 脚本的话,请务必教教我 -
如果不会写,看我接下来的神操作 -
现在,所有的压缩包都上传到服务器中了~~~~~~~~~~~~ -
开始解压缩······ -
我先用命令 tar -zxvf .tgz压缩包 -C 路径 解压缩一个 tgz 压缩包,然后再用命令 rm .tgz压缩包 删除已经解压缩完的 tgz 压缩包,这样一直循环下去······铛铛铛~解压缩完了俺不偷懒,最光荣,都是俺亲手解压滴~ -
解压完后 nuscenes 中的格式如下,它位于 ~/CenterFusion/data 路径下。
CenterFusion
`-- data
`-- nuscenes
|-- maps
|-- samples
| |-- CAM_BACK
| | | -- xxx.jpg
| | ` -- ...
| |-- 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
- 最后将数据集,转换为 COCO 格式。
- 不过在转换之前,需要将 /CenterFusion/src/tools 路径下的【convert_nuScenes.py】文件中第 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/experiments/train.sh 脚本可以用来训练网络。
- 不过在训练之前需要修改 train.sh 中的参数。
- 我训练时报错,发现 24GB 的显存不够用,把 batch_size 改为了 16。
- 由于包里钱钱不太多只配置了一个 gpu,所以参数由 gpu 0,1 改为 gpu 0
- 在训练过程中,都会遇到如下问题,先解决后,再一次性训练成功
错误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 这个文件夹居然是空的还要自己手动去下载。
- 命令如下:
rm -rf 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 中的工具将训练过程可视化出来,并弄清楚源码,解析最后的参数含义,所以先暂停更新,最后会将实际成果(训练过程可视化、参数含义、代码执行过程等等)贴出来。
|