一文搞懂ArcGIS变化检测深度学习模型

本文采用总分思路:整体架构 -> 特征提取模块 -> 时空自注意力机制 -> 损失函数 。

01

整体架构

整体架构可以通过一张图看明白:
可以看到,这是一个孪生网络,变化前后影像在经过Feature Extractor(特征提取)之后,分别形成特征图。然后变化前后影像的特征图再经过Spatial-Temporal Attention Module(时空自注意力机制模块)再次更新特征图,分别得到新的特征图Z1、Z2。最后在Metric Module部分(度量模块,PS:此处可能翻译的不是很准确)计算出两份特征图的Distance Map(距离图)。最后以此距离图与标签数据做loss计算,从而改善网络的参数,训练出最好的模型。
那此模型主要有什么特点呢?看下面:
  • 孪生网络:变化前后影像在提取特征图时的两个网络会共享权重,说人话就是一个网络结构在前向传播时用两次。

  • 基于度量的方法:文章中将深度学习的变化检测方法分为两类,基于度量与基于分类的方法。本文中使用的是基于度量的方法,说人话就是以像素作为变化检测的分析单元,度量出变化前后像素间的差距,然后以此作走位是否变化的依据。

  • 时空自注意力机制:本文设计了两种自注意力机制,一个基础时空自注意力机制(BAM)与金字塔时空自注意力机制(PAM)。此处说不了人话,本推文后面会专门有一个模块去讲本部分提到的自注意力机制。

02

特征提取模块

特征提取部分也是我们常说的backbone,此部分的作用顾名思义,就是提取特征。简单点说,就是通过一系列的卷积、池化等等,生成一系列表示影像特征的矩阵。如果没有深度学习基础的同学,可以简单的将此类比成滤波器。就像下图中的滤波一样:
上图中展示的就是经典的边缘检测滤波器,滤波前后对比发现事物边缘都比较明显了。这种操作就是特征图提取,当然,在提取特征图时候比上述的边缘检测滤波器的种类要多得多,各种你想的到的想不到的滤波器都会出现。最终提取出来一堆你想得到的想不到的图像,被称为特征图。特征图提取有助于完成整体的变化检测识别。
那在ArcGIS中的变化检测模型,支持的backbone为resnet家族,就是说,在backbone的选择上,可以使用resnet34、resnet50等等backbone作为我们的预训练模型。

03

时空自注意力模块

此部分是本模型的重点,本模型中设计了两种自注意力机制模块:基础时空自注意力机制金字塔时空自注意力机制

说到注意力机制的话,那就真的是说来话长了

,咱们长话短说。首先,注意力机制(attention机制)是为了让机器学会和人类一样有关注的重点。我们都知道算法是么的感情的,那针对于下面的图片:

有的人会说好可爱的狗狗,耳朵好可爱、鼻子好长......打住

那如果说我们现在要识别出来狗狗,已经找到了上图中间小图中红框内的眼镜鼻子以及一个耳朵,那黄框部分我们可以自然而然的推断出来是另外一只耳朵。为什么呢?因为我们注意到了另外一只耳朵、注意到了鼻子。但是狗身上的毯子(你披着毯子?我真的没有骂你),我们可能就不会注意到。那假定上图中的图片我们给定的标签是狗。那我们会设计一种算法使得图像中的像素与最终的标签(狗)形成不同的权重,耳朵那部分权重高一点,这样识别的时候识别成狗的概率就大一点。这就是长话短说的注意力机制。

那自注意力机制是啥呢?其实重点在于上面,还是使用上面耳朵鼻子的例子,我们关注到了眼睛耳朵是因为我们想让这个图片是狗,反过来去增加狗耳朵鼻子部分像素块的权重,这种像素到目标的权重设计是注意力机制。那自,说的其实是图像内像素与像素之间的注意力机制。什么意思呢?就是我们推理出来上图中黄框内的像素为耳朵是因为旁边有耳朵鼻子,不会因为狗身上披着毯子

。那耳朵那块的权重就会跟另外一个耳朵再进行一次加权,这样便实现了自注意力。

差不多就是上面那样,如果大家没有听懂,一定是我太菜了所以没解释清楚

。那我们来看一下怎么实现的吧:

那我们所说的权重就是上图中的K,Q便可以理解成是文章上面的狗狗图像,V是用来加权求和的值。K、Q、V三部分组成了注意力机制,权重K在每次训练时调整与Q的相关性。那自注意力机制,在做完注意力机制之后,再与原图进行求和形成自注意力机制

。叫做BAM(Basic spatial–temporal attention module)

那时空自注意力机制(PAM),全称是Pyramid spatial–temporal attention module,是受到了PSPNet金字塔结构的启发,通过聚合多尺度的时空注意力上下文提高识别细节的能力。结构如下:
相当于PAM的Plus版本了,将原特征图形成了四种不同的尺度分别做BAM,最终形成了PAM,看结构可以一眼明了。

04

损失函数

那一个模型中,除了结构之外,最重要的莫过于损失函数了,损失函数直接关乎模型表现好坏。

为了减少类别不均衡的影响,作者设计了一个类别敏感损失,称为batch-balanced contrastive loss (BCL)。定义如下:

D:distance map  M:label map(ground truth)。下标b, i, j (1 ≤ b ≤ B, 1 ≤ i ≤ H0, 1 ≤ j ≤ W0)分别是batch, height和width 的索引。nu, nc分别是没有变化的像素数,和变化的像素数。m是margin,我们设为2。
(0)

相关推荐