6 Object Detection
1. 任务定义与挑战
目标检测的任务不仅是判断图像中有什么(分类),还要确定它们在哪里(定位)。
1.1 任务定义
- 输入:单张 RGB 图像。
- 输出:一组检测到的物体 ${ (c_i, b_i) }$,其中:
- $c_i$ 是类别标签(如“猫”、“车”)。
- $b_i$ 是边界框 (Bounding Box),通常表示为 $(x, y, w, h)$,即中心坐标及宽高。
1.2 核心挑战
- 输出数量不固定:图像中可能包含 0 到任意多个物体,无法像分类任务那样输出固定维度的向量。
- 多任务学习:需要同时进行分类(离散)和回归(连续)。
- 尺度变化:物体在图像中的尺寸差异巨大。
1.3 评估指标
- IoU (Intersection over Union):交并比,用于衡量预测框与真实框 (Ground Truth) 的重叠程度。
- mAP (mean Average Precision):各类别的平均精度 (AP) 的均值,是衡量检测器性能的黄金标准。
2. 传统方法:滑动窗口 (Sliding Window)
最直观的方法是使用不同大小和长宽比的窗口在图像上滑动,将每个窗口内的图像块送入分类器。
- 缺点:计算开销巨大。绝大多数窗口都是背景,且为了覆盖不同位置和尺度,窗口数量呈指数级增长,效率极低。
3. 两阶段检测器 (Two-Stage Detectors)
这类算法将检测过程分为两步:(1) 生成可能包含物体的候选区域 (Region Proposals);(2) 对这些区域进行分类和精修。
3.1 R-CNN (Regions with CNN features)
深度学习目标检测的开山之作。
- 流程:
- 使用 Selective Search 算法在图像上提取约 2000 个候选区域 (Proposals)。
- 将每个候选区域缩放 (Warp) 到固定大小,输入 CNN 提取特征。
- 使用 SVM 进行分类,使用线性回归器微调边界框。
- 缺点:速度慢(每个框都要过一遍 CNN),训练繁琐(多阶段流水线)。
3.2 Fast R-CNN
针对 R-CNN 的速度瓶颈进行了改进。
- 核心创新:
- 特征共享:整张图像只过一次 CNN,得到特征图 (Feature Map)。
- RoI Pooling:在特征图上根据候选框的位置切取特征,并将不同尺寸的区域映射为固定尺寸的特征向量,从而可以接入全连接层。
- 多任务损失:分类和回归同时训练。
- 局限:候选区域的生成仍然依赖 CPU 上的 Selective Search 算法,成为速度瓶颈。
3.3 Faster R-CNN
引入了 RPN (Region Proposal Network),实现了真正的端到端训练。
- RPN:一个全卷积网络,用于在特征图上生成候选框。
- 锚点 (Anchors):在特征图的每个位置预设 $k$ 个不同尺度和比例的参考框。RPN 预测这些锚点是前景还是背景,以及它们的坐标偏移。
- 流程:图像 $\to$ CNN Backbone $\to$ RPN 生成 Proposals $\to$ RoI Pooling $\to$ 分类与回归。
4. 单阶段检测器 (Single-Stage Detectors)
单阶段检测器没有显式的候选区域生成步骤,直接在特征图上进行密集的分类和回归。
4.1 YOLO & SSD
- 特点:速度极快,将检测问题转化为回归问题。直接在网格上预测边界框和类别概率。
- 早期问题:精度通常低于两阶段检测器,主要受限于正负样本极端不平衡(背景框太多)。
4.2 RetinaNet 与 Focal Loss
RetinaNet 的提出缩小了单阶段与两阶段检测器的精度差距。
- FPN (Feature Pyramid Network):构建多尺度特征金字塔,利用顶层的语义信息和底层的高分辨率信息,在不同层级检测不同大小的物体。
- Focal Loss:一种动态调整权重的损失函数,降低易分类样本(背景)的权重,使模型专注于难分类样本的训练。
5. 基于 Transformer 的检测器:DETR
DETR (DEtection TRansformer) 将目标检测重新建模为集合预测 (Set Prediction) 问题,摒弃了 Anchor 和 NMS 等手工设计的组件。
5.1 架构
- CNN Backbone:提取图像特征。
- Transformer Encoder-Decoder:利用 Self-Attention 处理全局上下文。
- Object Queries:Decoder 输入一组可学习的查询向量 (Queries),每个 Query 负责预测一个物体(或“无物体”)。
5.2 二分图匹配 (Bipartite Matching)
训练时,使用匈牙利算法将 $N$ 个预测框与 $M$ 个真实框进行一对一的最优匹配(Ground Truth 不足的部分用“空物体”补齐),计算损失函数。这使得模型可以直接输出最终的检测集合,无需后处理。
6. 实例分割 (Instance Segmentation)
实例分割要求不仅框出物体,还要分割出物体的精确像素掩膜 (Mask)。
6.1 Mask R-CNN
在 Faster R-CNN 的基础上增加了一个用于预测 Mask 的分支。
- RoI Align:这是 Mask R-CNN 的核心贡献。
- 问题:传统的 RoI Pooling 存在两次量化取整操作(坐标取整),导致特征图与原图区域无法精确对齐。这对分类影响不大,但对像素级分割是致命的。
- 解决:RoI Align 取消了取整操作,使用双线性插值在浮点坐标上计算特征值,实现了像素级的精确对齐。
总结 (Summary)
- 两阶段 (Faster R-CNN):先生成框再分类,精度高,是很多任务的基准。
- 单阶段 (RetinaNet/YOLO):直接预测,速度快,Focal Loss 解决了样本不平衡问题。
- Transformer (DETR):端到端集合预测,去除了 Anchor 和 NMS,通过全局注意力机制处理物体关系。
- 实例分割 (Mask R-CNN):利用 RoI Align 解决了特征不对齐问题,实现了检测与分割的统一。