你只看两次 - 用卷积神经网络进行卫星图像多尺度目标检测(第一部分)

原始连接:
https://medium.com/the-downlinq/you-only-look-twice-multi-scale-object-detection-in-satellite-imagery-with-convolutional-neural-38dad1cf7571

你只看两次 - 用卷积神经网络进行卫星图像多尺度目标检测(第一部分)

大面积小物体的检测是卫星影像分析的主要驱动力之一。 先前的文章( 4,5 )详细介绍了使用滑动窗口和HOG特征描述符来定位DigitalGlobe图像中船只的方法。 这些努力在开放水域和港口地区都证明是成功的,尽管这些技术在高度不一致的背景地区进行斗争。 为了解决经典对象检测技术的缺点,我们实现了基于You Only Look Once框架的对象检测流水线。 这条管道(我们称之为“你只看两次”)极大地改善了基于HOG方法的背景分辨力,并且能够快速检测出尺寸完全不同的物体和多个传感器。

1.卫星图像对象检测概述

ImageNet竞赛有助于刺激计算机视觉对象检测领域的快速发展,但ImageNet数据语料库和卫星图像之间存在一些主要差异。 四个问题产生了困难:在卫星图像中,物体通常非常小(约20像素大小),它们围绕单位圆旋转,输入图像巨大(通常为数百万像素),并且训练数据相对较少诸如SpaceNet等努力正试图改善这个问题)。 在积极的方面,物体的物理和像素尺度通常是事先知道的,并且观察角度的变化很小。 最后一个值得注意的问题是欺骗; 数百公里以外的观测有时很容易被愚弄。 实际上,2016年10月13日纽约时报的头版刊登了一个关于俄罗斯武器模型的故事(图1)。

图1. 2016年10月13日纽约时报的屏幕截图展示了旨在欺骗遥感设备的充气俄罗斯武器模型。

2. HOG船检测挑战

在之前的文章( 4,5 )中讨论的HOG +滑动窗口对象检测方法在开放水域和港口(F1〜0.9)中展示了令人印象深刻的结果。 回想一下5的第2部分,我们通过定义一个具有大于0.25的Jaccard指数 (也称为交集超过联合)的真正肯定来评估真实和错误的肯定和否定。 还记得F1分数是精度和召回的调和平均值,并且从0(所有预测是错误的)到1(完美预测)变化。

为了探索HOG + Sliding Window流水线的局​​限性,我们将它应用到背景不均匀且来自不同传感器的场景中。 回想一下,我们的分类器是使用0.5米地面采样距离(GSD)在DigitalGlobe数据上进行训练的,尽管我们的测试图像是3米GSD处的行星图像。

图2.应用于不同传感器(行星)的HOG +滑动窗口结果比训练数据语料库(DigitalGlobe)。 2015年12月的图像显示了中国南海最近创建的人造群岛之一美济礁。 在这幅图像中枚举和定位血管由于陆上线性特征导致的许多误报(红色)而变得复杂,并且F1得分相当差。 这里边界框的颜色与5中的颜色相同,即:假阴性为黄色,红色为假阳性,手标的基本真实为蓝色,真正的正面(其将与蓝色地面真值框重叠)呈绿色。 在此映像上运行HOG +滑动窗口检测管道需要125秒才能在单个CPU上运行。

3.深度学习的对象检测

我们调整“一次只能看一次”( YOLO )框架来对卫星图像执行对象检测。 该框架使用单个卷积神经网络(CNN)来预测类别和边界框。 网络在训练和测试时间看到整个图像,这大大改善了背景差异,因为网络为每个对象编码上下文信息。 它利用了GoogLeNet灵感体系结构,并以实时速度运行小型输入测试图像。 这种方法的高速度与其捕获背景信息的能力相结合,成为一个引人注目的案例,可用于卫星图像。

细心的读者可能会想知道为什么我们不能简单地将先前文章中详述的HOG +滑动窗口方法改为使用深度学习分类器而不是HOG特性。 结合滑动窗口的CNN分类器可以产生令人印象深刻的结果,但很快变得难以计算。 基于GoogLeNet的分类器评估速度比基于HOG的分类器低大约50倍; 对于基于HOG的分类器,图2的评估从〜2分钟改变为〜100分钟。 因此,单个GPU上的~60平方公里的单个DigitalGlobe图像的评估可能需要多天才能进行,而无需任何预处理(并且预滤波在复杂的场景中可能无效)。 滑动窗口切口的另一个缺点是它们只能看到图像的一小部分,因此丢弃了有用的背景信息。 YOLO框架解决背景分化问题,比CNN +滑动窗口方法更好地适应大型数据集。

