《CenterFusion: Center based Radar and Camera Fusion for 3D Object Detection》
【论文地址】https://arxiv.org/abs/2011.04841
一、论文概述
二、网络结构
CenterFusion 网络架构
算法流程:
首先使用CenterNet算法进利用摄像头数据预测目标的中心点,并回归得到目标的3D坐标、深度、旋转等信息
然后作者将雷达检测到的目标数据和上面检测到的目标中心点进行关联,作者了视锥的方法
将关联后的目标的特征和雷达数据检测到的深度和速度信息组成的特征图并联,在进行3D目标深度、旋转、速度和属性的回归。
三、论文中的实验结果
四、代码复现
【官方代码】https://github.com/mrnabati/CenterFusion
根据官方提供的步骤就能实现复现,没有出现太大的问题 ,按照流程来就行了。
1、环境搭建
Ubuntu 18.04 + CUDA10.0 + pytorch 1.4.0
根据官方提供的步骤安装依赖库:
【注意】可变性卷积库DCNv2需要单独构建
cd $CF_ROOT/src/lib/model/networks
git clone https://github.com/CharlesShang/DCNv2/
cd CenterFusion/src/lib/model/networks/DCNv2
./make.sh
如果出现权限不够的问题,只要给他一个权限就行,然后再运行:
chmod u+x src/lib/model/networks/DCNv2/make.sh
./make.sh
2、数据集准备并格式转换
从nuScenes网站下载nuScenes数据集。需要注册登录。下载地址
我下载的是mini的数据集,解压之后是maps、samples、sweeps、v1.0-mini四个文件夹。也可以下载其他的数据集。
按照官方的格式制作data文件夹:
然后运行官方代码,将nuscenes转化成COCO格式。
由于我下载的只有nuscenes-mini数据集,所以需要修改代码convert_nuscenes.py第27行如下图所示,只留下mini相关的数据集就行。
最终data/nuscenes文件夹结构如下:
3、模型训练
- 【下载与训练模型】
根据官方给的链接下载与训练模型:
下载好之后放入models文件夹下。 - 【修改 train.sh 参数配置】
开始训练之前,需要修改experiments文件夹下的train.sh文件,train.sh文件如下:
ddd:表示训练完成之后会生成exp文件夹,exp文件夹下会生成ddd文件夹,存放训练的模型结果和log信息。
train_split:表示训练集,由于我下载的是mini数据集,所以改成mini_train
val_split:表示验证集
lr:学习率
num_epochs:训练轮数
save_point:训练多少轮保存一次模型
gpus:使用哪块gpu,和CUDA_VISIBLE_DEVICES保持一致
radar_sweeps:因为我的nuscenes文件夹下有一个annotations_6sweeps文件夹,所以我把它改成了和他一样,把3改为6,不然会报错
load_model:预训练模型的路径
- 【开始训练】
然后运行如下命令开始训练:
bash experiments/train.sh
- 【可能会出现的问题】
subprocess.CalledProcessError: Command ‘[‘git’, ‘describe’, ‘–always’]’ returned non-zero exit status 128.
为什么会出现这个问题我也不知道,也没解决,后来看了下代码,出错的地方在logger.py这个文件中,相关代码如下:
发现这一块主要是把一些信息写入到log里,我觉得可有可无,所以就把这一行注释掉了,然后就没有错误了。
- 【训练完成】
训练好之后,会在根目录下生成exp/ddd/centerfusion文件夹,保存训练好的模型以及打印的一些log信息:
4、测试训练
先修改test.sh的参数,主要参数参考train.sh。
主要修改radar_sweeps参数(把3改为6)和load_model参数(测试的模型的路径)就行了
在根目录下运行如下命令开始测试:
bash experiments/test.sh
测试的结果如下:
五、测试自己的数据集
还没采集制作自己的数据集,之后补充。