目标检测中的Anchor

本文探讨了目标检测中Anchor机制的起源、如何通过预设尺度和长宽比生成anchorbox,以及它在Faster-RCNN中的作用。重点分析了Anchor的优点如提高召回率,和缺点如参数调整难度与冗余框问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

在计算机视觉四大基本任务(检测、分类、定位、分割)中,图像的目标检测受到的了研究者们越来越多的关注。今天我们就来聊一聊在目标检测中一项重要的机制——Anchor。Anchor机制在凯明大神提出的Faster-RCNN(2015年提出)时兴起。下面将从三方面来叙述Anchor.

目录

1.什么是Anchor

2.Anchor的机制

3.Anchor的优缺点

1.什么是Anchor
在目标检测任务中,输入图像经过骨干网络提取得到特征图,该图上的每个像素点,即为anchor锚点;或者说在feature map使用滑动窗口的操作方式,当前滑窗的中心在原像素空间的映射点就称为Anchor;简单来说RPN(Reg ion Proposal Network)依靠一个在共享特征图上滑动的窗口,为每个位置(即:Anchor)生成9种预先设置好长宽比与面积的目标框。这9种初始anchor包含三种面积(128×128,256×256,512×512),每种面积又包含三种长宽比(1:1,1:2,2:1),即 Anchor boxes。示意图如下所示:
2.Anchor的机制
以每个anchor为中心点,人为设置不同的尺度(scale)和长宽比(aspect ratio),即可得到基于anchor的多个anchor box,用以框定图像中的目标,这就是所谓的anchor 机制。如下图所示,左侧显示了基于一个anchor点生成的9个anchor boxes(红、绿、蓝三种颜色),右侧显示了该特征图上密集分布的所有anchor boxes。
3.Anchor的优缺点
在知道了Anchor的原理和机制之后,下面我们就来讲讲Anchor的优缺点了:
 3.1 Anchor的优点:

 ① 使用anchor机制产生密集的anchor boxes,使得网络可直接在此基础上进行目标分类及边界框坐标回归;
 ② 密集的anchor boxes可有效提高网络目标召回能力,对于小目标检测来说提升非常明显。

 3.2 Anchor的缺点:

 ① anchor机制中,需要设定的超参:尺度(scale)和长宽比( aspect ratio)是比较难设计的。这需要较强的先验知识。
 ②冗余框非常之多:一张图像内的目标毕竟是有限的,基于每个anchor设定大量anchor boxes会产生大量的easy-sample,即完全不包含目标的背景框。这会造成正负样本严重不平衡问题,也是one-stage算法难以赶超two-stage算法的原因之一。
 ③网络实质上是看不见anchor boxes的,在anchor boxes的基础上进行边界回归更像是一种在范围比较小时候的强行记忆。

03-09
### Anchor Box 定义 Anchors boxes 是预定义的边界框,用于在卷积神经网络中初始化可能的对象位置[^1]。这些边界框具有不同的比例和纵横比,在特征图上的每一个位置都会生成多个anchors。 ### Anchors 提取的时间与地点 Anchors 被提议在整个输入图像的各个位置上,通过滑动窗口机制实现。对于每个位置,会根据设定好的不同尺度和长宽比来创建一组anchor boxes。这一过程发生在模型预测阶段之前,作为准备步骤的一部分。 ### Ground Truth 匹配及批处理生成 当拥有 ground truth bounding boxes 后,需要将其与预先设置好的 anchors 进行匹配。一般采用 IoU (Intersection over Union) 来衡量两个盒子之间的重叠程度,并据此决定最佳匹配关系。之后依据此匹配结果构建训练所需的批次数据集。 ### 锚盒修正及其损失函数计算 在训练期间调整 anchor boxes 主要是通过对正样本(即那些被分配给真实物体实例的)应用回归操作完成。具体来说就是最小化预测box同ground-truth box间的差异;这通常涉及到平移变换以及大小缩放等操作。为了确保大尺寸对象不会主导整个优化过程,还会引入特定策略使得各类规模的目标都能得到适当重视[^2]。 ```python def compute_iou(boxA, boxB): # Calculate intersection area interArea = max(0, min(boxA[2], boxB[2]) - max(boxA[0], boxB[0])) * \ max(0, min(boxA[3], boxB[3]) - max(boxA[1], boxB[1])) # Compute union area boxAArea = (boxA[2] - boxA[0]) * (boxA[3] - boxA[1]) boxBArea = (boxB[2] - boxB[0]) * (boxB[3] - boxB[1]) unionArea = float(boxAArea + boxBArea - interArea) # Return IOU value return interArea / unionArea if unionArea != 0 else 0 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值