【文献阅读】YOLT算法实现遥感图像的多尺度目标识别(Adam Van Etten,2018,CVPR)

一、文章情况介绍

文章题目:《You Only Look Twice: Rapid Multi-Scale Object Detection In Satellite Imagery》

自己是做遥感图像的,对遥感图像的目标识别比较关注,大概半年前了解到这篇文章,一直没有抽时间认真解读,最近开始做这方面的工作,所以就首先来看看这篇经典的文章。

这篇文章投在了CVPR2018会议上,CVPR是计算机视觉领域的三大顶级会议之一,所以非常值得一看。

文章的下载链接:https://arxiv.org/pdf/1805.09512.pdf

项目的实现链接:https://github.com/CosmiQ/yolt

文献引用格式:Adam Van Etten. "You Only Look Twice: Rapid Multi-Scale Object Detection In Satellite Imagery." IEEE Conference on Computer Vision and Pattern Recognition(CVPR). 2018.

二、文章导读

先来放一些网上的一些解读:

[1]YOLT算法笔记

[2]yolt 卫星图像进行快速目标识别的新方法

这些解读对文章的主要内容进行了介绍,我会对其再进行细化。

在早期的深度学习目标识别算法中,主要阵营大概两类,一类是RCNN系列(two-stage,也就是对图像先进行分类后进行回归处理),另一类是SSD和YOLO系列(one-stage),而YOLT则是在YOLO v2基础上发展来的。

下面先来看一下文章的摘要部分:

Detection of small objects in large swaths of imagery is one of the primary problems in satellite imagery analytics. While object detection in ground-based imagery has benefited from research into new deep learning approaches, transitioning such technology to overhead imagery is nontrivial. Among the challenges is the sheer number of pixels and geographic extent per image: a single Digital Globe satellite image encompasses > 64 km² and over 250 million pixels. Another challenge is that objects of interest are minuscule (often only ∼ 10 pixels in extent), which complicates traditional computer vision techniques. To address these issues, we propose a pipeline (You Only Look Twice, or YOLT) that evaluates satellite images of arbitrary size at a rate of ≥ 0.5  km²/s. The proposed approach can rapidly detect objects of vastly different scales with relatively little training data over multiple sensors. We evaluate large test images at native resolution, and yield scores of F1 > 0.8 for vehicle localization. We further explore resolution and object size requirements by systematically testing the pipeline at decreasing resolution, and conclude that objects only ∼ 5 pixels insize can still be localized with high confidence. Code is available at https://github.com/CosmiQ/yolt

摘要部分作者简明的点出了目前用遥感影像做目标识别的最大的两个问题:一是数据量大,表现在一张图像的范围超过了64km²,像元数量超过了2.5亿(之前一直用Landsat,图像范围大概是185km²,图像尺寸大概8000*8000像元);二是目标往往特别小,有时候仅仅只有10个像元。

针对这两个问题,作者提出了YOLT算法。优点在于:只需要少量训练数据,就可以实现快速目标检测,检测速度大概0.5km²/s;另外对影像进行降低分辨率,实验发现也能获得较高的置信度,这也就是说模型对小目标具有较好的检测效果(因为在图像中仅仅只有几个像元)。

三、文章详细介绍

首先,作者介绍到传统深度学习算法在做遥感影像的时候会面临一些问题(前面摘要提到的),所以必须对于以下方面进行改进:

Small spatial extent In satellite imagery objects of interestare offen very small and densely clustered, rather than the large and prominent subjects typical in ImageNet data.In the satellite domain, resolution is typically defined as the ground sample distance (GSD), which describes thephysical size of one image pixel. Commercially available imagery varies from 30 cm GSD for the sharpest Digital Globe imagery, to 3-4 meter GSD for Planet imagery. This means that for small objects such as cars each object will be only ∼ 15 pixels in extent even at the highest resolution. (地面很多目标较小,在图像中仅仅表现出非常少的像元范围,例如小汽车就仅仅只有15个像元)

