yolov5的自适应锚框讲解

发布时间 2023-07-06 16:16:06作者: 海_纳百川

现在网路上关于yolov5的自适应锚框策略都是一笔带过,今天专门来说一下这个

像之前的 YOLOv3、YOLOv4,对于不同的数据集,都会计算先验框 anchor。然后在网络训练时,网络会在 anchor 的基础上进行预测,然后输出预测框,再和标签框进行对比,最后就进行梯度地反向传播。

在 YOLOv3、YOLOv4 中,训练不同的数据集时,是使用单独的脚本进行初始锚框的计算,在 YOLOv5 中,则是将此功能嵌入到整个训练代码里中。所以在每次训练开始之前,它都会根据不同的数据集来自适应计算 anchor。

如果你觉得计算的锚框效果并不好,那你也可以在代码中将此功能关闭。

自适应的计算具体过程:

1. 获取数据集中所有目标的宽和高。

2. 将每张图片中按照等比例缩放的方式到 resize 指定大小,这里保证宽高中的最大值符合指定大小。

3. 将 bboxes 从相对坐标改成绝对坐标,这里乘以的是缩放后的宽高。

4. 筛选 bboxes,保留宽高都大于等于两个像素的 bboxes。

5. 使用 k-means 聚类三方得到n个 anchors,与v3、v4 操作一样。

6. 使用遗传算法随机对 anchors 的宽高进行变异。倘若变异后的效果好,就将变异后的结果赋值给 anchors;如果变异后效果变差就跳过,默认变异1000次。这里是使用 anchor_fitness 方法计算得到的适应度 fitness,然后再进行评估。