本题要求用 K-means 在宽高空间对检测框进行聚类,以获得 YOLO 的 Anchor 尺寸。与欧氏距离不同,这里采用 d = 1 − IOU 作为距离度量,能更贴近目标检测中对宽高匹配的要求。
算法选择与要点
初始化(稳定初始化):直接取前 K 个框作为初始聚类中心(宽、高)。
分配阶段:对每个样本框 (w,h) 计算到所有中心 (Wk,Hk) 的距离
【背景信息】YOLO (You Only Look Once) 系列算法在目标检测领域采用了基于Anchor的机制。Anchor是预定义在图像上的一组固定尺寸和比例的参考框,在特征图的每个位置上预设多个Anchor框作为物体位置和尺寸预测的基准。通过模型预测Anchor与真实框的偏移量(Δx,Δy,Δw,Δh),而非直接输出坐标,避免了直接回归绝对坐标的困难。
【任务目标】 基于k-means聚类算法生成YOLO目标检测中的Anchor框:给定N个检测框的宽和高,聚类得到K个Anchor尺寸,并按照面积从大到小的顺序输出Anchor尺寸。
【任务目标】
基于k-means聚类算法生成YOLO目标检测中的Anchor框:给定N个检测框的宽和高,聚类得到K个Anchor尺寸,并按照面积从大到小的顺序输出Anchor尺寸。
聚类的流程如下:
初始化:为保证聚类结果的稳定性,采用稳定初始化策略,直接取前K个框作为初始中心。
分配阶段:计算每个框到所有聚类中心的距离,分配到最近的中心。
更新阶段:计算每个簇中所有框的宽高均值作为新的聚类中心(在每次迭代计算聚类中心时,均进行向下取整)。
迭代终止条件:当达到设定迭代次数T或新旧聚类中心之间的d值之和小于1e-4时停止迭代。
注:聚类使用 d=1−IOU 作为距离度量,d和IOU的计算均使用浮点数。
其中IOU的核心公式为交并面积比,即
IOU=并集面积交集面积对于检测框B1(w1,h1) 和 B2(w2,h2),交集面积计算为:
$$intersection = \min(w_1, w_2) \times \min(h_1, h_2) $$并集面积则为两框总面积减去交集:
$$union = w_1 \times h_1 + w_2 \times h_2 - intersection $$最终:IOU = intersection/(union + 1e-16) (加极小值避免除零)
第一行:N,K,T,以空格分开。
其中:
N 为训练集中检测框的个数,10≤N≤80
K 为聚类中心个数,3≤K≤9
T 为聚类迭代次数,2≤T≤30
接下来 N 行:每行为检测框的宽与高,用空格分开。
按照聚类中心的面积从大到小的顺序,输出聚类后的中心。
(聚类中心的面积 = 聚类中心的宽 × 聚类中心的高)
输入
12 4 20
12 23
34 21
43 23
199 23
34 23
108 12
200 107
12 78
123 110
34 23
56 48
78 66
输出
133 94
121 27
36 22
12 50
说明
输入第一行为 12420,代表12个检测框,要聚成4类,最大迭代次数为20,接下来的12行是检测框的宽与高。
取前4个框 [12,23],[34,21],[43,23],[199,23] 作为初始聚类中心。
迭代更新计算聚类中心,注意每次迭代时聚类中心都做向下取整。
按照聚类中心的面积(宽 × 高)从大到小排序,输出4个Anchor聚类中心。
输入
12 3 10
12 23
34 21
43 23
199 23
34 23
108 12
200 107
12 78
123 110
34 23
56 48
78 66
输出
150 76
51 25
12 50
说明
输入第一行为 12310,代表12个检测框,要聚成3类,最大迭代次数为10,接下来的12行是检测框的宽与高。
取前3个框 [12,23],[34,21],[43,23] 作为初始聚类中心。
迭代更新计算聚类中心,注意每次迭代时聚类中心都做向下取整。
按照聚类中心的面积(宽 × 高)从大到小排序,输出3个Anchor聚类中心。
注:每次迭代的距离度量 d 和交并比 IOU 都是用浮点数计算,但每次迭代和最终输出的聚类中心都要做向下取整。