Complete rotation invariance Objects viewed from overhead can have any orientation (e.g. ships can have any heading between 0 and 360 degrees, whereas trees in ImageNet data are reliably vertical). (垂直投影导致目标的角度不一,例如船可以有不同方向的朝向)

Training example frequency There is a relative dearth of training data (though efforts such as SpaceNet are attempting to ameliorate this issue) (训练样本不足)

Ultra high resolution Input images are enormous (offen hundreds of megapixels), so simply downsampling to the input size required by most algorithms (a few hundredpixels) is not an option (see Figure 1). (输入图像巨大,传统方法下采样难以实现)

作者举了一个栗子:

分辨率为0.5m的图,可以看到图中的目标有多小。

首先是对第一个问题的讨论,一些经典的目标检测算法(RCNN,YOLO,SSD),它们在做降尺度的时候,比如YOLO,是将原图缩小32倍最后输出13*13尺寸的层(layer)。YOLO的原图输入的是416*416,经过多次降尺度采样(stide设置为2),达到缩小32倍的效果。试想,如果目标的像元数小于32个,那么这样处理之后,这些像元就无法被检测到,实际上很多目标的像元数量确实是小于32的,因此这里我们需要进行改进。

另外就是目标检测算法对于不同角度的目标识别泛化能力较差,作者也对这里进行了改进,改进的思路就是数据旋转和数据增广(rotations and augmentation of data)。

在Figure 3中,左边是YOLO算法的一些问题,右边则是作者提出的YOLT算法的解决方案。下面来简单介绍一下:

(1)目标的多角度问题                             ——————>      数据增广解决

(2)群组中的小目标检测问题                  ——————>      新的网络结构,引入细粒点特征和密集格网(可选)

                                                                   ——————>      上采样强化目标(可选)

                                                                   ——————>      运用多尺度集成探测子

(3)多次下采样引起粗糙特征难以识别    ——————>       解决方法同(2)

(4)最大输入尺寸约为600像素                ——————>       运用多尺度集成探测子

                                                                   ——————>       输入图像智能分割和合并

下面来看一下YOLT的模型。作者的基本思路是扩展了DarkNet的结构,并更新地理空间处理的C语言库,使其可以用于python来构建模型。

网络结构一共有22层,累计降尺度因子为16,因此输入416*416的图像,最后会输出26*26的图像。作者的灵感来自于30层的YOLO模型,为了改善小目标的保真度,作者还引入了passthrough layer(类似于ResNet网络中的身份映射identity mappings),最后卷积完则会生成52*52的特征图。另外,在每一层卷积后,都有BN(batch normalized)层和LeakyReLu层,最后一层则用的线性激活函数。

结构图中的N_{f}的计算是搜索框数(boxes)乘以(类别数+5)的积。

这里还要提到一点就是作者对尺寸非常大的遥感图像做了切割处理,切割时候需要保证相邻两幅图至少有15%的重叠面积。

当然这么做之后肯定还要做后处理的 ,因为很多图像是切割出来的,而且相邻图像会有15%的重叠区域,那么这个区域中的目标就很有可能被重复检测,为了减少这一现象,作者使用了非极大抑制算法(non-maximal suppression)。

下面是作者处理的一个示意图:

再来介绍下作者所使用的数据集。

(1)训练数据部分

所有的数据源为三部分:DigitalGlobe satellites, Planet satellites, and aerial platforms. 对这三部分来源的图像做切割,保证切割的图像大小为416*416,相邻图像大约有15%的重叠区域。接下来为图像中的每一个类别做标记,一共选择了5种类别:airplanes, boats, building footprints, cars, and airports.(飞机,船,建筑物,汽车,机场) :

训练数据介绍
类别来源描述
汽车Cars Overhead with Context(aerial platforms)分辨率0.15米和0.3米,总计13303个汽车
建筑物SpaceNet data(DigitalGlobe imagery)四座城市(拉斯维加斯, 巴黎, 上海,  Khartoum)共计221336标记建筑物
飞机eight DigitalGlobe images230个飞机
three DigitalGlobe images近海岸的556艘船
机场37 Planet images每张图只有一个机场,超过1000像素长度的进行降采样

