当前位置: 首页 > backend >正文

Anchor-based 和 Anchor-free

一、Anchor-based (基于锚框的) 方法

1. 核心思想:
Anchor-based 方法的核心思想是预设一组不同尺度(scale)和宽高比(aspect ratio)的参考框(即锚框,anchors 或称先验框,priors)。模型不直接预测物体在哪里,而是预测这些预设的锚框与真实物体(Ground Truth, GT)之间的偏移量(offset)以及该锚框内包含特定类别物体的概率

可以理解为,不是大海捞针式地直接找物体,而是先在图像上撒上一堆“模板框”(锚框),然后看哪个模板框跟真实物体比较接近,再对这个模板框进行微调,使其更精确地框住物体。

2. 工作流程:
典型的 Anchor-based 检测器(如 Faster R-CNN, SSD, YOLOv2/v3/v4/v5, RetinaNet)通常包含以下步骤:

  • 锚框生成 (Anchor Generation):
    • 在特征图(Feature Map,通常是骨干网络提取的特征)的每个位置(或每隔一定步长stride的位置)平铺(tile)一系列锚框。
    • 这些锚框具有预先定义的多种尺度(例如,32x32, 64x64, 128x128像素)和多种宽高比(例如,1:1, 1:2, 2:1)。
    • 例如,如果一个特征图位置有 k 个锚框(3种尺度 x 3种宽高比 = 9个锚框),那么整个特征图就会产生 W×H×k 个锚框。
  • 标签分配 (Label Assignment) / 锚框匹配 (Anchor Matching):
    • 在训练阶段,需要为每个锚框分配一个标签(是前景物体还是背景)。
    • 通常使用交并比 (Intersection over Union, IoU) 来衡量锚框与真实物体框之间的重叠程度。
      • 正样本 (Positive Anchors): 与某个真实物体框的 IoU 大于某个阈值(如 0.7)的锚框,或者与某个真实物体框具有最大 IoU 的锚框。这些锚框负责预测对应的真实物体。
      • 负样本 (Negative Anchors): 与所有真实物体框的 IoU 都小于某个阈值(如 0.3)的锚框。这些被认为是背景。
      • 忽略样本 (Ignored Anchors): IoU介于中间(如0.3-0.7之间)的锚框,在训练中通常被忽略,不贡献损失。
  • 模型预测 (Prediction):
    • 对于每个锚框,模型会输出两部分:
      • 分类分数 (Classification Score): 判断该锚框内是某个类别物体还是背景的置信度(例如,对于COCO数据集,可能是80个类别+1个背景)。
      • 边界框回归参数 (Bounding Box Regression Parameters): 对于被认为是正样本的锚框,预测其相对于自身位置和尺寸的4个偏移量 (Δx,Δy,Δw,Δh),用于微调锚框使其更贴近真实物体框。
  • 损失函数 (Loss Function):
    • 通常由分类损失(如交叉熵损失)和回归损失(如 Smooth L1 损失)组成。
  • 非极大值抑制 (Non-Maximum Suppression, NMS):
    • 在推理阶段,模型会输出大量的预测框(经过回归调整后的锚框)。NMS用于去除高度重叠且指向同一物体的冗余预测框,保留置信度最高的那个。

3. 优点:

  • 高召回率 (High Recall): 通过密集平铺不同尺度和宽高比的锚框,能够覆盖各种可能的物体位置和形状,理论上更容易找到所有物体。
  • 性能稳定且强大: 许多经典的、性能优异的检测器(如 Faster R-CNN, RetinaNet)都基于锚框。它们在各种基准测试中取得了很好的效果。
  • 结构化预测: 锚框提供了一个结构化的起点,使得学习偏移量相对容易。

4. 缺点:

  • 超参数敏感: 锚框的尺度、宽高比、数量等都需要根据特定数据集进行精心设计和调整,这些超参数对模型性能影响很大。
  • 正负样本不平衡: 大多数锚框都是负样本(背景),导致训练过程中正负样本比例严重失衡,可能需要特殊处理(如 Focal Loss in RetinaNet, OHEM)。
  • 计算冗余: 大量的锚框会产生大量的预测,增加了计算负担,尤其是在匹配和NMS阶段。
  • 复杂性: 锚框的匹配逻辑、IoU计算等增加了模型的复杂性。
  • 对小物体或极端形状物体可能不够友好: 预设的锚框可能无法很好地匹配非常小或形状非常特殊的物体,除非锚框设计得非常细致。

