【模型结构】backbone forward

 def forward(self, x):
        size = x.size(-2) // self.reduction, x.size(-1) // self.reduction
        x = self.backbone.conv1(x)
        x = self.backbone.bn1(x)
        x = self.backbone.relu(x)
        x = self.backbone.maxpool(x)

        x = self.backbone.layer1(x)
        x = layer2 = self.backbone.layer2(x)
        x = layer3 = self.backbone.layer3(x)
        x = layer4 = self.backbone.layer4(x)

        x = torch.cat([
            F.interpolate(f, size=size, mode='bilinear', align_corners=True)
            for f in [layer2, layer3, layer4]
        ], dim=1)

        return x

(1)layer2layer3layer4 可以被视为中间变量,但它们与 x 共享相同的数据,因此它们更像是 x 在网络中的不同阶段的别名

(2)上采样 & 下采样

上采样【空间维度放大】:

  • 特征图放大:在卷积神经网络(CNN)中,为了将深层的特征图与浅层的特征图进行融合,需要将深层的特征图放大到与浅层特征图相同的尺寸。
  • 图像分辨率增强:在图像超分辨率任务中,上采样用于将低分辨率的图像放大到更高的分辨率。
  • 插值 通常 上采样

下采样【空间维度缩小】:

  • 特征图降维:在CNN中,为了减少计算量和提取更抽象的特征,通常会在网络中使用池化层进行下采样。
  • 图像分辨率降低:在某些图像处理任务中,可能需要将高分辨率的图像降低到更低的分辨率
  • 池化一般与下采样

(3)

使用 F.interpolate 函数,并且指定了 mode='bilinear',这通常用于上采样。这是因为 layer2layer3layer4 可能来自不同层级的卷积层,它们的尺寸可能不同。为了将它们沿着 dim=1 维度(通道维度)拼接起来,需要先将它们的大小调整到一致,这通常意味着将较小的特征图放大到较大的特征图的大小,因此是上采样

💡

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值