【问题标题】:How are the FCN heads convolved over RetinaNet's FPN features?FCN 头是如何对 RetinaNet 的 FPN 特征进行卷积的?
【发布时间】:2020-08-27 10:05:41
【问题描述】:

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

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

【问题讨论】:

    标签: machine-learning deep-learning retinanet


    【解决方案1】:

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

    【讨论】:

    • 谢谢,这更有意义。然而,这种重塑是如何进行的呢?我在哪里可以看到该步骤确实发生了(无论是在论文/某些实现中)?
    • 在论文中没有明确提到,因为它只是一个实现细节。原则上,您也可以避免串联,只计算每个金字塔级别的损失,在最后添加所有内容(据我所知,这是keras-retinanet 实现使用的方法)。根据如何完成,这是一个简单的Reshape 操作。我认为 TF 在 SSD+FPN 中的实现会进行整形和连接,你可以看看他们的代码(但是,由于对象检测 API 的排列方式,这些代码读起来相当复杂)
    猜你喜欢
    • 1970-01-01
    • 2018-01-15
    • 2017-06-17
    • 1970-01-01
    • 2017-12-02
    • 2012-01-12
    • 1970-01-01
    • 2021-12-21
    • 2021-03-27
    相关资源
    最近更新 更多