在YOLOv5
或YOLOv7
中,anchors(锚框)
是预设的一组不同大小、不同长宽比的边界框,它们用于在图像中的每个网格单元上进行偏移和缩放,以生成目标的候选框。这些anchors
的设定对于提高目标检测的效率和准确性至关重要。
并且预先设定的anchors
是根据COCO数据集
中目标的大小和形状分布来设定的,能够覆盖大多数目标可能的尺寸和形状。
但是在训练我们自己的数据集时,若数据集内的目标与COCO数据集
内的目标尺寸分别差异较大,长宽比较大时,根据自己的数据集聚类anchor可能会更直接有效。
聚类求解方法:
以YOLOv7
为例,YOLOv7
中已经实现了相关聚类算法来从数据集中自动学习anchors
。是通过迭代优化,找到一组能够最好地代表数据集中目标尺寸和形状的anchors
。
在YOLOv7
项目的根目录新建calc_anchor.py
,将下方代码复制其中:
import utils.autoanchor as autoAC
# 对数据集重新计算 anchors
new_anchors = autoAC.kmean_anchors('D:\\yolov7-main\\data\\bubbleplume.yaml', 9, 320, 8.0, 1000, True)
print(new_anchors)
参数:
path:数据集 *.yaml,或已加载数据集的路径
n:锚点数量
img_size:训练时使用的图像大小
thr:用于训练的锚标签 临界值超参数 hyp['anchor_t'],默认值=4.0
gen:使用遗传算法演化锚点的代数
verbose:是否打印所有结果
返回:
k:均值进化锚点
运行程序后便输出自己数据集的9对anchors