作者的一些超参数设置为:初始学习率为0.001,权重衰减为0.0005,动量0.9,使用单GPU(NVIDIA TITAN X)训练2-3天。

(2)测试数据部分

测试数据的介绍如下:

汽车:犹他州(Utah)的19807个汽车

建筑物:训练数据集的75%用作训练,剩下的25%用作测试,有73778个建筑

飞机:四个机场中的74架

船:四张影响共447个船

飞机场:10个飞机场

最后来看下模型结果:

首先作者指出一个问题,如果只采用单分类器来区分5个类别的话,由于机场的训练数据非常有限,那么高速公路和机场的跑道非常容易混淆,造成识别精度很差:

为了解决这个问题,作者提出了Scale Confusion Mitigation(不知道翻译为啥比较好,尺度混淆减弱算法???),这里作者大胆的采用了两个分类器,一个专门用来做车辆,船,飞机,建筑,另一个只用来找机场。在找机场的那个分类器中,一方面可以采用下采样的方式来提高运行效率,另一方面通过后处理来删掉不对的目标。

下来看一下这两个分类器的表现如何。作者将这两个分类器分别用在了不同尺度的影像上,一个是分辨率为200m的,另一个是分辨率为2500m的,第一种尺度用于寻找小目标,比如车辆,船,飞机等,第二种尺度用来寻找大目标,比如飞机场。将验证图像进过裁剪得到chips,然后在chips上运行这两个分类器。最后再将多个chips和两个分类器的结果叠加在一张图上,重叠区域用非极大值抑制的方式处理。最终预测结果的阈值取0.3或者0.4的时候可以获得最高的F1得分(就是说预测结果是一个概率,如果这个概率大于0.3或者0.4,那么就用box把它画出来,这个阈值取0.3或者0.4的时候效果最好)。

效果总结:

文章到这里核心部分内容就结束了,后面是一些讨论。

(1)不同场景对目标识别的影响

测试集中大约有20000多汽车包含在9张Utah地区的影像中,而这其中的大部分车辆(大约13000辆)都在盐湖城(盐湖城是犹他州的一座城市),对图像进行切割后,去掉车辆很少的影像,最后只有23景,平均每景影像中有1130±540辆汽车。识别的效果如下:

另外,作者还统计了每一景影像关于汽车检测的F1得分,结果如下:

并且统计最终的汽车识别正确率高达99.1%。还有一个有趣的现象,看Figure 9上面的表格,几乎所有影像的F1得分都很高,但是唯有第二张图的F1得分比较低,只有0.67,检查后发现,这景影像拍摄的是一个废弃的摩托车厂,而其他影像都是城市影像。

(2)不同分辨率对目标识别的影响

原本实验的图像分辨率是0.15米,作者用高斯核函数,将图像的分辨率降低,分别降低到[0.30, 0.45, 0.60, 0.75, 0.90, 1.05, 1.20,1.50, 1.80, 2.10, 2.40, 3.00] 米。

这里作者是先这么做的,只用0.15米的影像训练一个模型,再分别识别不同分辨率的影像,但是发现效果都比较差;后面作者又针对每种分辨率分别训练模型,一共训练13个模型,但是这么做的问题就是不同分辨率影像中的标签比较难做,做好像下面这样的标签后就可以做模型:

模型的结果也比较有意思:

汽车的大小约为3米,在0.15米分辨率的图上约为20像素,F1得分为0.92,在3米分辨率的图上约为1像素,F1得分为0.27,也就是说错误率一下变得非常明显,但是有意思的是,如果分辨率只从0.15米变到0.6米,F1得分仅仅只有5%的波动,因此可以得到一个结论,大于5个像素的目标,F1的得分基本都能大于0.87,这也一定程度上说明模型可以用于多尺度的影像中:

另外虽然单模型难以识别不同分辨率影像中的目标,但是它却比多模型的训练效果更优。

四、后记

这篇模型算是比较经典的一个,有空的话想实现下这个模型。
 

 

  • 4
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

全部梭哈迟早暴富

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值