YOLOv5 默认使用的数据集为 COCO 数据集,COCO 数据集里面不仅包含人、汽车还包含动物、飞机等其他类别,对于本论文应用场景的研究显然是不合适的,因此需要重新计算 Anchor box。
获得 Anchor box 参数的过程为:
(1) 需要将所有的 bounding box 坐标提取出来,也许一张图有一个矩形框,也许有多个,但是我们需要无区别的将所有图片的所有矩形框提取出来,放在一起。
(2) 在用数据自动标注软件或 labelimg 软件创建数据集时往往给定的是目标框的 4 个坐标,但是我们利用 K-means+PSO 算法分析的是目标框的宽高大小,这时我们需要将目标框的位置信息转换为目标框的宽( w)和高( h )信息,计算方法很简单:长=右下角横坐标-左上角横坐标、宽=右下角纵坐标-左上角纵坐标。
(3) 读取目标归一化的 w和 h 值作为待分类数据,在所有的目标框中随机选择K 组目标框尺寸作为 Anchor box 的初始值。
(4) 计算每个目标框与每个 Anchor box 的 IOU 值。传统的聚类方法是使用欧氏距离来衡量差异,也就是说如果运用传统的 k-means 聚类算法,可以直接聚类目标框的宽和高,产生 K 组宽、高组合的 Anchor boxes,但此方法在 box 尺寸比较大的时候,其误差也更大,所以引入 IOU 值避免这个问题。由于 IOU 值往往越大越好,所以定义了一个距离 d 参数,用来表示其误差:d =1−IOU 。
使用 K-means 聚类时,面临的一个重要问题就是如何选择一个合适 K 值,也就是我们需要选择几个 Anchor boxes。考虑到计算的复杂度,Anchor boxes 的数量最好不要超过 10,因此通常的做法是:对 K 在[2,11]这个区间内进行多次聚类,然后画出Avg IOU 随 K 值的变化曲线,从中发现最佳的 Anchor boxes 数量。每个粒子的位置用 K ×2 的矩阵表示,每个聚类中心为宽 w高 h 的矩形框,jC 为某一类别的数据向量,jd 表示粒子与聚类中心的距离和,w 取 1,1 2c=c =2 。由于 K-means 对初始点的选取比较敏感,有时需要多次的选取才能达到寻优效果,K-means 与 PSO 算法的结合可以降低 K-means 算法对初始点的选取敏感问题而 K-means 也可以帮助 PSO 算法快速收敛如下图所示 K 值与 Avg IOU 关系曲线。
我们常常用 elbow method 来选择我们所需的最佳值。elbow method 是 K 值与Avg IOU 关系曲线的图形效果,它看似一个胳膊肘。形成胳膊肘这样的一个拐点是聚类性能较好的点。
elbow method 是用来估计最佳 K 值的常用方法它的思想简单来说就是:如果某个 K 值使得平均 IOU 的斜率发生了明显的变化,那么这个 K 值就是我们想要的。如下图所示出现两个明显的拐点,考虑到更高召回率因此采用 K 值为 9 因此生成 9个 Anchor boxes 框,分别为(29x48),(32x84),(49x46),(50x103),(68x49),(90x83)(128x108),(165x179),(290x326)。