作者:Karsten Noe 编译:ronghuaiyang
导读
通过使用预训练网络在遥感图像应用中减少对标注数据的需求。
深度学习是一个了不起的方法,用于遥感数据集,如卫星或航空照片的目标检测和分割/匹配。然而,就像深度学习的许多其应用场景一样,获得足够的带标注的训练数据可能会耗费大量的时间。在这篇文章中,我将介绍一些我们的工作,即使用预先训练好的网络来在遥感数据的目标检测任务中避免标注大型训练数据集的大量繁琐工作。
2019年9月中旬,我参加了北欧遥感会议。从许多会谈中可以明显看出,深度学习已经进入许多遥感专家的工具箱。观众们对这个话题的兴趣似乎很大,他们讨论了在各种应用中使用深度学习技术的影响和适用性。
讨论的内容之一是使用为一种数据(通常是自然图像)开发和训练的神经网络,并将其应用于其他类型(遥感)数据源中的实践。例如,来自挪威计算中心的Øivind Due Trier展示了一项工作,在一个为计算机视觉应用开发的标准的物体检测网络应用于过滤海拔地图上,为了定位挪威考古遗址。这里,来自听众的反对意见是,使用这个模型没有意义。我强烈反对这一点,尽管神经网络是为自然图像开发的,但在其他数据源上测试它也是有意义的。在这种情况下,演示者可以演示它的工作原理!在我看来,甚至尝试在数据源之间迁移学习也是有意义的 —— 为什么用在另一种数据集上训练的滤波器来初始化网络会比随机初始化更糟糕呢?开发的模型可能太大,容易过拟合,但是使用现有代码库和预训练过的模型进行快速试验的好处往往太大,因此进行试验是很有意义的。
在这篇文章的其余部分,我将展示一些我们在实验室中所做的工作,这些工作是将一个在一个领域(ImageNet自然图像)训练过的网络用于在另一个领域(航拍图像)进行基于图像的搜索。希望我能使你相信这种方法是有意义的。我并不是说ImageNet网络可以得到最好的结果,而是说在考虑可能需要的标注工作量时,使用跨域网络确实有意义。
视觉搜索以及所需的训练数据
深度学习或其他机器学习技术可用于开发识别图像中物体的鲁棒方法。对于来自飞机的航拍图像或高分辨率卫星照片,这将使不同物体类型的匹配、计数或分割成为可能。然而,使用深度学习需要大量的训练数据,除非你已有了可用的用于所需的物体类别的注册数据,而创建这样一个训练数据集是一个非常耗时的过程。
因此,在与哥本哈根市的合作中,我们朝着一种工具迈进了一步,该工具可以用于匹配所需的物体类型,而不需要预先创建训练数据。该工具基于之前的一个项目背后的技术。这个在线演示可以让你点击丹麦航拍图像数据集上的一个地方,并查看丹麦的100个看起来最相似的地方。相似度度量是基于一个训练有素的神经网络来区分不同的物体类型。例如,点击游艇码头或风力涡轮机将会产生以下结果:
基本上,该技术的工作原理是将数据集分割成一堆小片段(在本例中是4800万个片段),每个片段运行一个Resnet-34网络,该网络训练用来区分ImageNet数据集中的1000个不同物体。我们没有使用最终的分类(1000个类中的一个),而是从网络中为每个片段提取一个所谓的描述符,它由2048个数字组成。为了节省内存和减少计算负担,我们训练了一个自动编码器神经网络来压缩2048个数字到512位。在那之后,来自航拍图像数据集的4800万个图像片段可以在不到80毫秒内与一个新的片段相比较!autoencoder是针对这个特定的数据集进行训练的,这意味着它可以以自监督的方式拟合相关的特征。
在一开始,这个解决方案有一些弱点,为了使技术更健壮,我们解决了:
- 我们改进了旋转不变性,基于从网络输出提取的描述子,对图像片段旋转0, 90, 180和270度。
- 基于不同尺度的片段计算描述符。这可以找到不同大小的物体。
- 我们开发了一种“refining”搜索的交互式方法,使得匹配不只是基于单个片段,而是基于多个片段。
从2016年公开的12.5厘米分辨率的丹麦spring航拍图像数据集中,我们在哥本哈根周围的以下区域计算了3种不同比例的8,838,984个片段的描述符:
交互式匹配
交互式匹配目前还处于原型阶段,最好通过一个示例来解释:假设我们想要映射一个区域中航行的所有船只。我们首先选择一个包含一艘船的片段:
基于所存储的描述符,系统计算所选片段与所有其片段出之间的“距离”(相似性)。然后,排序完成,100个最相似的片段显示给用户:
可以看到,这些片段中有一些包含船只,但结果远远不够好。用户现在可以选择一些他满意的片段:
然后,将所选择的所有片段和数据库中所有片段的描述符进行比较,再根据它们的平均相似距离进行排序。这就产生了下面的前100名:
可以看到有显著的改善。我们可以选择再运行一次迭代搜索,通过选择更多的我们满意的片段,并再次运行排序:
船只仍在前100名之列,这是一个好迹象。请注意,我们之前标记为满意的片段不再出现在交互式细分中。
从排序到匹配
迭代方法的结果是对880万个片段进行排序,基于在交互细化过程中选择的片段的平均相似距离。理想情况下,应该有个边界,前N个片段包含船只,剩下的片段是没有的。然而,在实际中,更确切地说,是前M个片段包含船只,之后在片段M和片段N之间有一个间隔,其中一些包含船只,而不是所有都包含船只。在M之后的片段被假设不包含船,以避免误报。我们创建了一个快速而粗糙的用户界面,用户可以在其中检查已排序的片段,并为M和N建立一些有用的值。
如果排序是好的,如果M和N被合理地设置,你现在就有了干净的训练数据,包括包含船只的片段(排序M)和不包含船只的片段(排序N)。这可以用来训练一个分类网络(或者可能的目标检测网络)来识别船只。然而,在我们的例子中,我们选择测试一种更简单的启发式来匹配船:我们在排序中从M之前选择了100个随机的片段(正样本),在N之后选择了100个随机的片段(负样本)。这些片段组成了一个200个样本的比较集。对于M和N之间的每个片段,我们找到与比较集中描述符最相似的两个片段。如果这两个片段都是正样本,片段被接受为一条船,并且片段的轮廓被保存为一个多边形。对于所有正的示例样本(排序rank<M),也创建一个多边形。结果概览如下:
放大后,你可以看到像这样的东西(由于某些原因,包围框少了一条边):
匹配并不完美,但在不到一刻钟的时间内,该技术可以提供情况的概述。与此同时,你也为训练数据集创造了一个很好的起点,可以用来训练神经网络或其他机器学习方法。
匹配树木
用同样的重复的过程来匹配树木树,得到一个像这样的匹配:
放大,看起来是这样:
同样,这个匹配并不完美,但它为进一步的工作提供了一个良好的起点。
我希望这篇文章在如何使用预训练的神经网络的物体定位方面能激发一些灵感,比如从地图中提取训练数据。我很有兴趣了解更多潜在的使用案例,所以如果你曾经需要在大图片(如地图)中寻找特定的物体,请留下评论!
另外,我非常渴望听到你的想法,如何使用自监督的方法来创建一个更好的图像patch的嵌入表示。