Deep learning 关于视网膜神经的困惑

Deep learning 关于视网膜神经的困惑,deep-learning,computer-vision,object-detection,Deep Learning,Computer Vision,Object Detection,我最近一直在学习视网膜网。我读了原稿和一些相关的文章,并写了一篇分享我所学到的东西的帖子:。然而,我仍然有一些困惑,我在帖子中也指出了这一点。谁能给我点化一下吗 混乱#1 如本文所示,如果具有任何地面真实值的IoU低于0.4,则将锚定框分配给背景。在这种情况下,对应的分类目标标签应该是什么(假设有K个类) 我知道SSD有一个背景类(总的来说是K+1类),而YOLO预测一个置信度得分,除了K类概率外,还指示盒子中是否有对象(不是背景)或没有对象(背景)。虽然我在论文中没有发现任何声明表明Retin

我最近一直在学习视网膜网。我读了原稿和一些相关的文章,并写了一篇分享我所学到的东西的帖子:。然而,我仍然有一些困惑,我在帖子中也指出了这一点。谁能给我点化一下吗

混乱#1

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

我知道SSD有一个背景类(总的来说是K+1类),而YOLO预测一个置信度得分,除了K类概率外,还指示盒子中是否有对象(不是背景)或没有对象(背景)。虽然我在论文中没有发现任何声明表明RetinaNet包含一个背景类,但我确实看到了这样的声明:“…,我们只解码来自…的框预测,将检测器置信度阈值设置为0.05”,这似乎表明存在置信度得分的预测。但是,该分数来自何处(因为分类子网只输出表示K类概率的K个数字)

如果RetinaNet定义的目标标签不同于SSD或YOLO,那么我会假设目标是一个长度为K的向量,包含所有0个条目,没有1个条目。然而,在这种情况下,如果是假阴性,焦点损失(见下面的定义)将如何惩罚锚

在哪里

混乱#2

与许多其他检测器不同,视网膜网使用类不可知的边界盒回归器,最后一层分类子网的激活是sigmoid激活。这是否意味着一个锚箱可以同时预测不同类别的多个对象

混乱#3

让我们将这些匹配的锚盒和地面真相盒对表示为${(A^i,G^i)}{i=1,…N}$,其中$A$表示锚,$G$表示地面真相,$N$表示匹配数

对于每个匹配的锚,回归子网预测四个数字,我们表示为$p^i=(p^i\u x,p^i\u y,p^i\u w,p^i\u h)$。前两个数字指定锚点$A^i$和地面真相$G^i$中心之间的偏移,而后两个数字指定锚点的宽度/高度和地面真相之间的偏移。相应地,对于这些预测中的每一个,都有一个回归目标$T^i$,计算为锚和地面真相之间的偏移量:

上述方程式正确吗

非常感谢,请随时在帖子中指出任何其他误解

更新:

作为将来的参考,我在学习视网膜网时遇到了另一个困惑(我发现这段对话很轻松):


我是开源视网膜网项目的作者之一。我会尽力回答你的问题

混乱#1

一般来说,物体检测器中有两种常用的分类分数方法,要么使用softmax,要么使用sigmoid

如果使用softmax,目标值应始终为一个热向量,这意味着如果没有对象,则应将其“分类”为背景(意味着需要背景类)。这样做的好处是,你的班级总成绩为1分

如果您使用sigmoid,则约束更少。在我看来,这有两个好处,您不需要背景类(这使实现更干净),并且它允许网络进行多类分类(虽然我们的实现不支持它,但理论上是可能的)。另外一个小小的好处是,您的网络稍微小一些,因为与softmax相比,它需要少分类一个类,尽管这可能是可以忽略的

在实现retinanet的早期,我们使用了softmax,因为它的遗留代码来自。我联系了Focal Loss paper的作者,询问他softmax/sigmoid的情况。他的回答是,这是个人喜好的问题,使用其中一种或另一种并不重要。由于所提到的乙状结肠的好处,这也是我个人的偏好

但是,该分数来自何处(因为分类子网只输出表示K类概率的K个数字)

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

如果RetinaNet定义的目标标签不同于SSD或YOLO,那么我会假设目标是一个长度为K的向量,包含所有0个条目,没有1个条目。然而,在这种情况下,如果是假阴性,焦点损失(见下面的定义)将如何惩罚锚

负片被归类为只包含零的向量。正片通过一个热向量进行分类。假设预测是一个全零向量,但目标是一个单热向量(换句话说,假阴性),那么
p\t
是公式中的零列表。然后,焦点损失将评估为该锚的较大值

混乱#2

简短回答:是的

混乱#3

关于最初的实现,它几乎是正确的。所有值均除以
宽度
高度
。用
A_x
A_y
除以
T_x
T_y
的值是不正确的

这就是说,不久前,我们切换到一个稍微简单的实现,其中回归计算为左上和右下点之间的差值(作为锚的宽度和高度的分数w.r.t.)。这稍微简化了实现,因为我们使用了左上/右下贯穿