PaddlePaddle 获取BackBone的中间层feature map

import paddle
import paddle.nn as nn
from paddle.vision.models import vgg16, resnet50
import os
class Resnet(nn.Layer):

    def __init__(self):
        super(Resnet, self).__init__()
        self.net = resnet50(pretrained=True)
        self.layer0 = nn.Sequential(
            self.net.conv1,
            self.net.bn1,
            self.net.relu,
            self.net.maxpool,
        )
        self.layer1 = self.net.layer1
        self.layer2 = self.net.layer2
        self.layer3 = self.net.layer3
        self.layer4 = self.net.layer4

    def forward(self, x):
        C0 = self.layer0(x)
        C1 = self.layer1(C0)
        C2 = self.layer2(C1)
        C3 = self.layer3(C2)
        C4 = self.layer4(C3)
        return C0, C1, C2, C3, C4


class VGG16(nn.Layer):

    def __init__(self):
        super(VGG16, self).__init__()
        net = vgg16(pretrained=True)
        self.stage1 = nn.Sequential(*[net.features[layer] for layer in range(0, 5)])
        self.stage2 = nn.Sequential(*[net.features[layer] for layer in range(5, 10)])
        self.stage3 = nn.Sequential(*[net.features[layer] for layer in range(10, 17)])
        self.stage4 = nn.Sequential(*[net.features[layer] for layer in range(17, 24)])
        self.stage5 = nn.Sequential(*[net.features[layer] for layer in range(24, 31)])

    def forward(self, x):
        C1 = self.stage1(x)
        C2 = self.stage2(C1)
        C3 = self.stage3(C2)
        C4 = self.stage4(C3)
        C5 = self.stage5(C4)
        return C1, C2, C3, C4, C5
经验分享 程序员 微信小程序 职场和发展