FCN 头如何与 RetinaNet 的 FPN 特征进行卷积?

How are the FCN heads convolved over RetinaNet's FPN features?

我最近阅读了 RetinaNet 论文,但我还没有理解一个小细节:
我们有从 FPN (P2,...P7) 获得的多尺度特征图。
然后两个 FCN 头(分类器头和回归器头)正在对每个特征图进行卷积。
然而,每个特征图都有不同的空间尺度,那么,分类器头和回归器头如何保持固定的输出量,因为它们的所有卷积参数都是固定的? (即步幅为 1 的 3x3 过滤器等)。

查看 RetinaNet PyTorch's implementation 的这一行,我看到头部只是对每个特征进行卷积,然后所有特征都以某种方式堆叠(它们之间唯一的共同维度是通道维度,即 256,但在空间上他们是彼此的两倍)。
很想知道它们是如何组合的,我无法理解这一点。

在每个金字塔步骤的卷积之后,您将输出重塑为 (H*W, out_dim) 形状(对于 class 头部 out_dimnum_classes * num_anchors 并且 4 * num_anchors 用于 bbox 回归量)。 最后,您可以沿 H*W 维度连接生成的张量,这现在是可能的,因为所有其他维度都匹配,并像在具有单个特征层的网络上一样计算损失。