当前位置:   article > 正文

VisionTransformer(四)ChangeFormer—— 纯Transformer的变化检测

changeformer

Transformer的变化检测


前言

上次介绍过BIT,是一种基于Transformer孪生网络的变化检测结构,但它的设计思想是利用一个卷积网络提取特征图,将特征图像NLP那样处理成token,在token中集成了两张图片的异同特征,再进入Transformer模块进行后续提取。

所以可以认为BIT是ConvNet+Transformer的架构,而今天要介绍的ChangeFromer就是纯Transformer架构去做变化检测,并且我认为它可理解性可高。

如果对此没有了解,可以看看上篇相关文章:BIT—— 基于孪生网络的变化检测结构分析


一、ChangeFormer

ChangeFormer的论文很简短,设计思想也很简单,可以概括为大力出奇迹,硬train一个孪生网络来做变化检测了。

BIT中,是利用transformer中的编码器结构挖掘两张图片语义特征层面的相差,利用解码器去还原两张图片中异同点的感兴趣点。

但像VIT中,对于图像的处理是没有解码器部分的,所以CangeFormer也只是利用了transformer结果的编码器结果,去提取两张图片的特征。有意思的是,ChangeFormer设计了计算每层解码器输出特征图的偏差Difference Module,最后就是利用每层Difference Module计算出来的结果去经过一个MLP解码器生成差异图。所以我觉得ChangeFormer就是Transformer+FCN的架构

所以接下来,就以三个重要组成部分来分析一下ChangeFormer,分别是提取特征的Transformer Block,计算两张图片差异的Difference Module和根据差异特征生成变化图的MLP Decoder 

提取特征的Transformer Block

每个提取特征的Transformer Block又分为三部分,一部分是对特征图下采样,一部分就是经典的自注意力模块还有就是融合了位置编码的MLP模块

下采样Downsampling Block

这里设计的下采样模块,其实应该是借鉴了Swin Transformer的设计思路,就是对于每一层的特征图都进行长宽4倍的下采样,在维度层面翻倍。

除了第一个特征层是用的7x7的,步幅4,Padding为3的卷积层以外,其余层用的都是3x3,步幅为2,padding为1的卷积层进行下采样操作

                                  

提取特征Transformer Block

这里的Transformer模块,其实也和之前介绍过的大差不差,唯一的区别应该是有关多头自注意的实现。使用了类似分组卷积思想的注意力实现,来加速运算。原来的attention可以用下式表示。

                                             Attention(Q,K,V) = softmax(\frac{QK{_{}}^{T}}{\sqrt{d_{head}}})V 

而在ChangeFormer中采用的是形式是将Q,K,V 从(HW, C)reshape到 (HW/R,CR),R为设置的缩放因子来加速计算。再经过一个线性层把维度从CR降维为C,那么原来(HW, C)的QKV最后变为(HW/R,C)的维度。

原来Attention的计算量是O((HW)^{2}),如果经过上述操作后的计算量就变为O((HW)^{2}/2)。具体为什么能忽略线性层的计算量。是因为其代码实现层面,上述Reshape和线性层的操作,是通过一个卷积完成的。

我们假设R选为8,那么只需要利用一个kernel size为8,步幅为8的卷积,那么QKV就可以达到上面所说的效果啦。

具体结构这里就不画了,因为只是在多头注意力模块中计算QKV前,把输入的Patch经过上面描述的卷积即可。

融合位置编码的MLP模块

在ChangeFormer中的位置编码和VIT中的有所不同,在VIT中,位置编码是相对于一个独立的向量加到Embedding后的向量组中的。而ChangeFormer 则是通过全连接层+深度卷积+全连接层的结构去表示位置编码的。这个好处在于这个位置编码不是固定的,所以可以处理不同分辨率的位置信息。这个地方其实是借鉴了SegFormer里的操作(有空会讲)

                                                             

 所以整个编码器的组成就是由这个Block组成。

 特征图差异计算Difference Module

ChangeFormer很直观,如果要分析两张图片的区别是什么,那么我就把两张图片的每层特征图拉出来,做处理,通过集成每层之间的区别,最后根据此去生成变化图。那么我就看看如果设计这个计算差异的模块。

作者设计的计算这个差异的模块,其实就是把每层的两个特征图拼接起来,然后一起经过一系列卷积去进一步提取两个特征图之间的差异。

具体来说,即上图所示。

有一点注意的是,每一层差异模块计算出来的差异,都会再传递到下一层继续计算。

 MLP Decoder

在经过上述一系列差异模块计算出来的特征图后,我们就可以依据此差异特征图的信息,去构造变化图了。整个Decoder的设计思想就是依据FCN的思路,主要就两部分,上采样和最后的分类输出(这里分类就是指此像素属不属于变化类)

具体步骤就是将结合不同层次的差异特征图进行特征融合,然后利用转置卷积进行上采样操作,通过一系列残差块保持特征,最后经过一个分类卷积,来生成变化图。

差异特征融合 

不同层次的特征进行融合时,作者将不同层次的特价在维度上进行拼接,然后经过一个1x1的卷积进行特征融合(也是很经典的操作)

对于上采样就不多说了,就是一个转置卷积。

残差块设计

作者这里的残差块设计,我个人认为就是一个在上采样的基础上,尽可能想保留信息的操作,因为当特征图经过两层卷积后,我们将其中的值乘以0.1后再和原始特征相加。

          

然后再相加的操作之后,作者并没有接上RELU的激活层(不太理解) 

最后分类头也比较简单,就是一个3x3的卷积,维度降维2.

 至此,整个ChangeFormer的结构就捋清了。


总结

对于ChangeFormer,个人认为他的优点就是设计思路比较直观,并且利用Transformer不需要卷积网络做为bacbkone提取特征的优点。其中直接去计算每层特征图的差异,然后利用此去做FCN还原变化图,这个思路是比较直观的。

但其中有些地方的设计,我个人是有点不能理解的,有可能这就是大力出奇迹吧。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/414006
推荐阅读
相关标签
  

闽ICP备14008679号