Changer解码头详解
ChangerEx中的 Changer 解码头(定义在 [changer.py](file://opencd\models\decode_heads\changer.py))是基于双时相输入的,用于遥感变化检测任务。下面我将详细解释:
🎯 一、解码头输入数据来源
输入结构:
- 输入类型:来自 Backbone 的多尺度特征图(通常为 ResNet 的输出)
- 输入形式:一个列表,包含多个层级的特征图(例如
[feat1, feat2, feat3, feat4]) - 每个特征图形状:
(B, C, H, W),其中:B: batch sizeC: 通道数H,W: 高度和宽度
特别处理(双时相):
inputs = self._transform_inputs(inputs)
inputs1 = []
inputs2 = []
for input in inputs:
f1, f2 = torch.chunk(input, 2, dim=1)
inputs1.append(f1)
inputs2.append(f2)
✅ 解释:
- 每个输入特征图在通道维度上被拆分为两个部分(
dim=1),分别代表两个时相的特征。 inputs1: 第一时相的特征列表inputs2: 第二时相的特征列表
🧱 二、解码头内部处理流程
1. base_forward() —— 特征变换与融合
out1 = self.base_forward(inputs1)
out2 = self.base_forward(inputs2)
base_forward() 内容如下:
def base_forward(self, inputs):
outs = []
for idx in range(len(inputs)):
x = inputs[idx]
conv = self.convs[idx]
outs.append(
resize(
input=conv(x),
size=inputs[0].shape[2:],
mode=self.interpolate_mode,
align_corners=self.align_corners))
out = self.fusion_conv(torch.cat(outs, dim=1))
ret

最低0.47元/天 解锁文章
722

被折叠的 条评论
为什么被折叠?