图3.默认YOLO框架的插图。 输入图像被分成7x7网格,卷积神经网络分类器为每个网格方块输出边界框置信矩阵和类概率矩阵。 这些输出被过滤并且重叠检测被抑制以形成右侧的最终检测。

该框架确实有一些限制,然而,从报纸中引用了三个引用:

  1. “我们的模型在小群体中出现的小物体上挣扎,比如成群的鸟类”
  2. “它努力将对象以新的或不寻常的高宽比或配置进行概括”
  3. “我们的模型使用相对粗糙的特征来预测边界框,因为我们的架构具有来自原始图像的多个下采样层”

为了解决这些问题,我们实施了以下修改,我们将其命名为YOLT:你只看两次(名称的原因将在后面变得明显):

“我们的模型在小群体中出现的小物体上挣扎,比如成群的鸟类”

  • 通过滑动窗口取样以查找小而密集的物体
  • 在多种比例下运行一套检测器

“它努力将对象以新的或不寻常的高宽比或配置进行概括”

  • 通过重新缩放和旋转来增加训练数据

“我们的模型使用相对粗糙的特征来预测边界框,因为我们的架构具有来自原始图像的多个下采样层”

  • 定义一个新的网络体系结构,使最终的卷积层具有更密集的最终网格

YOLT框架的输出经过后处理,将我们非常大的测试图像上各种图像芯片的结果集合起来。 这些修改将速度从每秒44帧降低到每秒18帧。 对于NVIDIA GTX Titan X GPU,我们的最大图像输入尺寸为〜500像素; 我们实现的密集网格的大量参数饱和了我们硬件上可用的大于12GB的内存大于此大小的图像。 应该注意的是,如果不需要搜索紧密包装的物体,则最大图像尺寸可以增加2-4倍。

4. YOLT培训数据

训练数据是从DigitalGlobe和Planet的大型图像中收集来的。 标签由每个对象的边界框和类别标识符组成。

我们最初关注四个类别:

  • 在开阔水域的小船
  • 船在港口
  • 飞机
  • 机场
图4. YOLT培训数据。 第一行显示DigitalGlobe数据的港口(绿色)和开放水域(蓝色)的船只标签。 中间一行显示DigitalGlobe数据中的飞机(红色)。 最下面一行显示行星数据中的机场和机场(橙色)。

我们用小船标记了157幅图像,每幅图像中平均有3-6条小船。 带有飞机的64个图像芯片被标记,每个芯片平均2-4个飞机。 收集了37个机场筹码,每个筹码都有一个机场。 我们还旋转和随机缩放HSV中的图像(色相饱和度值),以增加分类器对变化的传感器,大气条件和照明条件的鲁棒性。

图5.训练图像旋转并重新调整色调和饱和度。

使用此输入语料库训练需要2-3天才能在单个NVIDIA Titan X GPU上运行。 我们最初的YOLT分级机仅针对船只和飞机进行培训; 我们将在这篇文章的第二部分中对待机场。 对于YOLT实施,我们在两个不同的尺度上对我们的大型测试图像运行滑动窗口:优化用于查找小型船只和飞机的120米窗口,以及适用于大型船只和商业客机的225米窗口。

此实现旨在最大限度地提高准确性,而不是速度。 通过仅在单个滑动窗口大小下运行,或者通过下采样图像来增加滑动窗口的大小,我们可以大大提高速度。 但是,由于我们正在寻找非常小的物体,因此这会影响我们将小型感兴趣物体(例如15米船只)与背景物体(例如15米建筑物)区分开来的能力。 还记得原始的DigitalGlobe图像大约为250万像素,并且将这种尺寸的原始图像输入到任何深度学习框架中都远远超过当前的硬件功能。 因此,无论是大幅降采样还是图像碎片都是必要的,我们采用后者。

5. YOLT对象检测结果

我们使用与第2部分5相同的标准评估测试图像,在上面的第2部分中也有详细说明。 对于海事区域评估,我们使用与( 4,5 )中相同的感兴趣区域。 在单个NVIDIA Titan X GPU上运行时,YOLT检测管道对于下面的图像需要4-15秒,而单个笔记本电脑CPU上运行的HOG + Sliding Window方法需要15-60秒。 下面的图6-10尽可能接近HOG +滑动窗口和YOLT管线之间的苹果对苹果的比较,但回想起HOG +滑动窗口经过训练以对船只的存在和航向进行分类,而YOLT则受到了训练产生船和飞机定位(不是航向角)。 所有图表使用0.25的Jaccard指数检测阈值来模拟5的结果。