5. 经典模型:

  • R-CNN 系列: R-CNN, Fast R-CNN, Faster R-CNN (引入了 RPN,即区域提议网络,RPN 本身就是一种 anchor-based 的提议生成器)
  • SSD (Single Shot MultiBox Detector): 在多个特征图层级上使用不同尺度和宽高比的默认框(default boxes,即 anchors)。
  • YOLO 系列: YOLOv2, YOLOv3, YOLOv4, YOLOv5 (及后续版本如YOLOv7, YOLOv8, YOLOv9的部分模式) 都使用了锚框机制。
  • RetinaNet: 引入 Focal Loss 来解决正负样本不平衡问题,并使用 FPN 结合锚框。

二、Anchor-free (无锚框的) 方法

1. 核心思想:
Anchor-free 方法不依赖预设的锚框,而是尝试以更直接的方式定位物体。它们通常将目标检测问题转化为对关键点(如角点、中心点)的定位,或者对物体边界的直接回归。

2. 主要流派及工作流程:

Anchor-free 方法有很多不同的实现思路,主要可以分为几类:

  • (a) 基于关键点 (Keypoint-based) 的方法:
    • 思路: 将物体表示为一组关键点,如左上角和右下角点 (CornerNet),或物体的中心点和一组极点 (ExtremeNet),或中心点、左上角、右下角点 (CenterNet的早期版本)。
    • 工作流程 (以 CornerNet 为例):
      1. 模型预测两个热力图 (heatmap),一个表示所有物体左上角点的位置,另一个表示所有物体右下角点的位置。
      2. 模型还预测一个嵌入向量 (embedding vector) 给每个检测到的角点,如果一对左上角点和右下角点属于同一个物体,它们的嵌入向量会比较接近。
      3. 通过匹配嵌入向量来组合角点对,形成边界框。
      4. 可能还会预测偏移量来微调角点位置。
    • 代表模型: CornerNet, ExtremeNet, CenterNet (部分版本)。
  • (b) 基于中心/像素点 (Center-based / Point-based) 的方法:
    • 思路: 将特征图上的每个点(或某些点)视为潜在的物体中心(或物体内部的某个点),然后直接从这个点预测到物体边界的距离或物体的宽高。
    • 工作流程 (以 FCOS - Fully Convolutional One-Stage Object Detection 为例):
      1. 对于特征图上的每个位置 (x,y),如果它落在某个真实物体框内部,则将其视为正样本。
      2. 模型直接预测该位置到真实物体框四个边界的距离 (l,t,r,b),即左、上、右、下偏移量。这样,边界框可以表示为 (x−l,y−t,x+r,y+b)。
      3. 同时,模型还预测该位置的分类分数。
      4. 为了解决一个位置可能对应多个物体或低质量预测的问题,FCOS 引入了 “中心度” (centerness) 分支,用于给远离物体中心的预测点赋予较低的权重。
    • 工作流程 (以 CenterNet - Objects as Points 为例,这是另一种CenterNet):
      1. 模型预测一个关键点热力图,表示物体中心的位置。
      2. 对于每个检测到的中心点,模型直接回归该物体的宽度 (w) 和高度 (h)。
      3. 还可能回归一个小的局部偏移,以补偿下采样造成的精度损失。
    • 代表模型: FCOS, FoveaBox, CenterNet (Objects as Points), RepPoints (预测一组代表性点来描述物体,然后转换成框), YOLOX, YOLOv6/v7/v8/v9的部分模式也大量借鉴了anchor-free思想。
  • © 其他方法: 还包括一些基于密集距离回归、分割思想等演化来的方法。

3. 优点:

  • 简单性: 通常比 anchor-based 方法设计更简单,避免了复杂的锚框设计和匹配逻辑,超参数更少。
  • 灵活性和通用性: 不需要预设锚框的形状,因此更容易适应各种形状和姿态的物体,尤其是那些不规则或极端宽高比的物体。
  • 计算效率可能更高: 减少了大量锚框相关的计算和存储,NMS 的压力也可能更小(因为初始候选框可能更少或更集中)。
  • 避免与锚框相关的复杂问题: 如正负样本不平衡(虽然也存在,但处理方式可能不同)、IoU阈值选择等。

4. 缺点:

  • 召回率可能稍逊: 早期的一些 anchor-free 方法在召回率上可能不如精心设计的 anchor-based 方法,尤其是在处理高度重叠或密集场景时。
  • 标签分配策略: 如何定义正负样本(例如,FCOS 中一个点落在多个GT框内如何处理)需要精心设计,这对于性能至关重要。
  • 对模糊边界或非常小物体的处理: 可能不如 anchor-based 方法稳定,因为没有一个明确的“先验”形状指导。
  • 训练稳定性: 一些早期的 anchor-free 模型可能在训练初期不如 anchor-based 模型稳定。

