整个框架主要由四个部分组成:
-
多模态数据 (Multimodal Data):准备图像和对应的文本提示。
-
多模态编码器 (Multi-modal Encoder):用 CLIP 的图像和文本编码器提取特征,并进行融合。
-
差分特征补偿 (Differential Features Compensation, DFC):专门计算两张图的差异特征。
-
视觉-语言驱动解码器 (Vision-Language Driven Decoder):结合前面的特征,逐步解码出最终的变化检测结果。
详细数据流向解析
我们将数据流向分为几个阶段来解释:
阶段一:输入准备 (Input Preparation)
-
输入 (Input):
-
双时态遥感图像 (Bitemporal Remote Sensing Images) :两张不同时间拍摄的同一地点的图像,我们记为 Image A 和 Image B。
-
文本提示 (Text Prompts):由于现有的变化检测数据集没有文本标签,ChangeCLIP 用了一个巧妙的方法来生成。
-
利用 CLIP 模型的零样本分类能力,对图像进行预测,找出图像中最可能存在的物体类别(例如"建筑物"、"森林"等)。
-
根据预测结果构建文本提示。例如,前景描述为 "remote sensing image foreground objects, {预测类别}" ,背景描述为 "remote sensing image background objects"。
-
这样,Image A 和 Image B 就分别有了对应的文本提示,记为 Text A 和 Text B。
-
-
-
阶段总结 :输入是 (Image A, Text A) 和 (Image B, Text B) 两对图文数据。
阶段二:多模态编码 (Multimodal Encoder)
这一阶段的目的是分别提取图像和文本的特征,并将它们融合起来。为了利用 CLIP 的能力,这里使用了两个并行的编码器流,分别处理 A 时刻和 B 时刻的数据。
以 A 时刻的数据流为例(B 时刻同理):
-
图像特征提取:
-
Image A 被送入一个 图像编码器 (Image Encoder)(初始化自 CLIP 的图像端,可以是 ResNet 或 ViT)。
-
编码器会输出一个多层级的特征金字塔 {Fa1, Fa2, Fa3, Fa4},分别代表不同分辨率和语义级别的特征图。
-
其中最高级的特征图(语义最丰富)会被进一步处理:
-
通过一个注意力池化模块 (Attention Pool Module)(如果是 ResNet)或直接使用(如果是 ViT),得到 全局特征 (global_feature) 和 视觉嵌入 (visual_embedding, V') 。这两个组合起来构成了图像序列特征。
-
同时,为了弥补位置信息的丢失,还会加上位置编码 (pos_embedding)。
-
「此处,ResNet要多一步的原因是,resnet是cnn,得到的是二维空间结构而不是序列。vit是transformer得到序列,可以直接和文本融合。
」
-
-
-
文本特征提取:
-
Text A 被送入一个 文本编码器 (Text Encoder)(初始化自 CLIP 的文本端,基于 Transformer)。
-
编码器输出 文本嵌入 (text embedding, t2),它代表了文本的语义信息。
-
-
图文特征融合 (Vision-Language Feature Fusion):
-
将 图像序列特征 (包含 V') 和 文本嵌入 (t2) 一起送入一个 上下文解码器 (Context Decoder, Fcd)(基于 Transformer)。
-
在这个解码器里,图像和文本特征进行交互,文本信息被融入到图像特征中。
-
输出的融合特征 t3 既包含了图像的视觉信息,又包含了文本的语义信息。这个 t3 就是这一阶段得到的视觉-语言特征 (Vision-Language Feature) ,记为 VA (对应 Image A) 和 VB (对应 Image B)。
-
此外,还会计算一个图像像素和文本之间的 得分图 (score_map),用来增强原始高层图像特征的语义信息。
-
-
阶段输出:
-
双时态的多层级图像特征图:{Fa1...Fa4} 和 {Fb1...Fb4}。
-
双时态的视觉-语言融合特征序列:VA 和 VB。
-
阶段三:差分特征计算 (Differential Features Compensation, DFC)
这一阶段是变化检测的核心,目的是计算出 Image A 和 Image B 之间的差异。ChangeCLIP 认为传统的简单相减或拼接不够好,因此设计了 DFC 模块。
-
输入 :来自编码器阶段的特征图 Fa 和 Fb(这里指融合了视觉-语言信息后的特征)。
-
三种差异计算方式:
-
相减 (Subtraction) :计算
abs(Fa - Fb),然后通过卷积层,得到 Fsub。这种方法直观地反映了像素值的差异。 -
余弦相似度 (Cosine Similarity) :计算 Fa 和 Fb 在高维空间中的余弦距离,得到差异图 m。这种方法能捕捉特征向量方向上的语义差异。
-
拼接 (Concatenation) :直接将
Fa和Fb拼在一起,送入一个 FPN (Feature Pyramid Network) 结构,得到 X。这种方法保留了最原始的信息,让网络自己去学习差异。
-
-
加权融合:
-
将上面三种方式得到的差异特征 Fsub , X * m (用余弦差异图加权拼接特征), 和 X 再次拼接起来。
-
送入一个 通道注意力模块 (Channel Attention, CA)。这个模块会自动学习三种差异特征的重要性,给予不同的权重。
-
-
阶段输出 :融合并加权后的差分特征图 (Differential Feature Maps) ,记为 D1, D2, D3, D4,对应不同的特征层级。
阶段四:解码与输出 (Vision-Language Driven Decoder)
这一阶段的任务是将前面的差分特征逐步放大(上采样),恢复到原始图像的分辨率,并输出最终的变化检测结果。
-
输入:
-
来自 DFC 模块的多层级差分特征图 D1, D2, D3, D4(从低级到高级)。
-
来自编码器阶段的视觉-语言特征序列 VA 和 VB (统称为 text 特征)。
-
-
逐层解码:
-
解码过程从最高级的特征 D4 开始,自顶向下进行。
-
在每一层,都会使用一个 Swin Transformer Block (f) 来处理当前层的特征和上一层传下来的特征。Swin Transformer 能建立全局的注意力关系,增强特征表示。
-
关键点:引入低秩双线性注意力模块 (Low-rank Bilinear Attention Module) 。在每一层,都会用这个模块将编码器传来的 视觉-语言特征 (text) 与当前层的解码特征进行融合。这相当于在解码过程中不断补充语义信息,指导模型更好地识别变化区域。
-
融合后的特征会与下一级的差分特征(如 D3)进行拼接 (concat),然后送入下一层的 Swin Transformer Block。
-
这个过程重复进行:
F3 = f(D4, text) + D3->F2 = f(F3, text) + D2->F1 = f(F2, text) + D1。
-
-
最终输出:
-
最后一层的特征 F1 经过一个 上采样 (Upsample) 操作,恢复到与原始输入图像相同的大小。
-
输出 (Output) :一个变化检测掩膜 (Change Detection Mask)。这是一个黑白图像,白色区域表示检测到的变化区域,黑色表示未变化区域。
-
总的来说,就是image和text都经过encoder,然后特征融合,得到Va Vb;差异计算(只算图的差异)用了三种,然后三种加权,得到diff图;最后把diff图和V一起送进解码器,得到最终的mask图。
changeclip是在算diff的时候这样加权,而mmchange是在text和image特征融合的时候,各种注意力得到一个维度为bchw的权重,调控text和image的融合。