AI知识分享AI知识分享
✿导航
  • 人工智能
  • 神经网络
  • 机器学习
  • 深度学习
  • 强化学习
  • 自然语言处理
  • 计算机视觉
  • 大模型基础
  • 动手学深度学习
  • 理论理解
  • 工程实践
  • 应用开发
  • AI For Everyone
  • AIGC_2024大会
  • AIGC_2025大会
  • Transformer
  • Pytorch
  • HuggingFace
  • 蒸馏
  • RAG
  • 目标检测
  • MCP
  • 概念
  • 意图识别
  • 工具
✿导航
  • 人工智能
  • 神经网络
  • 机器学习
  • 深度学习
  • 强化学习
  • 自然语言处理
  • 计算机视觉
  • 大模型基础
  • 动手学深度学习
  • 理论理解
  • 工程实践
  • 应用开发
  • AI For Everyone
  • AIGC_2024大会
  • AIGC_2025大会
  • Transformer
  • Pytorch
  • HuggingFace
  • 蒸馏
  • RAG
  • 目标检测
  • MCP
  • 概念
  • 意图识别
  • 工具
  • 大模型基础

    • 语言模型基础

      • 概述
      • 基于统计方法的语言模型
      • 基于神经网络的语言模型
      • 语言模型的采样方法
      • 语言模型的评测
    • 大语言模型架构

      • 概述
      • 主流模型架构
      • Encoder-only
      • Encoder-Decoder
      • Decoder-only
      • 非Transformer 架构
    • Prompt工程

      • 工程简介
      • 上下文学习
      • 思维链
      • 技巧
    • 参数高效微调

      • 概述
      • 参数附加方法
      • 参数选择方法
      • 低秩适配方法
      • 实践与应用
    • 模型编辑

      • 简介
      • 方法
      • 附加参数法
      • 定位编辑法
    • RAG

      • 基础
      • 架构
      • 知识检索
      • 生成增强
  • 动手学深度学习

    • 深度学习基础

      • 引言
      • 数据操作
      • 数据预处理
      • 数学知识(线代、矩阵计算、求导)
      • 线性回归
      • 基础优化方法
      • Softmax回归
      • 感知机
      • 模型选择
      • 过拟合和欠拟合
      • 环境和分布偏移
      • 权重衰减
      • Dropout
      • 数值稳定性
    • 卷积神经网络

      • 模型基本操作
      • 从全连接层到卷积
      • 填充和步长
      • 多个输入和输出通道
      • 池化层
      • LeNet
      • AlexNet
      • VGG
      • NiN网络
      • GoogleNet
      • 批量归一化
      • ResNet
    • 计算机视觉

      • 图像增广
      • 微调
      • 目标检测
      • 锚框
      • 区域卷积神经网络
      • 单发多框检测
      • 一次看完
      • 语义分割
      • 转置卷积
      • 全连接卷积神经网络
      • 样式迁移
    • 循环神经网络

      • 序列模型
      • 语言模型
      • 循环神经网络
      • 序列到序列学习
      • 搜索策略
    • 注意力机制

      • 优化算法

目标检测

概念

目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。

计算机视觉中关于图像识别有四大类任务:

(1)分类-Classification:给定一张图片或一段视频判断里面包含什么类别的目标。

(2)定位-Location:定位出这个目标的的位置。

(3)检测-Detection:定位出这个目标的位置并且知道目标物是什么。

(4)分割-Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每一个像素属于哪个目标物或场景”的问题。

image-20260314192821087

Anchor Boxes(锚框)

在目标检测任务中,需要预测图像中物体的位置(用边界框表示,即(x, y, w, h))和类别。

核心问题:对于一张图像,我们不知道物体会出现多少个、出现在哪里、是什么形状。网络如何从“无结构”的像素输出“结构化”的边界框预测?

核心思想:

  1. 预先在图像的每个位置(特征图(Feature Map)上的点)定义一系列具有不同大小和宽高比的“参考框”(即锚框)。
  2. 然后,网络的任务不再是“凭空”预测一个框,而是 “基于这些锚框,预测其微调偏移量和类别”。

这本质上将“回归一个任意框”的问题,转换为了 “对参考框进行分类和精细调整” 的问题,极大地简化了学习难度。

解决的问题:

  1. 尺度与形状多样性:不同物体大小、形状各异,锚框提供了多种预设模板。
  2. 多物体检测:一个位置可以放置多个不同形状的锚框,从而覆盖多个重叠的物体。
  3. 训练稳定性:直接回归框的绝对坐标值可能导致梯度不稳定,而回归相对偏移量(相对于锚框)的数值范围更小、更容易学习。

锚框的生成原理

通常在特征图(Feature Map)的每个像素点上生成。

