gpt4 book ai didi

deep-learning - 关于RetinaNet的困惑

转载 作者:行者123 更新时间:2023-12-04 17:30:01 25 4
gpt4 key购买 nike

我最近一直在学习RetinaNet。我阅读了原始论文和一些相关文章,并写了一篇帖子,分享了我所学到的东西:http://blog.zenggyu.com/en/post/2018-12-05/retinanet-explained-and-demystified/。但是,我仍然有些困惑,我在帖子中也指出了这些困惑。有人可以启发我吗?

困惑#1

如论文所示,如果 anchor 框的IoU(具有任何地面真实性)低于0.4,则将其分配给背景。在这种情况下,对应的分类目标标签应该是什么(假设有K个类别)?

我知道SSD具有背景类别(总共使K + 1个类别),而YOLO预测置信度得分,该置信度得分指示除K类概率外,盒子中是否存在物体(不是背景)(不是背景) 。尽管我在论文中未找到任何表明RetinaNet包含背景类的陈述,但我确实看到了以下陈述:“...,在将检测器的置信度阈值设为0.05以后,我们仅从...解码盒预测。”表明存在对置信度得分的预测。但是,该分数从何而来(由于分类子网仅输出表示K个类别的概率的K个数字)?

如果RetinaNet与SSD或YOLO定义目标标签的方式不同,我将假定目标是长度为K的矢量,所有条目均为0,没有1。但是,在这种情况下,如果它是假阴性,那么焦距损失(请参阅下面的定义)将如何惩罚 anchor ?

enter image description here

在哪里

enter image description here

困惑#2

与许多其他检测器不同,RetinaNet使用与类无关的包围盒回归器,而分类子网的最后一层的激活是S形激活。这是否意味着一个 anchor 框可以同时预测不同类别的多个对象?

困惑#3

让我们用$ {(A ^ i,G ^ i)} _ {i = 1,... N} $来表示这些匹配的 anchor 框和地面真相框对,其中$ A $表示 anchor ,$ G $表示真实情况,而$ N $是匹配项的数量。

对于每个匹配的 anchor ,回归子网会预测四个数字,我们将其表示为$ P ^ i =(P ^ i_x,P ^ i_y,P ^ i_w,P ^ i_h)$。前两个数字指定 anchor $ A ^ i $和地面真相$ G ^ i $的中心之间的偏移量,而后两个数字指定 anchor 的宽度/高度与地面真相之间的偏移量。相应地,对于这些预测中的每一个,都有一个回归目标$ T ^ i $计算为 anchor 与地面真相之间的偏移量:

enter image description here

以上方程式正确吗?

在此先感谢您,并随时在帖子中指出其他误解!

更新:

供将来引用,这是我在学习RetinaNet时遇到的另一种困惑(我发现此对话很轻松):

enter image description here

最佳答案

我是开源retinanet项目fizyr/keras-retinanet的作者之一。我会尽力回答您的问题。

困惑#1

通常,在对象检测器中有两种常用的分类评分方法,您可以使用softmax或使用S型。

如果使用softmax,则目标值应始终是一键向量,这意味着如果没有对象,则应将其“分类”为背景(这意味着需要背景类)。好处是您的类(class)分数总和为1。

如果使用S形,则约束会更少。在我看来,这样做有两个好处,您不需要后台类(这样可以使实现更简洁),并且它允许网络进行多类分类(尽管我们的实现不支持这种分类,但从理论上讲是可行的)。另一个小的好处是您的网络要小一些,因为与softmax相比,它需要少分类一个类,尽管这可能会忽略不计。

在实现Retinanet的早期,由于py-faster-rcnn的遗留代码,我们使用softmax。我联系了Focal Loss论文的作者,并询问了有关softmax/Sigmoid情况的信息。他的回答是,这是个人喜好问题,无论您使用其中一个还是另一个都不重要。由于提到了乙状结肠的好处,现在这也是我个人的喜好。

However, where does this score come from (since the classification subnet only outputs K numbers indicating the probability of K classes)?



每个类(class)分数都被视为自己的对象,但是对于一个 anchor ,它们都共享相同的回归值。如果类(class)分数高于该阈值(我敢肯定是任意选择的),则将其视为候选对象。

If RetinaNet defines target labels differently from SSD or YOLO, I would assume that the target is a length-K vector with all 0s entries and no 1s. However, in this case how does the focal loss (see definition below) will punish an anchor if it is a false negative?



负数归类为仅包含零的向量。阳性通过一个热向量进行分类。假设预测是一个全零的向量,而目标是一个热向量(换句话说,一个假负数),那么 p_t是公式中零的列表。然后,焦点损失将对该 anchor 定为较大的值。

困惑#2

简短的回答:是的。

困惑#3

关于原始实现,这几乎是正确的。所有值均被 widthheight除。用 A_xA_y除以 T_xT_y的值是不正确的。

就是说,不久前我们切换到了一个稍微简单的实现方式,在该实现方式中,将回归计算为左上角点和右下角点之间的差异(以 anchor 的宽度和高度的分数为基准)。因为我们在整个代码中使用了左上/右下,所以这简化了实现。此外,我注意到我们的结果在COCO方面略有提高。

关于deep-learning - 关于RetinaNet的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53809995/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com