基于密度图的航空物体检测:理论与代码实现

本文来谈一下基于深度学习的航空物体场景下的物体检测。航空物体这类场景一般由无人机空拍来收集数据,然后进行后处理来满足特定的任务场景,有些情况下要求实现实时反馈,甚至多任务。

这里讨论的航空物体检测是其中的一个分支,这类论题最近两年渐渐火起来。具体来说,从2017年开始,属于这类任务相关,且有较大影响的论文在CVPR,ICCV,ECCV等国际计算机视觉顶级期刊中出镜率越来越高,涉及相关题目的竞赛也越来越多。

和通用物体检测一样,航空物体检测也经历了从无到有的过程。乍一看,这两类任务都属于物体检测(object detection)的范畴,而当前通用物体检测器已经非常的多,不论是双阶段的fast rcnn系列还是单阶段的yolo系列,貌似方法是可以拿来直接套用的。然而,航空物体检测由于其特殊性,附带有下列挑战:

  1. 数据收集的过程由无人机拍摄执行。由于是高空拍摄,收集到的物体相比较于一般物体尺度更小,整体分布稀疏。相机随着焦距变换,导致数据会有一定程度的扭曲效应,具体表现为前后图片尺度不一

  2. 收集的数据受光照,地理位置及地形,气候等自然因素影响,像素分布复杂,导致数据集物体检测难度显著上升

  3. 受到拍摄角度的影响,密集物体场景下物体会有遮挡或堵塞的情况,这些物体的真值不全,不利于模型训练

  4. 自然场景下无法保证每一类物体均衡出现于数据集中,因而数据集类分布不均衡

为了读者更好地理解上述挑战,下面的一组图对比了自然物体与航空物体的应用场景。

自然物体(左图) 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)分为三个大的部分

  1. 密度图估计

  2. 基于密度图分割输入航空图像并生成前景

  3. 使用生成的前景进行物体检测

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

备注:航拍

遥感与航空影响处理识别交流群

遥感、航空、航拍图像处理、分类、识别、检测、分割等技术,

若已为CV君其他账号好友请直接私信。

我爱计算机视觉

微信号:aicvml

QQ群:805388940

微博知乎:@我爱计算机视觉

投稿:amos@52cv.net

网站:www.52cv.net

在看,让更多人看到  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
课程目的:OpenCV是应用非常广泛的开源视觉处理库,在像处理、计算机视觉和自动驾驶中有着非常重要的作用。课程设计特色:(课程当前为第一期)1、C++与Python双语教学Python语言是在计算机视觉中应用最多的一种语言,在工作中,深度学习模型的训练基本上都是使用Python语言编写的训练代码。OpenCV在这个过程中用于像的预处理(例如像读取、数据增强)和后处理,还可以用于显示处理的结果,功能强大,使用方便。但是在功能的部署的时候,不管是部署在服务端还是PC端,开发语言基本上用的是C++,所以如何有效的使用OpenCV进行模型或者功能的部署尤为重要。C++语言应用的好坏,在面试中可以看出一个面试者的工程实践能力的强弱,两种语言的开发掌握好了可以使工作如虎添翼。2、全模块讲解我出版了一本书《学习OpenCV4:基于Python的算法实战》,虽然这本书是写的基于Python的算法实战,但是实际上这本书有详细的介绍算法的C++接口,还有一些C++方向的案例,是以Python为主。书出版的时候就想双语写作,只是限于篇幅没有成行。本课程不仅采用双语教学,更是对C++的每个模块都做讲解,我们知道,很多的书其实只讲imgproc,如果你翻开一本书像的形态学运算和像滤波都是作为独立章节讲解的,那么这本书基本上就可以确定是只是讲解了imgproc模块,但是其他的模块在工作中也有很重要的作用。例如:core模块定义了C++的基本数据结构和基本运算(如四则运算);highgui模块是可视化与交互的模块;feature2d是特征点与特征匹配相关算法所在的模块;ml是机器学习相关的模块;dnn是深度学习相关的模块,可以使用OpenCV进行深度学习模型的部署。这些是很多的书和课程都不会讲的。3、讲解细致本课程会从环境搭建开始讲解,环境搭建尤为重要。从我多年的授课经验总结来看,如果只是给了代码,很多的入门用户环境问题处理不好的话,后面的学习很难进行下去,甚至会丧失学习的信心。4、会讲解C++和Python的开发语法问题是入门用户的一大难关,特别是C++语言。大学只是教授了C语言相关的内容,C++很多同学只懂一点皮毛,所以写代码步履维艰,我们在讲解代码的过程中会顺带讲解C++和Python的内容。我们还会讲解编译相关知识,还有库的装载与链接,这些是学校里不会教的,目前也几乎没有课程讲解。5、讲师经验丰富我讲解过C++和OpenCV的多个课程,广受学员好评。我出版过两本书《深度学习计算机视觉实战》和《学习OpenCV4》,两本书都是细致入微的讲解,主要针对的就是初学者,所以能够很好的处理课程的难易程度。6、讲义准备充分讲义准备的充分细致,标识清楚明确,重点和疑难点突出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值