《A Deep Learning-based Radar and Camera Sensor Fusion Architecture for Object Detection》
【论文地址】https://arxiv.org/abs/2005.07431
论文通过在网络层中融合相机数据和雷达稀疏点云投影后的数据,来增强2D目标检测的效果,并提出了一种训练策略BlackIn,将网络训练的重点放在学习雷达数据上。
论文中采用的是Continental ARS430毫米波雷达,雷达输出的是2D稀疏点云。
示例场景中网络输入数据的格式:
在训练和评估中,论文中对原始数据进行滤波,使得经过过滤的真实数据只包含至少一个雷达检测的目标,滤波后的数据如下:
有一部分目标会被过滤掉,作者在论文中分析了几点原因:论文中不补偿其他目标的运动,雷达和相机的空间标定会存在偏差、雷达和相机的时间对齐等。
预训练模型采用的是在图像上训练的模型。
数据集:nuScenes、TUM(论文中制作的数据集)
baseline:RetinaNet
论文中的实验对比图,对比了baseline和论文中的方法,以及论文中提出的BlackIn策略、几种毫米波雷达数据滤波方法。
【备注】这几种过滤方式没太看懂,论文中也没有详细解释,也没查到相关资料。该部分论文原文:
【官方代码】https://github.com/TUMFTM/CameraRadarFusionNet
1、数据集准备
从nuScenes网站下载nuScenes数据集。需要注册登录。下载地址
我下载的是mini的数据集,解压之后是maps、samples、sweeps、v1.0-mini四个文件夹。也可以下载其他的数据集。
如有需要可以下载其他更大的数据集。
2、环境搭建
Ubuntu 18.04 + CUDA 10.0 + Python 3.5
运行以下代码安装依赖库:
pip install -e .
python setup.py build_ext --inplace
【出现的问题】
(1)提示没有安装pyximport模块
解决方法:
pip install Cython
如果安装好之后还出现以下错误:
ImportError: Building module crfnet.utils.compute_overlap failed: [“distutils.errors.CompileError: command ‘gcc’ failed with exit status 1\n”]
或者是:ModuleNotFoundError:No module named ‘crfnet.utils.compute_overlap’
这两个错误都是python中导入pyx文件出错的问题,解决方法都一样的。
打开出错的文件:/crfnet/utils/anchor_calc.py
在from ..utils.compute_overlap import compute_overlap
之前添加:
import pyximport
pyximport.install()
python setup.py build_ext --inplace
即可解决在python中导入pyx文件的问题。
(2)System error:unknown opcode
解决方法:
出现这个错误的原因是当时使用了Python3.7,项目中作者要求使用Python3.5,换成Python3.5就OK了。
3、开始训练
修改configs/default.cfg文件,重命名为crf_net.cfg,每个参数的解释在官方提供的README.md文件中可以找到。根据需求修改模型的保存路径、加载模型的路径、数据集路径、数据的一些配置、gpu使用率、gpu数量等设置。
下载预训练模型:crf-net.h5
准备就绪之后,运行如下代码,开始训练:
python train_crfnet.py --config configs/crf_net.cfg
训练完成之后在根目录下生成saved_models文件夹,里面保存了训练好的模型以及log信息。
4、模型评估
运行如下命令进行模型评估:
python evaluate_crfnet.py --model saved_models/crf_net.h5 --config configs/crf_net.cfg --st 0.5
–config :配置文件路径
–model :待评估的权重文件
–st :阈值
–render:在执行过程中显示图像
–eval_from_detection_pickle :从硬盘驱动器加载保存的检测文件
【出现的问题】
(1)subprocess.CalledProcessError: Command ‘[‘git’, ‘rev-parse’, ‘HEAD’]’ returned non-zero exit status 128.
解决方法:
找到出错的这个文件:/crfnet/utils/configs.py第58行,这两行应该是配置git,我给注释掉了,这个错误就没有了。(至于错误的原因查了一些资料,没太深入去看 ,暂不清楚。)
(2)_tkinter.TclError: couldn’t connect to display “localhost:12.0”
应该是因为在服务器上训练的,没有GUI,使用matplot等交互功能时候会报错。
解决方法:
报错的是在evaluate_crfnet.py文件中,打开evaluate_crfnet.py文件,添加以下代码,如下图所示:
matplotlib.use('Agg')
解决了这个问题之后,运行evaluate_crfnet.py文件就会生成和cfg名字一样的文件夹,里面保存了结果图。结果图如下图所示:
5、测试模型
运行如下命令测试模型:
python test_crfnet.py --model saved_models / crf_net.h5 --config configs / crf_net.cfg --st 0.5
通过这个命令测试的是nuscenes数据集中验证集部分,测试的结果保存在save_val_img_path文件夹下,测试的效果图如下图所示:
由于没有自己的数据集,暂未用自己的数据集测试。