文章

01 目标定位(Object Localization)

01 目标定位(Object Localization)

01 目标定位(Object Localization)

🎯 一、任务定义:从图像分类到目标定位

1. 图像分类(Image Classification)

  • 输入:一张图像 $x$
  • 输出:类别标签 $y \in {1, 2, …, C}$(如:行人、汽车、摩托车、背景)
  • 模型结构:CNN → 全连接层 → Softmax
  • 输出形式:概率分布 $\hat{y} = [\hat{p}1, \hat{p}_2, \hat{p}_3, \hat{p}_4]^\top$,其中 $\sum{c=1}^4 \hat{p}_c = 1$

2. 目标定位(Object Localization)

  • 任务目标:不仅判断图像中是否有目标,还要用边界框(Bounding Box)标出其位置
  • 适用场景:图像中通常只有一个主要目标(如自动驾驶中前方车辆)
  • 输出扩展:在分类基础上,额外输出 4 个实数,表示边界框参数

关键思想:将定位问题建模为回归任务,与分类任务联合训练。


📐 二、边界框参数化表示

采用归一化坐标系统(相对于图像宽高):

  • 图像左上角为 $(0, 0)$,右下角为 $(1, 1)$
  • 边界框由以下 4 个参数定义:

    • $b_x$:边界框中心点的 x 坐标(水平方向,$0 \leq b_x \leq 1$)
    • $b_y$:边界框中心点的 y 坐标(垂直方向,$0 \leq b_y \leq 1$)
    • $b_h$:边界框的 高度(占图像高度的比例,$0 < b_h \leq 1$)
    • $b_w$:边界框的 宽度(占图像宽度的比例,$0 < b_w \leq 1$)

💡 示例:若 $b_x = 0.5, b_y = 0.7, b_h = 0.3, b_w = 0.4$,表示目标位于图像中部偏下,高度为图像 30%,宽度为 40%。


🏷️ 三、目标标签 $y$ 的向量表示

定义神经网络的真实标签(ground truth) 为一个 8 维向量:

\[y = \begin{bmatrix} p_c \\ b_x \\ b_y \\ b_h \\ b_w \\ c_1 \\ c_2 \\ c_3 \end{bmatrix}\]

其中各分量含义如下:

分量含义
$p_c$是否存在目标:$p_c = 1$ 表示存在(行人/汽车/摩托车),$p_c = 0$ 表示为背景(无目标)
$b_x, b_y, b_h, b_w$边界框参数(仅当 $p_c = 1$ 时有效)
$c_1, c_2, c_3$独热编码(one-hot) 表示类别:• 行人:$[1, 0, 0]^\top$• 汽车:$[0, 1, 0]^\top$• 摩托车:$[0, 0, 1]^\top$

⚠️ 注意:当 $p_c = 0$(背景)时,其余 7 个元素无意义,可设为任意值(通常用 ? 表示)。


🧠 四、神经网络输出结构

网络输出同样为 8 维向量:

\[\hat{y} = \begin{bmatrix} \hat{p}_c \\ \hat{b}_x \\ \hat{b}_y \\ \hat{b}_h \\ \hat{b}_w \\ \hat{c}_1 \\ \hat{c}_2 \\ \hat{c}_3 \end{bmatrix}\]
  • $\hat{p}_c$:通过 Sigmoid 激活函数 输出(因为是二分类:有/无目标)
  • $\hat{b}_x, \hat{b}_y, \hat{b}_h, \hat{b}_w$:线性输出(无激活函数),用于回归
  • $\hat{c}_1, \hat{c}_2, \hat{c}_3$:通过 Softmax 激活函数 输出(多类互斥)

🔧 实际实现中,常将分类头和定位头分开设计。


📉 五、损失函数(Loss Function)

采用条件损失:根据 $p_c$ 的值决定是否计算定位和分类损失。

总体损失函数:

\[\mathcal{L}(\hat{y}, y) = \begin{cases} (\hat{p}_c - p_c)^2 \\ + (\hat{b}_x - b_x)^2 + (\hat{b}_y - b_y)^2 \\ + (\hat{b}_h - b_h)^2 + (\hat{b}_w - b_w)^2 \\ + \sum_{i=1}^{3} (\hat{c}_i - c_i)^2, & \text{if } p_c = 1 \\ \\ (\hat{p}_c - p_c)^2, & \text{if } p_c = 0 \end{cases}\]

📌 注:课程中为简化说明使用了平方误差(MSE) ,但实际工程中更常用:

  • $p_c$:二元交叉熵(Binary Cross-Entropy)
  • 边界框:Smooth L1 LossIoU Loss
  • 类别 $c_i$:分类交叉熵(Categorical Cross-Entropy)

🔄 六、训练与推理流程

训练阶段:

  1. 输入图像 $x$
  2. 网络输出 $\hat{y} \in \mathbb{R}^8$
  3. 根据真实标签 $y$ 计算损失 $\mathcal{L}$
  4. 反向传播更新参数

推理阶段:

  1. 输入图像 $x$
  2. 得到 $\hat{y}$
  3. 若 $\hat{p}_c > \text{阈值(如 0.5)}$,则认为存在目标
  4. 使用 $(\hat{b}_x, \hat{b}_y, \hat{b}_h, \hat{b}_w)$ 绘制边界框
  5. 取 $\arg\max(\hat{c}_1, \hat{c}_2, \hat{c}_3)$ 作为预测类别

🔜 七、与后续内容的衔接

  • 目标定位目标检测(Object Detection) 的基础
  • 当图像中存在多个目标时,需引入:

    • 滑动窗口(Sliding Window)
    • 区域建议(Region Proposal)
    • 或端到端方法(如 YOLO、SSD、Faster R-CNN)
  • 本节假设单目标,为后续多目标检测做铺垫

✅ 总结要点

概念说明
任务类型分类 + 回归(联合任务)
输出维度8 维向量:$[p_c, b_x, b_y, b_h, b_w, c_1, c_2, c_3]^\top$
坐标系统归一化(0~1),以图像宽高为基准
损失设计条件损失:仅当 $p_c=1$ 时计算定位和分类损失
激活函数Sigmoid($p_c$)、线性(边界框)、Softmax(类别)
应用场景自动驾驶、机器人视觉、安防监控等

通过本节学习,你已掌握如何用单一神经网络同时完成图像分类与目标定位,这是迈向现代目标检测系统(如 YOLO)的关键一步。

本文由作者按照 CC BY 4.0 进行授权