说明:本文引用 CenterFusion: Center-based Radar and Camera Fusion for 3D Object Detection,复现此论文中的代码,互相学习。
省钱小妙招:如果租的服务器可以选择临时用或者不用 GPU,建议先不用 GPU,后面需要 GPU 的时候再打开就行了,其中构建可变性卷积库、模型训练和验证的时候才需要用 GPU
如果想了解 CenterFusion 项目中的具体网络架构,可以参考博客:CenterFusion 项目网络架构详细论述
第1步:新建虚拟环境
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 存储库
mv + 重命名前 + 重命名后
如: mv CenterFusion-master CenterFusion
CF_ROOT=/root/autodl-tmp/CenterFusion
第5步:安装环境所需要的包
cd $CF_ROOT
pip install -r requirements.txt
第6步:构建可变形卷积库
unzip -d 路径 .zip压缩包
unzip -d $CF_ROOT/src/lib/model/networks DCNv2-pytorch_1.7.zip
cd DCNv2
./make.sh
warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
废话几句,但是有用!!!!
数据集越大,那么模型训练的精度就越高,如果嫌弃训练的时间长,那么完全可以只下载 Mini 这部分,如果追求模型的精度,那么可以下载 Trainval 这个部分,Test 部分看自己吧,如果想用 Test 来做文章第五部分的验证,可以下载
由于我之前只下载了 mini 数据集,这个数据集太小了,导致模型训练精度不够,效果不理想,所以我将三个数据集全部下载下来了
Mini——3.88 GB
Trainval——200 GB
Test——31 GB
根据自己的选择下载数据集后,需要更改一点点代码,后面会提到
CenterFusion/data
路径下新建一个 【nuscenes】文件夹,然后将 tgz 压缩包解压到 nuscenes 文件夹中rm
删除压缩包tar -zxvf .tgz压缩包 -C 路径
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
CenterFusion/src/tools/convert_nuScenes.py
文件中cd $CF_ROOT/src/tools
python convert_nuScenes.py
CenterFusion/data/nuscenes/annotations_3sweeps
,该文件夹下存放着 COCO 格式的数据集CenterFusion
`-- data
`-- nuscenes
|-- annotations_3sweeps
| |-- train.json
| |-- val.json
| |-- mini_train.json
| |-- mini_val.json
| |-- test.json
|-- maps
|-- samples
|-- sweeps
|-- v1.0-mini
|-- v1.0-test
`-- v1.0-trainval
/CenterFusion/models
文件夹中即可CenterFusion/experiments/train.sh
脚本可以用来训练网络参数修改:
错误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.
/root/miniconda3/envs/env1/lib/python3.7/subprocess.py
文件,修改第 411-1=410 行,将 check=True 改为 check=False 即可错误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
错误3:
RuntimeError: cuDNN error: CUDNN_STATUS_EXECUTION_FAILED
错误4:
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'
即可cd $CF_ROOT
bash experiments/train.sh
CenterFusion/src/lib/trainer.py
文件中,就是训练产生一些损失,比如热图损失、旋转损失等等CenterFusion
`-- exp
`-- ddd
`--centerfusion
|-- debug 空文件夹
|-- logs_2022-05-12-17-53 # 训练模型后产生的文件夹
| |-- events.out.tfevents.1651908949.container-58c811af3c-223e0ddf # 标量数据,用于可视化
| |-- log.txt # 训练过程 log 记录
| |-- opt.txt # 配置 opt 文件
|-- nuscenes_eval_det_output_mini_val # 训练模型时对模型测试的结果文件夹
| |-- plots 空文件夹
| |-- metrics_details.json # 详细的指标
| |-- metrics_summary.json # 概括的指标
|-- model_20.pth # 训练第 20 epoch 保存的模型
|-- model_40.pth # 训练第 40 epoch 保存的模型
|-- model_50.pth # 训练第 50 epoch 保存的模型
|-- model_last.pth # 训练结束保存的模型
|-- opt.txt # 配置信息
|-- results_nuscenes_det_mini_val.json #训练过程测试结果
logs_2022-05-12-17-53
文件夹,这是我在 2022年5月12日17点53分 训练产生的日志文件,文件中的 events.out.tfevents.1651908949.container-58c811af3c-223e0ddf
就是标量数据,可以用来可视化tensorboard --logdir=/root/autodl-tmp/CenterFusion/exp/ddd/centerfusion/logs_2022-05-12-17-53
tensorboard --logdir=路径 --port=6007
修改参数
错误1:
错误2:
--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 $CF_ROOT
bash experiments/test.sh
[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)
[7] pointpillars----nuscene多分类篇
[8] pytorch中tensorboard的add_scalar与add_image
[9] 可视化_TensorBoard可视化
[10] debug mode in test.sh gives error (-5:Bad argument) in function ‘line’