我们可以用多个边界框预测器替换目标检测中的锚框吗?
Can we replace anchor boxes in object detection with multiple bounding box predictors?
许多流行和最先进的对象检测算法(如 YOLO 和 SSD)都使用锚框的概念。据我了解,对于像 YOLO v3 这样的网络,每个输出网格单元都有多个具有不同纵横比的锚框。为了进行检测,网络预测与给定对象重叠度最高的锚框的偏移量。为什么使用它而不是使用多个边界框预测器(每个预测器预测 x、y、w、h 和 c)。
关键是理解锚框是如何创建的。例如,YOLOv3 将训练集中的边界框大小应用 K-means 并找到能够很好地描述训练集中存在的所有框的框大小。
如果你预测 w, h 而不是锚框的偏移量,你可能的输出将更加可变,从某种意义上说,边界框会有很多很多可能的高度和宽度。但是,如果您改为预测框的偏移量,该框以某种方式具有适合您的对象检测任务的大小,则可变性会更小,因为锚框描述了想要的边界框。这会提高网络的性能,因为您重新构建了任务,网络现在学习难度降低了 input-output 映射。
不,不能简单地用多个边界框预测器替换锚框。
在您的描述中,有一点误会。
For detection the network predicts offset for the anchor box with the highest overlap a the given object
选择与 groundtruth 重叠度最高的锚框只发生在训练阶段。如 SSD 论文第 2.2 节匹配策略中所述。不仅选择重叠度最高的锚框,还选择 IoU 大于 0.5 的锚框。
在预测时间内,框预测器将预测每个锚框的四个偏移量以及所有类别的置信度。
现在谈到为什么预测偏移量而不是框属性 (x,y, c,h) 的问题。
总之,这跟天秤有关。为此,我同意@viceriel 的回答,但这里有一个生动的例子。
假设以下两张大小相同的图像(左边一张有蓝色背景)被馈送到预测器,我们想要得到狗的bbox。现在每个图像中的红色 bbox 代表锚框,两者都是关于狗的完美 bbox。如果我们预测偏移量,则框预测器只需要在两种情况下都为四个偏移量预测 0。如果您使用多个预测变量,则模型必须为 c
和 h
提供两组不同的值,而 x
和 y
是相同的。这基本上就是@vicerial 解释的内容,因为预测偏移量将为预测器学习提供一个不太困难的映射。
这个例子也解释了为什么锚框可以帮助提高检测器的性能。
许多流行和最先进的对象检测算法(如 YOLO 和 SSD)都使用锚框的概念。据我了解,对于像 YOLO v3 这样的网络,每个输出网格单元都有多个具有不同纵横比的锚框。为了进行检测,网络预测与给定对象重叠度最高的锚框的偏移量。为什么使用它而不是使用多个边界框预测器(每个预测器预测 x、y、w、h 和 c)。
关键是理解锚框是如何创建的。例如,YOLOv3 将训练集中的边界框大小应用 K-means 并找到能够很好地描述训练集中存在的所有框的框大小。
如果你预测 w, h 而不是锚框的偏移量,你可能的输出将更加可变,从某种意义上说,边界框会有很多很多可能的高度和宽度。但是,如果您改为预测框的偏移量,该框以某种方式具有适合您的对象检测任务的大小,则可变性会更小,因为锚框描述了想要的边界框。这会提高网络的性能,因为您重新构建了任务,网络现在学习难度降低了 input-output 映射。
不,不能简单地用多个边界框预测器替换锚框。
在您的描述中,有一点误会。
For detection the network predicts offset for the anchor box with the highest overlap a the given object
选择与 groundtruth 重叠度最高的锚框只发生在训练阶段。如 SSD 论文第 2.2 节匹配策略中所述。不仅选择重叠度最高的锚框,还选择 IoU 大于 0.5 的锚框。
在预测时间内,框预测器将预测每个锚框的四个偏移量以及所有类别的置信度。
现在谈到为什么预测偏移量而不是框属性 (x,y, c,h) 的问题。
总之,这跟天秤有关。为此,我同意@viceriel 的回答,但这里有一个生动的例子。
假设以下两张大小相同的图像(左边一张有蓝色背景)被馈送到预测器,我们想要得到狗的bbox。现在每个图像中的红色 bbox 代表锚框,两者都是关于狗的完美 bbox。如果我们预测偏移量,则框预测器只需要在两种情况下都为四个偏移量预测 0。如果您使用多个预测变量,则模型必须为 c
和 h
提供两组不同的值,而 x
和 y
是相同的。这基本上就是@vicerial 解释的内容,因为预测偏移量将为预测器学习提供一个不太困难的映射。
这个例子也解释了为什么锚框可以帮助提高检测器的性能。