Algorithm 特征金字塔算法实现
Input: F3、F4、F5、F6
Output: P
1 def OurFPN(Input):
2 P3 = F3, P4 = F4, P5 = F5, P6 = F6, Features = P3, P4, P5, P6
3 for j in range(len(Features)):
4 C_Feature[j] = Conv2D(channels_num, kernel_size = 1)Feature[j] #调整通道数
5 P3_in = C_Feature[0], P4_in = C_Feature[1], P5_in = C_Feature[2], P6_in = C_Feature[3]
# P3_in、P4_in、P5_in、P6_in分别为通道数调整后的特征输入
6 P6_UP = UpSampling2D()(P6_in), P65 = Add([P6_UP,P5_in]), P65 = SeparableConv()(P65)
# P6_in经过上采样与P5_in进行Add操作生成P65。P54、P43、P53生成操作相似
7 P65_UP= UpSampling2D()(P65), P5_UP = UpSampling2D()(P5_in),P54=Add([P65_UP,P5_UP,P4_in]), P54= SeparableConv()(P54)
# P65_UP和P5_UP经过上采样后与P4_in进行Add操作生成P54
8 P54_UP= UpSampling2D()(P54), P4_UP = UpSampling2D()(P4_in),P43=Add([P54_UP,P4_UP,P3_in]), P43= SeparableConv()(P43)
# P54_UP和P4_UP经过上采样后与P3_in进行Add操作生成P43
9 P53 = Add([P54_UP,P43]), P53= SeparableConv()(P53)
10 P53_MaP = MaxPooling2D()(P53),P64 = Add([P53_MaP,P54,P65_UP]), P64= SeparableConv()(P64)
# P53进行最大池化生成P53_MaP;P65经过上采样与P54、P53_MaP进行Add操作生成P64
11 P64_UP = UpSampling2D()(P64), P = Add([P64_UP,P53]), P= SeparableConv()(P)
12 return P #返回特征P,送入分类部分