我最近阅读了RetinaNet的论文,但仍未理解一个小细节:
我们从FPN(P2,…P7)获得了多尺度特征图。
然后,两个FCN头部(分类头和回归头)分别对每个特征图进行卷积。
然而,每个特征图的空间尺度不同,那么,分类头和回归头如何在所有卷积参数固定(例如3×3滤波器,步长为1等)的情况下保持固定的输出体积呢?
在查看PyTorch对RetinaNet的实现中的这一行时,我看到头部只是对每个特征进行卷积,然后以某种方式堆叠所有特征(它们唯一的共同维度是通道维度,为256,但在空间上它们是彼此的两倍)。
我很想知道它们是如何组合的,我没能理解这一点。
回答:
在每个金字塔步骤的卷积之后,你将输出重塑为形状(H*W, out_dim)
(对于分类头,out_dim
是num_classes * num_anchors
,对于bbox回归器是4 * num_anchors
)。最后,你可以沿着H*W
维度连接生成的张量,现在这是可能的,因为所有其他维度都匹配,并且你可以像在具有单一特征层的网络上一样计算损失。