基于密度图的航空物体检测:理论与代码实现
作者 | lcl
编辑 | CV君
报道 | 我爱计算机视觉(微信id:aicvml)
本文来谈一下基于深度学习的航空物体场景下的物体检测。航空物体这类场景一般由无人机空拍来收集数据,然后进行后处理来满足特定的任务场景,有些情况下要求实现实时反馈,甚至多任务。
这里讨论的航空物体检测是其中的一个分支,这类论题最近两年渐渐火起来。具体来说,从2017年开始,属于这类任务相关,且有较大影响的论文在CVPR,ICCV,ECCV等国际计算机视觉顶级期刊中出镜率越来越高,涉及相关题目的竞赛也越来越多。
和通用物体检测一样,航空物体检测也经历了从无到有的过程。乍一看,这两类任务都属于物体检测(object detection)的范畴,而当前通用物体检测器已经非常的多,不论是双阶段的fast rcnn系列还是单阶段的yolo系列,貌似方法是可以拿来直接套用的。然而,航空物体检测由于其特殊性,附带有下列挑战:
数据收集的过程由无人机拍摄执行。由于是高空拍摄,收集到的物体相比较于一般物体尺度更小,整体分布稀疏。相机随着焦距变换,导致数据会有一定程度的扭曲效应,具体表现为前后图片尺度不一
收集的数据受光照,地理位置及地形,气候等自然因素影响,像素分布复杂,导致数据集物体检测难度显著上升
受到拍摄角度的影响,密集物体场景下物体会有遮挡或堵塞的情况,这些物体的真值不全,不利于模型训练
自然场景下无法保证每一类物体均衡出现于数据集中,因而数据集类分布不均衡
为了读者更好地理解上述挑战,下面的一组图对比了自然物体与航空物体的应用场景。
自然物体(左图) VS 航空物体(右图)
这些问题叠加在一起对航空场景下的物体检测提出了较高的要求。为了能很好的解决这个问题,最近几年的主会和workshop都提出了解决方案。
主会中比如2019年ICCV的ClusDet “Clustered Object Detection in Aerial Images”提出使用聚类方式做图像切分,尽可能地通过聚类合并前景像素来生成高质量的切块,以避免检测器浪费过多时间在背景上。同时为了矫正生成的切块的尺度,追加了scalenet来平衡。
再比如强调用检测器来发现检测弱点,进一步学习并重新检测,希望基于困难区域检测(DREN)的网络“How to fully exploit the abilities of aerial image detectors”这些方案都是非常有启发性的,也取得了较好的精度。
然而这些方案的精度还是不够令人满意。此外除了检测网络,额外追加了两个子网络来帮助提升精度, 导致整体速度被拉慢。
为了提出更进一步的解决方案,这里笔者介绍一篇来自CVPR2020 workshop的论文"Density map guided object detection in aerial images",该论文使用密度图的方法来解决航空物体检测的问题。
相比较于上述方案,使用了更少的子网络,取得了更进一步的精度和更快的检测速度。论文代码已开源。下面一张图简单展示了基于密度图的方法是如何切分出前景的。
密度图方法切分出前景(foreground)
相比于之前的方法,使用密度图去做航空图像检测可以更快的检测航空图像中的物体。密度图的方法来源于一个相近领域的应用,也就是人流计数(crowd counting)。人流计数中物体高度密集,分布集中,单个物体的尺度小,和航空物体数据集在这方面高度相似。
在人流计数中一个主流的应用是使用密度图。密度图也可以视为热力图,可以和很好的反应物体在单个图片中的分布,而背景对密度图没有贡献,所以这种方法其实可以很好的区分前景和背景。这也是这篇论文想到把密度图引入航空物体检测的一个原因。
基于密度图的航空物体检测(以下简称DMNet)分为三个大的部分
密度图估计
基于密度图分割输入航空图像并生成前景
使用生成的前景进行物体检测
DMNet的网络框架
以下是对三个部分的详细介绍
密度图估计
密度图(density map)估计和人流计数中的密度图估计相近。给定输入航空图像,我们希望估测并针对每一类物体的尺度,指导深度学习模型学习其对应的密度,以便在测试数据上生成
相对应的密度图。常见的人流技术框架(比如MCNN, CSRNet)使用高斯核卷积来生成密度图,根据原理不同,有进一步分成动态核和静态核两种。由于人流计数中使用动态核需要满足一定的假设,而航空图像中不满足(比如假设物体尺寸和其相邻物体间距离成比例), DMNet使用的是静态核(fix kernel)来生成密度图。静态核的sigma值取全部训练数据集的平均值。
然而,使用静态核方法并没有完全考虑到各个类之间物体的差异性。比如某些物体(公交车, 汽车)的尺度比较大,而某些较小(比如行人)。使用同一个sigma无法贴切的刻画这种差异性。
所以DMNet进一步提出基于类别的静态核方法。使用这种方法可以更加细致的区分同一类的前景和背景。下图可以看到这种方法的优势。
基于类别的静态核方法
在DMNet中,作者使用MCNN来生成密度图。MCNN是非常经典的人流计数框架,使用了三种不同尺度的卷积来尽可能捕捉特征。使用已有框架直接生成密度图,虽然很直观,但是仍旧有一个问题要讨论。
MCNN中有两层池化层,所以直接使用MCNN会导致生成的特征图缩水。一种解决方案是直接把特征图插值回原尺度,另外则是加两层升采样层处理。
针对这个问题, 作者做了实验,实验结果发现,以MAE为评价指标,两种解决方案表现差的不大,考虑到升采样会吃更多gpu内存,最后DMNet采用了第一种方案。
基于密度图分割输入航空图像并生成前景
在生成了对应的密度图后,我们需要使用他们来生成前景。由于密度图本身可以通过密度值的高低来间接表示某一像素上有物体的概率,我们人为定了一个阈值。我们希望通过调节这个阈值来尽可能的过滤背景像素,并保持现有像素的完整性。
具体的做法是,设置一个滑动窗口对密度图进行滑动,每次滑动不重叠。滑动的时候会对当前区域下的像素加和,如果加和大于阈值,我们保留这个区域,也就是存下这个窗口对应的坐标值。否则我们直接丢弃(也就是将其视为背景)。我们反复多次加和,直到滑动窗口覆盖所有特征图。
下面是上述过程的一个例子。
使用滑动窗口生成density mask
在我们完成一次滑动后,我们会得到多个离散的小区域。为了将这些区域全部连起来,我们使用八连通域算法来进行连接。如果最终生成的区域不规则,我们取这些区域的最左上右下位置,整个连起来。
物体检测
在生成密度切块(density crop)后,我们把这些图放到物体检测模型中进行训练。训练时原图也参与其中,因为进行切块可能会伤到大物体,所以将原图加入来确保大物体的精度。DMNet使用了faster-rcnn rpn来训练物体检测。需要指出的是,任何物体检测方法都可以用在这一步,并不仅限于faster rcnn检测器。
在评估(evaluation)阶段,原图和切好的密度图会被分别送入我们之前训练的检测器中进行评估。最终的结果会被统一合并在原图对应的结果文件上。DMNet使用NMS算法对检测结果进行后处理。
DMNet 模型表现
DMnet和论文发表时的sota模型间的对比如下图。作者将自己的算法和两个非常常见的航空图像数据集进行对比,使用的数据集分别是Visiondrone数据集和UAVDT数据集。
DMNet在Visiondrone 2018评估(evaluation)集上的表现
DMNet在UAVDT数据集上的表现
综合来看,DMNet能进一步提升大概1-1.5AP,取决于backbone的选择。尤其在小物体检测上面,DMnet表现不凡,在Visiondrone数据集上提升了近4AP。
模型研究 (Ablation study)
作者针对于模型如何效果好,进行了多个方面的分析。
1.生成密度图时阈值的选择
阈值选择在生成密度图时有很大的影响。阈值过低,基本无法过滤背景像素;而阈值过高,基本不会生成密度切块,或者切块过小反而干扰学习过程。作者对此做了实验。
阈值选择对生成密度图的影响
从实验结果来看,施加非常小的阈值,模型表现很差,近乎于直接使用原图检测。所以通过不同的手段(比如交叉验证或可视化)选择合理的阈值是很重要的。
2.使用密度图切分和均匀切分相比是否有优势
作者对比了密度图切分和更加细致的4*3均匀切分(“密度图方法切分出前景”一图中包含了这种方法)方法。从实验结果来看,密度图更胜一筹。原因是因为密度图是根据密度来判断切分边界,使用了更加可靠的情景信息。
3.使用密度图切分的贡献
使用密度图切分提升了小物体和中型物体的检测精度,进而整体拉高了全体的检测进度,这也是DMNet表现出色的一个原因。
结果展示
总结
这篇文章简单总结了DMNet(Density map guided object detection in aerial images)的原理和工作方法,希望能对各位看官有帮助。DMNet的相关代码已开源,对这篇文章有任何的疑问和指教,欢迎发邮件到lcltopismine3@gmail.com讨论或者在github上提issues。
论文:https://arxiv.org/abs/2004.05520
代码:https://github.com/Cli98/DMNet
END