5. 经典模型:

  • YOLOv1: 可以看作是 anchor-free 的早期尝试,它将图像划分为网格,每个网格直接预测边界框和类别,但每个网格只预测固定数量的框且对框的尺寸有较强约束。
  • CornerNet, ExtremeNet, CenterNet (keypoint-based)
  • FCOS, FoveaBox, ATSS (Adaptive Training Sample Selection, 一种改进的标签分配策略,可用于anchor-based和anchor-free)
  • CenterNet (Objects as Points)
  • RepPoints
  • YOLOX, DETR (DEtection TRansformer, 使用Transformer进行集合预测,也是anchor-free)
  • 近年的SOTA模型如 RT-DETR, YOLOv8, YOLOv9 等也大量采用或借鉴了anchor-free的设计理念。

三、总结与展望

特性Anchor-basedAnchor-free
核心依赖预设锚框,预测偏移和类别不依赖预设锚框,直接预测关键点或边界
设计复杂度较高 (锚框设计、匹配逻辑)较低 (通常更直接)
超参数较多 (锚框尺度、比例、IoU阈值等)较少
召回率通常较高,但依赖锚框设计早期可能稍低,现代方法已大幅改进
灵活性受限于锚框形状对物体形状更灵活
正负样本严重不平衡是常见问题标签分配是核心问题,也需处理不平衡
代表作Faster R-CNN, SSD, YOLOv3/v5, RetinaNetFCOS, CenterNet, CornerNet, YOLOX, DETR

发展趋势:

  • 两者的融合与借鉴: 现在的研究趋势是吸取两者的优点。例如,一些 anchor-free 方法通过改进标签分配策略(如 ATSS, SimOTA)来提升性能和稳定性,这些策略有时也能启发 anchor-based 方法。
  • 标签分配策略的进化: 如何更有效地为 anchor-free 方法中的“点”或“区域”分配正负标签,是提升性能的关键。动态分配、基于预测质量的分配成为研究热点。
  • 端到端检测: 以 DETR 为代表的基于 Transformer 的方法,完全抛弃了锚框和 NMS,实现了端到端的检测,是 anchor-free 思想的一个重要发展方向。
  • 追求更高的效率和简洁性: Anchor-free 方法因其简洁性而受到青睐,研究者们也在不断探索如何使其在保持高性能的同时更加高效。

总的来说,Anchor-based 方法是目标检测领域的经典范式,而 Anchor-free 方法作为一种更简洁、更直接的思路,近年来发展迅速,并在许多场景下展现出与 Anchor-based 方法相当甚至更优的性能。目前,许多SOTA(State-of-the-Art)模型都采用了Anchor-free或借鉴其核心思想的设计。选择哪种方法取决于具体的应用场景、性能要求以及对模型复杂度的容忍度。

http://www.xdnf.cn/news/4584.html

相关文章:

  • 修改图像分辨率
  • SLAM:单应矩阵,本质矩阵,基本矩阵详解和对应的c++实现
  • AtCoder 第404场初级竞赛 A~E题解
  • 【无标题】云计算运维
  • 代码随想录算法训练营第60期第二十九天打卡
  • 前端代码规范详细配置
  • CSS手动布局
  • 60页PDF | 四川电信数据湖 + 数据中台实施方案:覆盖数据能力、数据资产及数据治理的全流程建设指南
  • 从xjtu-sy数据集中看轴承故障的发展趋势与基本特征
  • 南京大学OpenHarmony技术俱乐部正式揭牌 仓颉编程语言引领生态创新
  • 5. HTML 转义字符:在网页中正确显示特殊符号
  • Linux系列:如何用perf跟踪.NET程序的mmap泄露
  • 水印落幕 7.0 | 专门用于去除图片和视频中水印的工具,支持自定义水印添加
  • 【测试开发】BUG篇 - 从理解BUG到如何处理
  • 递归element-ui el-menu 实现无限级子菜单
  • Spring 项目无法连接 MySQL:Nacos 配置误区排查与解决
  • AI——认知建模工具:ACT-R
  • #黑马点评#(二)商户查询缓存
  • 新疆地区主要灾害链总结
  • 网络编程(一)
  • seamless_communication,facebook推出的开源语音翻译项目
  • 代码随想录算法训练营 Day39 动态规划Ⅶ 打家劫舍
  • 数据可视化:php+echarts实现数据可视化(包含echart安装引入)
  • 数据压缩实现案例
  • 以pytest_addoption 为例,讲解pytest框架中钩子函数的应用
  • RAG技术体系问题的系统性总结
  • C++并发编程完全指南:从基础到实践
  • BBDM学习笔记
  • Spring Boot 中 AOP 的自动装配原理
  • C语言复习笔记--自定义类型