之前我一直不懂这个FPN怎么配合的,今天看到了,其实是在basebone.py里根据config,创建resnet后,选取指定层(Conv2~Conv5),到此文件下,进行构建FPN部分,也是在这里添加了P6层,构建成(P2~P6)完了再返给backbone.py,从而构建resnet+fpn的backbone。即build_resnet_fpn_backbone。
这个roi 是指在原图上的也就是proposals。而不是说roialign之后的roifeature
如果FPN生成的proposals越大,就在尺寸越小的特征图上取(如将proposals映射到1/32的特征图)。因为这时候框里面更可能是一个大的物体,需要在视野域更大的特征上提取特征。不然下方的特征视野域过小,看不到物体的全貌,就盲人摸象了。
参数:
x(list [Tensor]):每个特征层的特征图。大概是Conv2~Conv5
返回:
results(tuple [Tensor]):FPN图层后的特征图,大概是P2~P6 (在这里又加了一层)
它们是从最高分辨率开始排序的。 也就是#P2〜P6
# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
import torch
import torch.nn.functional as F
from torch import nn
class FPN(nn.Module):
"