YOLOv5 中的 AutoAnchor 系统是一种专门的机制,可自动优化锚框以提高对象检测性能。它会评估默认锚框与训练数据集的契合程度,并在必要时进行调整,以确保模型能够更好地检测各种形状和大小的对象。
AutoAnchor 主要有三个目的:
本页重点介绍 AutoAnchor 在 YOLOv5 中的技术实现和使用。有关通用检测过程的信息,请参阅 推断,有关模型架构的详细信息,请参阅 模型架构。
AutoAnchor 通常在训练过程的早期阶段调用,以确保模型从适合特定数据集的锚框开始训练。
AutoAnchor 依赖几个关键指标来评估锚框性能
| 指标 | 描述 | 代码参考 |
|---|---|---|
| 最佳召回率 (BPR) | 锚框能够有效捕获的真实框的百分比 | utils/autoanchor.py40-42 |
| 阈值以上锚框数 (AAT) | 每个目标超过阈值比率的平均锚框数 | utils/autoanchor.py40-41 |
| 比率指标 | 衡量每个锚框与真实框尺寸的匹配程度 | utils/autoanchor.py38-39 |
阈值(默认为 4.0)控制了锚框与真实框匹配的严格程度。较低的值需要更严格的匹配。
AutoAnchor 首先评估当前锚框与数据集的契合程度
当默认锚框不适合数据集时,AutoAnchor 会生成新的锚框
锚框契合度函数评估一组锚框与数据集的契合程度
锚框需要按照相对于步长值的正确顺序排列
AutoAnchor 在训练期间自动调用
您也可以独立运行锚框生成过程
该过程首先对真实框的归一化宽度和高度应用 k-means 聚类
遗传算法进一步优化锚框
来源:utils/autoanchor.py28-63 utils/autoanchor.py66-175
当 AutoAnchor 运行时,它会提供关于锚框契合度的信息性输出
AutoAnchor: 2.51 anchors/target, 0.994 Best Possible Recall (BPR). Current anchors are a good fit to dataset ✅
或者,如果锚框需要改进
AutoAnchor: 0.83 anchors/target, 0.792 Best Possible Recall (BPR). Anchors are a poor fit to dataset ⚠️, attempting to improve...
AutoAnchor: Running kmeans for 9 anchors on 12934 points...
AutoAnchor: Evolving anchors with Genetic Algorithm: fitness = 0.8402
AutoAnchor: thr=0.25: 0.9945 best possible recall, 8.46 anchors past thr
AutoAnchor: Done ✅ (optional: update model *.yaml to use these anchors in the future)