FPN输出的特征图为什么比ResNet输出的四个阶段图多一个

# 先从 resnet 抽取四个不同阶段的特征图 C2-C5。
_, C2, C3, C4, C5 =
resnet_graph(input_image, config.BACKBONE,stage5=True, train_bn=config.TRAIN_BN)

# Top-down Layers 构建自上而下的网络结构
# 从 C5开始处理,先卷积来转换特征图尺寸
P5 = KL.Conv2D(256, (1, 1), name='fpn_c5p5')(C5)
# 上采样之后的P5和卷积之后的 C4像素相加得到 P4,后续的过程就类似了
P4 = KL.Add(name="fpn_p4add")([
            KL.UpSampling2D(size=(2, 2), name="fpn_p5upsampled")(P5),
            KL.Conv2D(256, (1, 1),name='fpn_c4p4')(C4)])
P3 = KL.Add(name="fpn_p3add")([
            KL.UpSampling2D(size=(2, 2), name="fpn_p4upsampled")(P4),
            KL.Conv2D(256, (1, 1), name='fpn_c3p3')(C3)])
P2 = KL.Add(name="fpn_p2add")([
            KL.UpSampling2D(size=(2, 2),name="fpn_p3upsampled")(P3),
            KL.Conv2D(256, (1, 1), name='fpn_c2p2')(C2)])


# P2-P5最后又做了一次3*3的卷积,作用是消除上采样带来的混叠效应
# Attach 3x3 conv to all P layers to get the final feature maps.
P2 = KL.Conv2D(256, (3, 3), padding="SAME", name="fpn_p2")(P2)
P3 = KL.Conv2D(256, (3, 3), padding="SAME",name="fpn_p3")(P3)
P4 = KL.Conv2D(256, (3, 3), padding="SAME",name="fpn_p4")(P4)
P5 = KL.Conv2D(256, (3, 3), padding="SAME",name="fpn_p5")(P5)
# P6 is used for the 5th anchor scale in RPN. Generated by
# subsampling from P5 with stride of 2.
P6 = KL.MaxPooling2D(pool_size=(1, 1), strides=2,name="fpn_p6")(P5)

# 注意 P6是用在 RPN 目标区域提取网络里面的,而不是用在 FPN 网络
# Note that P6 is used in RPN, but not in the classifier heads.
rpn_feature_maps = [P2, P3, P4, P5, P6] 
# 最后得到了5个融合了不同层级特征的特征图列表;

 

ResNet 的输出被命名为 `C2`, `C3`, `C4`, 和 `C5`,其中 `C2` 是 ResNet 输出的第一个阶段的特征图,而 `C3`, `C4`, 和 `C5` 分别对应 ResNet 输出的第二、第三、和第四个阶段的特征图。ResNet 输出了四个不同阶段的特征图。

接下来,这些特征图通过 Feature Pyramid Network (FPN) 进行处理,得到了五个特征图 `P2`, `P3`, `P4`, `P5`, 和 `P6`。这个过程的具体步骤如下:

1. P5 的构建: 使用 `C5`(ResNet 输出的第四个阶段的特征图)作为输入,经过一个 1x1 的卷积层(`fpn_c5p5`),生成 `P5`。

2. P4 的构建: 使用 `P5` 上采样两倍,再与 `C4`(ResNet 输出的第三个阶段的特征图)经过一个 1x1 的卷积层(`fpn_c4p4`)后的特征图相加,生成 `P4`。

3. P3 的构建: 使用 `P4` 上采样两倍,再与 `C3`(ResNet 输出的第二个阶段的特征图)经过一个 1x1 的卷积层(`fpn_c3p3`)后的特征图相加,生成 `P3`。

4. P2 的构建: 使用 `P3` 上采样两倍,再与 `C2`(ResNet 输出的第一个阶段的特征图)经过一个 1x1 的卷积层(`fpn_c2p2`)后的特征图相加,生成 `P2`。

5. **P6 的构建: 使用 `P5` 进行最大池化(`fpn_p6`),得到 `P6`。

因此,最终得到了五个特征图,其中 `P2`, `P3`, `P4`, `P5` 是通过上述步骤构建的,而 `P6` 是通过最大池化得到的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值