特征图的生成过程

  1. 输入:一张 640×640 的“无结构”像素图。
  2. 特征提取:CNN 将其压缩为 20×20 的特征图(假设 Stride=32)。此时数据变成了 20×20×C的结构化张量。
  3. 定义位置:我们将这 20×20 个点视为“预测中心”。
    1. 计算公式:
      • xcenter=(j+0.5)×S x_{center} = (j + 0.5) \times S xcenter​=(j+0.5)×S

      • ycenter=(i+0.5)×S y_{center} = (i + 0.5) \times S ycenter​=(i+0.5)×S

    2. 点 (0,0) 对应原图中心约 (16,16) 。
    3. 点 (19,19)对应原图中心约 (624,624) 。
    4. 注意:原图四个角最边缘的像素(0-15, 625-639 区域)没有直接对应的独立中心点,它们的特征被融合进了最近的中心点中。
  4. 生成锚框:在每个中心点上,放置 9 个预设好的框(k = 尺度数 × 宽高比数,3 种大小 × 3 种比例)。全图共 20×20×9=3600 个锚框。
    1. 尺度:锚框的大小。例如,[32, 64, 128] 像素(对应原始图像尺寸)。
    2. 宽高比:锚框的宽度和高度的比例。例如,[1:1, 2:1, 1:2] 通常写作 [1.0, 2.0, 0.5]。
    3. 锚框的宽 w 和高 h 的计算通常为(以某个尺度 s 和宽高比 r 为例):
      1. w = s * sqrt(r)
      2. h = s / sqrt(r)
      3. 例如,尺度 s=64, 宽高比 r=2,则 w = 64 * 1.414 ≈ 90.5, h = 64 / 1.414 ≈ 45.2。
  5. 网络预测:
    • 网络不再预测“框在哪里”,而是针对这 3600 个已知的框,预测两个值:
      1. 分类分数:这个框里是猫、狗还是背景?
      2. 回归偏移量: (Δx,Δy,Δw,Δh),即“为了让这个锚框完美包住物体,我需要把它向左移多少、放大多少?”
  6. 输出:将偏移量应用到锚框上,得到最终的边界框。

锚框如何工作

训练阶段

训练的核心是 “匹配策略” 和 “监督信号的构建”。

  1. 正负样本分配:

    • 正样本:通常,一个锚框如果与任意真实框的 IoU(交并比) 大于一个高阈值(如 0.7),则标记为正样本。
      • 或者,对于每个真实框,与其 IoU 最大的锚框也标记为正样本(确保每个物体至少有一个锚框负责)。
    • 负样本:与所有真实框的 IoU 都小于一个低阈值(如 0.3)的锚框,标记为负样本(背景)。
    • 忽略样本:IoU 介于高低阈值之间的锚框通常不参与训练,以避免模糊样本。
  2. 监督信号的构建:

    • 分类任务:
      • 对于正样本,其类别标签是与之匹配的真实框的类别;
      • 对于负样本,其类别标签是背景(通常记为 0)。
    • 回归任务:仅对正样本进行边界框回归。网络不是直接预测框的绝对坐标,而是预测 “从锚框变换到匹配的真实框所需的微调偏移量”。这通常包括四个值:
      • tx = (gx - ax) / aw (中心点 x 坐标的平移,归一化)
      • ty = (gy - ay) / ah (中心点 y 坐标的平移,归一化)
      • tw = log(gw / aw) (宽度缩放的对数变换)
      • th = log(gh / ah) (高度缩放的对数变换)
      • 其中 (ax, ay, aw, ah) 是锚框的中心坐标和宽高,(gx, gy, gw, gh) 是匹配的真实框的中心坐标和宽高。

预测阶段

  1. 生成预测:网络为每个锚框输出两个部分:
    • 分类得分:一个 (C+1) 维向量(C 个物体类 + 背景),表示属于每个类别的概率。
    • 边界框回归偏移量:一个 4 维向量 (tx, ty, tw, th)。
  2. 解码:使用与训练时相同的公式的逆运算,将预测的偏移量应用于对应的锚框,得到预测框在原始图像中的坐标:
    • px = aw * tx + ax
    • py = ah * ty + ay
    • pw = aw * exp(tw)
    • ph = ah * exp(th)
  3. 后处理:
    • 非极大值抑制(NMS):由于成千上万个锚框会产生大量重叠的预测框,NMS 会过滤掉那些与得分最高的预测框重叠度高(IoU 大)且得分较低的框,只保留最简洁、最准确的预测结果。

总结

Anchor Boxes 是一种将先验知识注入目标检测网络的强大技术。

  • 它通过提供一组预设的参考框,将复杂的检测问题分解为对每个参考框的“分类(是哪种物体/背景)”和“微调(如何调整得更准)”两个相对简单的子问题,奠定了两阶段和许多单阶段检测器的基础。
最近更新: 2026/3/17 22:37
Contributors: klc407073648
Prev
微调
Next
锚框