我试图了解YOLO的工作原理以及它如何检测图像中的对象。我的问题是,k均值聚类在检测对象周围的边界框方面起什么作用?谢谢。
K -means 聚类算法是数据科学中非常著名的算法。该算法旨在将n
观测值划分为k
聚类。主要包括:
- 初始化:
K
均值(即质心)是随机生成的。 -
分配:通过将每个观测值与最近的质心相关联来形成聚类。
-
更新集群:新创建的集群的质心变得平均。
分配和更新是重复发生的,直到收敛。 最终结果是点及其各自质心之间的平方误差之和最小化。
编辑:
为什么使用 K 表示
- 与其他无监督学习算法相比,K-means的计算速度更快,效率更高。不要忘记时间复杂度是线性的。
- 它产生比分层聚类更高的聚类。更多的集群有助于获得更准确的最终结果。
- 重新计算质心时,实例可以更改集群(移动到另一个集群)。
- 即使您的某些假设被打破,也运行良好。
它在确定锚框方面真正做了什么
- 它将为每个表示形状、位置、大小等的预测变量创建一个锚框(即 k 均值中的聚类)。
- 对于每个锚框,计算哪个对象的边界框具有最高的重叠除以非重叠。这称为并集或借条上的交叉点。
- 如果最高 IOU 大于 50%(可以自定义),请告诉锚框它应该检测到它具有最高 IOU 的对象。
- 否则,如果 IOU 大于 40%,请告诉神经网络真正的检测是模棱两可的,不要从该示例中学习。
- 如果最高 IOU 小于 40%,则它应该预测没有对象。
谢谢!
通常,对象的边界框由以下形式的元组给出 (x0,y0,x1,y1) 其中 x0,y0 是左下角的坐标,x1,y1 是右上角的坐标。
需要从这些坐标中提取宽度和高度,并根据图像宽度和高度对数据进行归一化。
K 均值的指标
- 欧几里得距离
- 欠条(杰卡德指数)
事实证明,欠条比以前更好
Jaccard 索引 =(所选框和簇头框之间的交集)/(所选框和聚类头框之间的并集)
在初始化时,我们可以选择 k 个随机框作为我们的集群头。根据 IoU 值>阈值将锚框分配给相应的集群,并计算集群的平均 IoU。
这个过程可以重复,直到收敛。