参考PAN的github代码:PAN.pytorch
在FPEM的up-Scale阶段,传入的是resnet18(假设backbone为resnet18)产生出的c2,c3,c4,c5经过通道数采样到128的特征图,up-Scale时,c5必须上采样到c4的大小才能与之相加得到新c4,c4必须上采样到c3的大小才能与之相加得到新c3,同理得到新c2。
在FPEM的up-Scale阶段,新c3上采样到新c2得到新新c3,新c4上采样到新新c3得到新新c4,同理得到新新c5,一个FPEM返回最后的新c2,新新c3,新新c4,新新c5。(注意新和新新)。
因为FPEM是级联的结构,所以第二个FPEM将会接受第一个FPEM返回的如上运算返回c2,c3,c4,c5。且相加。
for i, fpem in enumerate(self.fpems):
c2, c3, c4, c5 = fpem(c2, c3, c4, c5)
if i == 0:
c2_ffm = c2
c3_ffm = c3
c4_ffm = c4
c5_ffm = c5
else:
c2_ffm += c2
c3_ffm += c3
c4_ffm += c4
c5_ffm += c5
接下来进入到FFM,相加得到最后的c5,c4,c3分别同c2的后两个维度进行采样以获得相同的特征大小
c5 = F.interpolate(c5_ffm, c2_ffm.size()[-2:], mode='bilinear')
c4 = F.interpolate(c4_ffm, c2_ffm.size()[