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_dim
为 num_classes * num_anchors
并且 4 * num_anchors
用于 bbox 回归量)。
最后,您可以沿 H*W
维度连接生成的张量,这现在是可能的,因为所有其他维度都匹配,并像在具有单个特征层的网络上一样计算损失。
我最近阅读了 RetinaNet 论文,但我还没有理解一个小细节:
我们有从 FPN (P2,...P7) 获得的多尺度特征图。
然后两个 FCN 头(分类器头和回归器头)正在对每个特征图进行卷积。
然而,每个特征图都有不同的空间尺度,那么,分类器头和回归器头如何保持固定的输出量,因为它们的所有卷积参数都是固定的? (即步幅为 1 的 3x3 过滤器等)。
查看 RetinaNet PyTorch's implementation 的这一行,我看到头部只是对每个特征进行卷积,然后所有特征都以某种方式堆叠(它们之间唯一的共同维度是通道维度,即 256,但在空间上他们是彼此的两倍)。
很想知道它们是如何组合的,我无法理解这一点。
在每个金字塔步骤的卷积之后,您将输出重塑为 (H*W, out_dim)
形状(对于 class 头部 out_dim
为 num_classes * num_anchors
并且 4 * num_anchors
用于 bbox 回归量)。
最后,您可以沿 H*W
维度连接生成的张量,这现在是可能的,因为所有其他维度都匹配,并像在具有单个特征层的网络上一样计算损失。