锚框(Anchor Box)是目标检测模型预先铺好的一批"参考框":模型不直接凭空算出物体在哪,而是先判断这些框里哪些像物体,再把它们挪一挪、改一改尺寸。
打个比方。要在停车场照片里找出所有车,随便猜一个坐标,猜中的概率极低。锚框的做法更像先在地上画好车位:每个位置画几个大小、胖瘦不同的车位,再让模型回答两个问题——这个车位里有没有车?如果有,车相对车位偏了多少、大了多少?后者就是回归出的偏移量(offset),把车位一挪,框就贴住车了。
实现上,检测网络先把图片压成特征图(feature map),图上每个位置都挂几个锚框,尺寸和长宽比(aspect ratio)是提前定好的——常见做法是在训练集上聚类真实框,看它们大多长什么样,再照着设几组。训练时把锚框和标注框按交并比(IoU,Intersection over Union)匹配:重叠够高的算正样本,学"有物体、往哪偏";重叠很低的算负样本,学"这里是背景"。推理时大量框互相重叠,还得用非极大值抑制(NMS,Non-Maximum Suppression)去重。
和相邻概念的区别:
- 滑动窗口(sliding window)在一个位置穷举固定大小;锚框则在每个位置同时铺开多种尺度和长宽比。
- 区域提议网络(RPN,Region Proposal Network)本身也用锚框,它先粗筛出候选区域,再交给后面的网络精修。
- 无锚框(anchor-free)方法不预设参考框,直接预测中心点和宽高,或用一组可学习的查询(query)做集合预测。
| 维度 | 锚框方法 | 无锚框 / 端到端方法 |
|---|---|---|
| 先验设定 | 手工设定尺度与长宽比 | 基本不需要 |
| 预测对象 | 相对锚框的偏移量 | 中心点、宽高或查询向量 |
| 后处理 | 通常依赖 NMS 去重 | 部分方案可省去 NMS |
| 换数据集 | 往往要重设锚框 | 相对更省心 |
对从业者来说,锚框的价值和麻烦是一体的:它把"从零回归坐标"拆成"分类加微调",训练更稳,也让早期检测器真正跑了起来;代价是一堆超参数(尺度、长宽比、IoU 阈值、正负样本比例)要调,换个数据集,原来的尺寸可能就不合适了。这也是无锚框和端到端路线后来流行起来的原因之一。
今天做新项目,条件允许时无锚框或端到端方案往往更省心;但大量存量代码和边缘设备上的老模型仍然靠锚框工作,读懂它依然是看懂检测代码的基本功。普通用户不必关心用的哪套——你在屏幕上看到的那个方框,背后多半站着一群被筛掉的候选框。
