我想实现 Yolo v1,但我对算法有一些疑问。
我理解在 YOLO 中,我们将每个单元格 (7x7) 的图像划分为固定数量的边界框(论文中默认为 2 个,具有 4 个坐标:x、y、w、h),置信度分数我们还预测每个单元格的类别分数。在测试步骤中,我们可以使用 NMS 算法来去除对象的多次检测。
1)我们什么时候把图像分成网格?事实上,当我阅读他们提到划分图像的论文时,但当我查看网络架构时,似乎我们有两部分:卷积层和 FC 层。这是否意味着网络使用边界框输出“自然”地做到这一点?网格 7x7 的大小是否特定于卷积部分使用它?如果我们使用例如 VGG 会改变网格的大小吗?
编辑:由于我们网络的输出,网格似乎被“虚拟地”划分了。
2) 每个单元格使用 2 个边界框。但是在一个单元格中,我们只能预测一个对象。为什么我们使用两个边界框?
在训练时,我们只希望一个边界框预测器负责每个对象。我们分配一个预测器来“负责”预测一个对象,根据该预测与基本事实的当前 IOU 最高。这导致边界框预测器之间的专业化。每个预测器都能更好地预测某些尺寸、纵横比或对象类别,从而提高整体召回率。
3)我真的不明白这个报价。实际上,据说图像中的每个对象都有一个边界框。但是边界框仅限于单元格,那么当物体大于一个单元格时,YOLO 是如何工作的呢?
4)关于输出层,据说他们使用线性激活函数,但它是否使用等于1的最大值?因为他们说他们对 0 和 1 之间的坐标进行了归一化(我认为置信度和类别预测是一样的)。