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

纯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还原变化图,这个思路是比较直观的。

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

### ChangeFormer 的环境配置方法 ChangeFormer 是一种基于 Transformer 架构的变化检测模型,其环境配置涉及安装依赖库、准备数据集以及加载配置文件等多个方面。以下是关于如何进行 ChangeFormer 环境配置的具体说明。 #### 安装必要的 Python 库 首先需要确保环境中已安装所需的 Python 版本(建议使用 Python 3.7 或更高版本)。接着通过 `pip` 命令安装项目所依赖的第三方库。通常这些库会列在一个名为 `requirements.txt` 的文件中: ```bash pip install -r requirements.txt ``` 如果未提供该文件,则可以手动安装一些常见的深度学习框架及其扩展工具包,例如 PyTorch 和 MMEngine[^1]。 #### 配置训练参数 在实际运行之前,可以通过修改配置文件来调整超参数设置。以下是一个典型的例子,展示如何读取并打印优化器封装器 (`optim_wrapper`) 的相关内容: ```python from mmengine.config import Config cfg = Config.fromfile('changeformer_mit-b0_256x256_40k_levircd.py') print(cfg.optim_wrapper) ``` 上述代码片段展示了如何利用 MMEngine 加载指定路径下的 `.py` 文件作为配置对象,并访问其中定义好的属性值。 #### 数据预处理与增强策略设定 对于变化检测任务而言,高质量的数据输入至关重要。因此,在完成基础软件搭建之后还需要关注以下几个要点: - **图像尺寸标准化**:统一所有样本至固定大小(如上例中的 256×256),便于后续计算操作; - **随机裁剪/翻转等几何变换应用**:增加模型泛化能力的同时减少过拟合风险; - **颜色空间转换或者直方图均衡化处理**:改善视觉效果从而提升特征提取效率。 以上提到的各种技巧都可以体现在具体实现过程中相应的函数调用部分当中。 #### 论文中提及的技术反思 值得注意的是,《A Change Detection Reality Check》一文提出了对当前主流方向——即从卷积神经网络进化到引入注意力机制直至完全采用Transformer架构这一趋势下所产生的各类创新方案有效性的怀疑态度[^2]。这提醒我们在追求新技术突破时也要保持理性思考,评估新增模块的实际贡献度而非单堆砌复杂结构。 ---
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lzzzzzzm

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

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

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

打赏作者

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

抵扣说明:

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

余额充值