| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> VisionTransformer(四)ChangeFormer—— 纯Transformer的变化检测 -> 正文阅读 |
|
[人工智能]VisionTransformer(四)ChangeFormer—— 纯Transformer的变化检测 |
纯Transformer的变化检测前言上次介绍过BIT,是一种基于Transformer孪生网络的变化检测结构,但它的设计思想是利用一个卷积网络提取特征图,将特征图像NLP那样处理成token,在token中集成了两张图片的异同特征,再进入Transformer模块进行后续提取。 所以可以认为BIT是ConvNet+Transformer的架构,而今天要介绍的ChangeFromer就是纯Transformer架构去做变化检测,并且我认为它可理解性可高。 如果对此没有了解,可以看看上篇相关文章:BIT—— 基于孪生网络的变化检测结构分析 一、ChangeFormerChangeFormer的论文很简短,设计思想也很简单,可以概括为大力出奇迹,硬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可以用下式表示。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? 而在ChangeFormer中采用的是形式是将Q,K,V 从reshape到 ,R为设置的缩放因子来加速计算。再经过一个线性层把维度从CR降维为C,那么原来的QKV最后变为的维度。 原来Attention的计算量是,如果经过上述操作后的计算量就变为。具体为什么能忽略线性层的计算量。是因为其代码实现层面,上述Reshape和线性层的操作,是通过一个卷积完成的。 我们假设R选为8,那么只需要利用一个kernel size为8,步幅为8的卷积,那么QKV就可以达到上面所说的效果啦。 具体结构这里就不画了,因为只是在多头注意力模块中计算QKV前,把输入的Patch经过上面描述的卷积即可。 融合位置编码的MLP模块在ChangeFormer中的位置编码和VIT中的有所不同,在VIT中,位置编码是相对于一个独立的向量加到Embedding后的向量组中的。而ChangeFormer?则是通过全连接层+深度卷积+全连接层的结构去表示位置编码的。这个好处在于这个位置编码不是固定的,所以可以处理不同分辨率的位置信息(这一点,个人是存疑的) ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?所以整个编码器的组成就是由这个Block组成。 ?特征图差异计算Difference ModuleChangeFormer很直观,如果要分析两张图片的区别是什么,那么我就把两张图片的每层特征图拉出来,做处理,通过集成每层之间的区别,最后根据此去生成变化图。那么我就看看如果设计这个计算差异的模块。 作者设计的计算这个差异的模块,其实就是把每层的两个特征图拼接起来,然后一起经过一系列卷积去进一步提取两个特征图之间的差异。 具体来说,即上图所示。 有一点注意的是,每一层差异模块计算出来的差异,都会再传递到下一层继续计算。 ?MLP Decoder在经过上述一系列差异模块计算出来的特征图后,我们就可以依据此差异特征图的信息,去构造变化图了。整个Decoder的设计思想就是依据FCN的思路,主要就两部分,上采样和最后的分类输出(这里分类就是指此像素属不属于变化类) 具体步骤就是将结合不同层次的差异特征图进行特征融合,然后利用转置卷积进行上采样操作,通过一系列残差块保持特征,最后经过一个分类卷积,来生成变化图。 差异特征融合?不同层次的特征进行融合时,作者将不同层次的特价在维度上进行拼接,然后经过一个1x1的卷积进行特征融合(也是很经典的操作) 对于上采样就不多说了,就是一个转置卷积。 残差块设计作者这里的残差块设计,我个人认为就是一个在上采样的基础上,尽可能想保留信息的操作,因为当特征图经过两层卷积后,我们将其中的值乘以0.1后再和原始特征相加。 ? ? ? ? ?? 然后再相加的操作之后,作者并没有接上RELU的激活层(不太理解)? 最后分类头也比较简单,就是一个3x3的卷积,维度降维2. ?至此,整个ChangeFormer的结构就捋清了。 总结对于ChangeFormer,个人认为他的优点就是设计思路比较直观,并且利用Transformer不需要卷积网络做为bacbkone提取特征的优点。其中直接去计算每层特征图的差异,然后利用此去做FCN还原变化图,这个思路是比较直观的。 但其中有些地方的设计,我个人是有点不能理解的,有可能这就是大力出奇迹吧。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 7:19:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |