# 第 12 章 目标检测

# 本章概括

本章介绍目标检测任务、评价指标、数据集和典型检测模型。内容包括 Precision-Recall、AP/mAP、PASCAL VOC、COCO、R-CNN 系列、YOLO、Anchor Based/Anchor Free、Faster R-CNN、Mask R-CNN、DETR 和 Mask2Former。重点是理解分类与定位同时完成的检测框架。

# 概述

目标检测需要同时回答“目标在哪里”和“目标是什么”。输出通常包含类别标签、置信度和边界框坐标。

边界框常用 (x,y,w,h)(x,y,w,h)(x1,y1,x2,y2)(x_1,y_1,x_2,y_2) 表示。检测模型需要处理多尺度目标、遮挡、密集目标和背景干扰。

# 目标检测效果评估

IoU 衡量预测框与真实框的重叠程度:

IoU=BpBgtBpBgt\operatorname{IoU}=\frac{B_p\cap B_{gt}}{B_p\cup B_{gt}}

BpB_p 是预测框,BgtB_{gt} 是真实框。IoU 越高,定位越准确。

Precision 和 Recall 为:

Precision=TPTP+FP,Recall=TPTP+FN\operatorname{Precision}=\frac{TP}{TP+FP},\qquad \operatorname{Recall}=\frac{TP}{TP+FN}

Precision 表示预测为正的结果中有多少是真的,Recall 表示真实目标中有多少被检测出来。

# 计算 Precision-Recall 曲线

按置信度从高到低排序预测框,逐步改变阈值,可得到一系列 Precision 和 Recall 点。阈值高时误检少但漏检多;阈值低时召回高但误检增加。

# AP 与 mAP

AP 是 Precision-Recall 曲线下的面积。PASCAL VOC 早期使用 11 点插值:

AP=111r{0,0.1,,1}pinterp(r)AP=\frac{1}{11}\sum_{r\in\{0,0.1,\cdots,1\}}p_{interp}(r)

mAP 是多个类别 AP 的平均值:

mAP=1Cc=1CAPcmAP=\frac{1}{C}\sum_{c=1}^{C}AP_c

COCO 常用 mAP@0.5:0.95mAP@0.5:0.95,在 IoU 从 0.5 到 0.95 的多个阈值上求平均,比单一 mAP@0.5mAP@0.5 更严格。

# 数据集

# PASCAL VOC

VOC 是经典目标检测数据集,类别数较少,常用于早期检测算法评估。

# COCO

COCO 类别更多、场景更复杂,包含大量小目标和实例分割标注,因此更能反映实际检测难度。

# Two-stage 检测

Two-stage 方法先生成候选区域,再对候选区域分类和回归。代表方法包括 R-CNN、Fast R-CNN 和 Faster R-CNN。

# R-CNN 系列

R-CNN 使用选择性搜索生成候选框,再逐个提取 CNN 特征,速度较慢。Fast R-CNN 先对整图提取特征,再对 ROI 分类和回归。Faster R-CNN 引入 RPN 自动生成候选框,大幅提升速度。

RPN 对每个 anchor 预测目标置信度和边界框偏移。若输入图像经 backbone 下采样 16 倍,800×600800\times600 图像得到约 50×3850\times38 特征图,每点设置 9 个 anchor,则 anchor 数为:

50×38×9=1710050\times38\times9=17100

anchor 数量多可覆盖多尺度目标,但也带来较高计算和正负样本不平衡问题。

# One-stage 检测

One-stage 方法直接在特征图上预测类别和边界框,速度通常更快。代表方法包括 YOLO、SSD 和 RetinaNet。

# YOLO

YOLO 将检测视为单次回归问题,直接输出边界框、类别和置信度。它速度快,适合实时检测;早期版本对小目标和密集目标较弱,后续版本通过多尺度特征和更强 backbone 改进。

# Anchor Based 与 Anchor Free

Anchor based 方法在特征图每个位置预设多个 anchor,再预测偏移量。Anchor free 方法直接预测目标中心、关键点或边界距离,减少 anchor 设计。

例如 80×8080\times80 特征图每点 3 个 anchor,会产生:

3×80×80=192003\times80\times80=19200

若使用 anchor free,每个位置只预测一次,候选数为:

80×80=640080\times80=6400

这降低了预测框数量和后处理压力。

# Mask R-CNN

Mask R-CNN 在 Faster R-CNN 基础上增加 mask 分支,用于实例分割。它同时输出类别、边界框和目标掩膜。ROIAlign 用于解决 RoIPool 的量化误差,提高掩膜定位精度。

# DETR

DETR 使用 Transformer 和集合预测思想,把目标检测看成固定数量 object queries 的集合预测问题。它通过匈牙利匹配建立预测与真实目标的一一对应,减少对 NMS 和 anchor 设计的依赖。

# Mask2Former

Mask2Former 将实例分割、语义分割和全景分割统一为 mask classification 问题。它用 query 预测 mask 和类别,适合多种分割任务。

# 图示说明

检测模型结构图通常展示 backbone、neck 和 head:backbone 提取特征,neck 融合多尺度信息,head 输出类别和位置。对比图中,两阶段方法更重视候选区域质量,单阶段方法更强调速度。