图6. AOI1上的YOLT性能 大多数误报(红色)是由于小船边界框尺寸不正确(从而导致Jaccard指数低于阈值),即使位置正确。 HOG +滑动窗口方法返回更多的误报,产生较低的F1分数0.72(见图5 )。 不出所料(也令人鼓舞),在这个场景中没有发现飞机。
图7. AOI2上的YOLT性能 如上所述,不正确的检测主要是由于长度不足10米的船只的尺寸不正确。 将Jaccard指数阈值从0.25降低到0.15会减小对最小物体的损失,并且通过该阈值,YOLT管道返回0.93的F1得分,与HOG +滑动窗口方法获得的0.96得分相当(见图6 5 )。
图8. AOI3上的YOLT性能 情节右中心的大量假阳性(红色)是标记遗漏(错误)的一个例子,它会降低我们的F1分数。 回想一下,对于HOG +滑动窗口方法,F1得分为0.61(参见图7中的5 )。
图9. AOI4上的YOLT性能 F1.60的分数并不是很高,但它实际上比天真实施的HOG + Sliding Windows返回的0.57的F1要好(参见图8中的插图5 )。 结合旋转的矩形边界框将图8中的5分从0.57提高到0.86。 将标题信息纳入YOLT流水线需要付出很大的努力,但鉴于在拥挤地区使用该技术的承诺,这可能是一项有价值的工作。 尽管如此,尽管对YOLO进行了修改,但对于密集的物体可能会有性能上限; 高重叠滑动窗口方法可以将物体置于几乎任何位置,因此滑动窗口与HOG(或其他)特征相结合在此类场景中具有固有优势。

YOLT管道在开放水域中进行了很好的改造,尽管没有进一步的后处理,YOLT管道对于密集区域来说是次优的,如图9所示。 上面讨论的四个兴趣领域都拥有相对统一的背景,HOG +滑动窗口方法运行良好的舞台。 然而,正如我们在图2中所展示的那样,在高度不均匀背景的区域,HOG +滑动窗口方法努力区分船只与线性背景特征; 卷积神经网络在这样的场景中提供了保证。

图10. Mischief Reef的YOLT结果使用与图2中相同的Planet测试图像。回想只有DigitalGlobe数据用于船只和飞机的训练。 分类器错过了停靠的船只,这并不令人惊讶,因为没有任何训练图像包含停靠在岸边的小船。 总体而言,YOLT管道远远优于HOG + Sliding Window方法,误报率减少了20倍,F1分数增加了近3倍。 该图像展示了深度学习方法的优势之一,即深度学习模型向新领域的转移。 在单个GPU上对此映像运行YOLT管道需要19秒。

为了测试YOLT管道的鲁棒性,我们分析了另一个具有多个船只的行星图像(参见下面的图11)。

图11. YOLT管道应用于苏伊士运河南端入口处的行星图像。 如以前的图像一样,开放水域的船只精度非常高。 唯一的缺点是要么是非常小的船只,要么是停靠在码头上的船只(这些情况在训练数据上都很差)。 五个误报实际上都是正确定位的,尽管边界框大小不正确,因此不符合Jaccard指数阈值; 进一步的后处理可能可以弥补这种情况。

最后的测试是看看分类器在飞机上的表现如何,如下所示。

图12. YOLT检测流水线应用于希思罗机场拍摄的DigitalGlobe图像。 这是一个复杂的场景,有工业,住宅和水生背景区域。 假阳性的数量近似等于假阴性的数量,使得报告的检测的总数(103)接近真实地面物体(104)的真实数量,但显然不是所有的位置都是正确的。

六,结论

在这篇文章中,我们演示了应用于卫星图像目标检测的传统机器学习技术的局限性之一:即,在高度不均匀背景的区域中表现不佳。 为了解决这些限制,我们实施了完全卷积神经网络分类器(YOLT)来快速定位卫星图像中的船只和飞机。 该分类器的非旋转边界框输出在非常拥挤的区域中是次优的,但在稀疏场景中,分类器比HOG +滑动窗口方法在抑制背景检测方面证明要好得多,并且在各种不同的情况下产生0.7-0.85的F1分数验证图像。 我们还展示了在一个传感器(DigitalGlobe)上进行训练的能力,并将我们的模型应用于不同的传感器(Planet)。 虽然F1的得分可能不是很多读者习惯于ImageNet竞赛的水平,但我们提醒读者,卫星图像中的对象检测是一个相对新生的领域,并且具有独特的挑战,如第1节所述。我们还努力显示我们的方法的成功和失败模式。 可以用更大的训练数据集和进一步的检测后处理来提高F1分数。 我们的检测流水线精度也可能会随着更多图像芯片的提高而提高,尽管这也会降低当前处理速度为20-50平方公里每分钟的尺寸为10m - 100m的物体。

在本文的第二部分中,我们将探讨同时检测大小不同的物体(如船只,飞机和简易机场)的挑战。

2018年5月29日附录:查看 本文 获取纸张和代码的详细信息。






你可能感兴趣的:(图像识别,深度学习,卫星图像检测)