k-means clustering with the Intersection over Union (IoU) metric as described in the YOLO9000 paper
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 8 年前 | ||
| 8 年前 | ||
| 8 年前 | ||
| 8 年前 | ||
| 8 年前 | ||
| 8 年前 |
kmeans 锚框
这个仓库实现了一个基于交并比(IoU)度量的 K 均值聚类算法,如 YOLO9000 论文 [1] 中描述的那样。
测试
根据论文,在 PASCAL VOC 2007 数据集上,我们应该在使用5个聚类时得到61.0的平均 IoU,在使用9个聚类时得到67.2的平均 IoU:

首先,我尝试了标准的 K 均值聚类:


图表显示,算法收敛到低于预期的值。为了解决这个问题,我修改了 K 均值算法,使其不在达到收敛时结束。当值开始下降时,算法会用不同的初始均值重新开始。通过大约50次迭代,可以达到约60的平均 IoU。
然而,这似乎还不够好,因为现在算法需要运行很长时间才能找到正确的值。于是,我尝试了不同的初始化方法和 K 均值聚类的变体。最终,通过简单地使用中位数来计算新质心,获得了最好的结果。


在 PASCAL VOC 2007 数据集上的最终结果是:对于 k=5 约为60.15,对于 k=9 约为67.13。如果你多次运行算法,平均 IoU 可能更高。例如,我有时得到了 k=5 的60.5。结果始终依赖于初始化阶段选择的起始点。
使用方法
要自己尝试结果,请在此处下载注释:http://host.robots.ox.ac.uk/pascal/VOC/voc2007/。然后在 test/test_voc2007.py 中更改常量 ANNOTATIONS_PATH,最后执行:
python3 -m unittest discover -s tests/
参考文献
[1] J. Redmon 和 A. Farhadi,“YOLO9000:更好,更快,更强”,2017年IEEE计算机视觉与模式识别会议(CVPR),2017年7月。