许多流行和最先进的对象检测算法(例如YOLO和SSD)都使用锚框的概念。据我了解,对于YOLO v3这样的网络,每个输出网格单元都有多个具有不同长宽比的锚点框。为了检测,网络预测给定对象与最高重叠的锚框的偏移量。为什么使用它而不是使用多个边界框预测器(每个预测器预测x,y,w,h和c)。
答案 0 :(得分:2)
否,不能简单地用多个边界框预测变量替换锚定框。
在您的描述中,有一个小误会。
为了进行检测,网络预测与给定对象重叠度最高的锚框的偏移量
仅在训练阶段才选择与地面重合度最高的锚框。如SSD文档第2.2节“匹配策略”中所述。不仅会选择重叠率最高的锚点框,还会选择IoU大于0.5的那些。
在预测期间,框预测器将预测每个锚定框的四个偏移量以及所有类别的置信度。
现在是一个问题,为什么要预测偏移量而不是框属性(x,y,c,h)。
简而言之,这与秤有关。为此,我同意@viceriel的回答,但这是一个生动的例子。
假设以下两个尺寸相同的图像( )(左侧的背景为蓝色)被馈入了预测变量,我们希望获得该狗的bbox。现在,每个图像中的红色bbox代表锚点框,两者都相当于狗的完美bbox。如果我们预测偏移量,则盒预测器在两种情况下仅需预测四个偏移量为0。如果您使用多个预测变量,则模型必须为c
和h
给出两组不同的值,而x
和y
相同。这基本上就是@vicerial解释的内容,因为预测偏移量将为预测者提供较难的映射,以供其学习。
此示例还解释了为什么锚框可以帮助提高探测器的性能。
答案 1 :(得分:1)
关键是了解如何创建锚框。例如,YOLOv3从训练集中选取边界框的大小,将K-means应用于边界框,然后找到能很好地描述训练集中所有方框的框的大小。
如果您预测w,h而不是锚定框的偏移量,则可能的输出将更加可变,在某种意义上说,边界框的高度和宽度会很多。但是,如果您改为预测框的偏移量,而框的偏移量以某种方式适合您的对象检测任务,则可变性会较小,因为锚点框描述了所需的边界框。这样可以为网络带来更好的性能,因为您可以重新组织任务,并且网络现在可以轻松地学习输入输出映射。