目标检测概要
目标检测时计算机视觉中的核心任务之一.其主要任务是在图片中找到感兴趣的事物,将其使用矩形框标记出来并确定其分类.
根据核心任务我总结了一个简单的公式:
💡目标检测 = 特征提取 + 分类 + 回归
1. 目标检测
1.1 目标检测算法划分
当前目标检测的发展,算法可归纳为如下图所示:
- 传统方法: 依赖手工设计的特征在图片上进行全局匹配
- 按照stage划分: 通常划分为one-stage(一阶段)和two-stage(二阶段),主要区别是任务流程的设计和特征处理的机制.一阶段中使用单个网络进行端到端检测,二阶段检测使用双网络分布进行处理.
- 按照anchor划分: 按照是否预定义了anchor(锚框,详见2.2关键术语解释)划分.
- 按照是否采用transformer结构划分: 利用自注意力机制建模全局依赖,不再有手工设计组件(如Anchor)
1.2 目标检测算法发展
1.2.1 早期传统方法阶段(1980s~2012年)
- 基础理论和方法
- 模版匹配 : 通过预设的目标模版图像,在待检测图像中滑动对比,计算相似度.
- 特征匹配 : 提取图像局部特征,通过特征描述符匹配目标位置
- Haar
- HOG
- SIFT
- 技术局限
- 依赖手工设计的特征,泛化弱
- 计算量大
- 精度低
1.2.2 两阶段方法崛起(2012~2015年)
- 理论基础和方法
- 深度学习的突破 : AlexNet在ImageNet的夺冠,使得CNN(卷积神经网络)成为了主流的特征提取器
- R-CNN系列
- R-CNN: Selective Search生成候选框 + CNN特征提取 + SVM分类,PASCAL VOC mAP提升至58.5%,但速度慢(47秒/帧)
- Fast R-CNN:Selective Search生成候选框+CNN特征提取+ROI Pooling 共享卷积计算,大约2FPS,VOC mAP为66%
- Faster R-CNN: RPN(区域提议网络) + CNN 实现端到端训练,5FPS,VOC mAP为70%
- 技术局限
- 训练复杂
- 流程多、速度慢
1.2.3 一阶段实时检测器兴起(2016~2020年)
- 理论基础和方法
- YOLO系列
- YOLO v1 : 单阶段端到端检测,45 FPS (mAP 63.4%)
- YOLO v3: 引入多尺度预测, 优化小目标检测(mAP 68.2%)
- YOLO v8: Anchor-free 设计 + 解耦检测头, COCO中 mAP(53.9%) 速度300+FPS
- SSD : 多尺度特征图检测,兼顾速度与精度
- RetinaNet : 提出Focal Loss,解决正负样本不平衡问题
- YOLO系列
- 技术局限
- 牺牲了精度
- 对小目标的处理不足
1.2.4 多尺度优化与架构创新(2017年~至今)
- 理论基础和方法
- FPN(特征金字塔网络): 多尺度特征融合,提升小目标检测能力.
- 注意力机制:为输入的不同部分分配权重,实现信息的动态筛选.权重越高,表示该部分信息对当前任务越重要.
- DETR:首次将Transformer的编码器-解码器融入到目标检测,摒弃了手工设计的锚框和NMS后处理,对全局建模能力强
- Deformable DETR:改进计算效率,动态注意力机制适应稀疏目标.
- 技术局限
- 训练成本高,难以部署
1.3 目标检测的优化方向
- 泛化性
- 速度
- 精度
- 资源效率
2. 术语解释
2.1 核心模块
在目标检测中,Backbone、Neck、Head是模型结构的三个核心模块,它们分工协作,共同完成特征提取和任务预测.
- Backbone(骨干网络) :
- 功能 : 作为模型的基础特征提取器,负责从原始输入(如图像)中提取多层次的语义特征。
- 作用原理:
- 通过多层卷积、池化等操作,逐步提取低级特征(边缘、纹理)和高级特征(物体形状、类别语义).
- 通常采用预训练的经典卷积神经网络(如 ResNet、VGG、MobileNet),利用迁移学习加速训练并提升泛化能力
- Neck(颈部网络):
- 功能 : 连接 Backbone 和 Head 的中间模块,对 Backbone 提取的特征进行融合、增强或尺度调整,提升特征表达力.
- 核心需求
- 多尺度融合 : 图像中目标大小差异大(如小物体易漏检),需整合不同层级的特征图
- 上下文增强 : 引入注意力机制或空间金字塔,提升特征区分度
- 典型结构
- FPN(特征金字塔) : 自顶向下融合深层语义与浅层细节,提升小目标检测能力
- 注意力模块 : 聚焦关键区域,抑制无关背景
- Head :
- 功能 : 根据 Neck 处理后的特征执行具体任务预测(如分类、定位、分割),输出最终结果
- 任务适配设计
- 分类分支: 预测类别概率
- 回归分支:预测边界框坐标偏移量
2.2 关键术语
- Anchor(锚框) :在目标检测中,我们预先定义的具有不同尺度和长宽比的矩形框,在图像上滑动扫描,用以预测可能存在的目标区域。其大小会对检测精度有影响
- 边界框(Bounding Box):标记目标位置的矩形框,格式为
(左上x, 左上y, 右下x, 右下y)或(左上x, 左上y, 宽, 高) - RoI(Region of Interest):感兴趣的区域,需要进一步分类/回归的区域
- 提议框(Region Proposals) : 初步筛选的可能包含目标的区域
| 概念 | 定义 | 与锚框的关系 |
|---|---|---|
| 锚框 | 预定义的基准框,用于初始化目标位置和尺度 | 基准框本身 |
| 检测框 | 模型最终预测的目标边界框(Bounding Box) | 通过对锚框位置回归得到 |
| 提议框 | 初步筛选的可能包含目标的区域(如RPN生成的候选框) | 由锚框调整生成(如Faster R-CNN的RPN) |
| 感兴趣区域 | 需进一步分类/回归的图像区域(RoI) | 提议框的子集,输入到检测头进行细化 |
- IoU(交并比):用于描述图像中预测框和真实框的重叠程度。
- 置信度(Confidence Score): 模型对预测框内存在目标且类别正确的确信程度(范围 0~1)
- NMS(非极大值抑制):当同一个目标存在多个检测框,通过比较其置信度(即是该目标的概率,不同的目标检测模型有不同的计算方法),选择区域置信度最高的,抛弃掉那些非局部极大值的框,只保留最有代表性的框。用于消除冗余的检测结果
- 区域中我们只能找到极大值,不能找到最大值,最大值是全局视角下的
- FPN(特征金字塔):通过构建不同尺度的特征图层次结构,融合低层次的高分辨率特征和高层次的语义特征,从而更好地处理不同大小的目标,提高检测性能
- 检测头(Detection Head): 在特征图上执行分类和回归的网络层
- mAP(Mean Average Precision):目标检测中的一个评估指标,用来衡量模型的性能,越高越好。
- AP:针对每个类的评估指标,通过计算不同召回率(Recall)水平下的精确率(Precision)值,并对这些值进行积分,得到该类别的AP值
- 细节:
- mAP@0.5:IoU 阈值 0.5 下的 mAP(宽松标准)
- mAP@0.5:0.95:IoU 从 0.5 到 0.95 的平均 mAP(严格标准,COCO 主要指标)
- AR(Average Recall): 固定每张图检测框数量时的平均召回率
- AR@100:每图 100 个检测框时的召回率,反映模型查全能力上限。
- FPS(Frames Per Second): 每秒处理图像帧数,衡量实时性
- 感受野(Receptive Field):指神经网络中一个神经元可以看到的大小,比如你用一个窗口看一颗树,在一个小窗口(小感受野)前面我们能看到一片叶子,你看到的就是局部的细节。在一个大窗口(大感受野)我们能看到整棵树,你看到的就是更全局的信息,但对细节的把握就不如刚才的小窗户了
- 计算方法:
- 单层感受野为卷积核尺寸
- 多层感受野为: RFₙ = RFₙ₋₁ + (Kₙ - 1) × Sₙ₋₁
- RFₙ:第n层感受野
- Sₙ₋₁:前一层步长(Stride)的累积乘积
- Kₙ:当前层卷积核大小
- 影响感受野的因素:
- 卷积核大小
- 步长
- 空洞卷积
- 网络深度
- 计算方法:
2.3 数据格式
目标检测领域常用的数据格式主要包括 VOC(XML)、COCO(JSON) 和 YOLO(TXT) 三类。
| 维度 | VOC 格式 | COCO 格式 | YOLO 格式 |
|---|---|---|---|
| 文件结构 | 每张图对应一个 XML 文件 | 所有标注整合到单个 JSON 文件 | 每张图对应一个 TXT 文件 |
| 边界框表示 | (xmin, ymin, xmax, ymax)(绝对坐标) | (x_top, y_left, width, height)(绝对坐标) | (x_center, y_center, w, h)(归一化值) |
| 标注内容 | 类别、边界框、遮挡/截断标记、难易样本标识 | 类别、边界框、实例分割掩码、关键点、面积等 | 仅类别索引 + 归一化边界框坐标 |
| 扩展性 | 仅支持检测任务 | 支持检测、分割、关键点、描述生成等多任务 | 仅支持检测任务 |
2.3.1 COCO数据集
1. 核心特性
- 数据规模:
- 训练集:118K 张图
- 验证集:5K 张图
- 总目标数:超过 50 万个(平均每图 7.2 个目标)
- 类别:80 类(含牙刷、遥控器等细粒度物体)1
- 标注内容:
- 边界框 + 实例分割掩码 + 关键点坐标
- 目标面积、遮挡等级(
iscrowd)
2. 适用场景
- 复杂环境检测:图像来源多样(街景、室内、自然场景),包含 40% 小目标(<32×32 像素)和密集遮挡
- 多任务学习:支持检测、分割、姿态估计等任务的联合训练
- 工业级模型预训练:因数据量大、泛化性强,成为 ResNet、YOLOv5 等模型的基准预训练集
VOC数据集
1. 核心特性
- 数据规模:
- VOC2007:9,963 张图,24,640 个目标
- VOC2012:23,080 张图,54,900 个目标
- 类别:20 类日常物体(如人、车、猫、电视)
- 标注内容:
- 边界框坐标 + 类别名称
- 遮挡标记(
truncated)、难易样本标识(difficult)
2. 适用场景
- 轻量级模型验证:数据量小、标注简单,适合算法快速原型验证(如 YOLOv1、Faster R-CNN 的早期测试)
- 教学用途:结构清晰,便于初学者理解目标检测流程
3. 局限性
- 场景单一:图像多为摆拍或简单背景,目标遮挡少、分布均匀
- 任务扩展弱:不支持分割或关键点等高级任务
好的,现在我们就介绍完了目标检测的大体框架,回顾一下,我们了解了目标检测的算法分类;目标检测传统方法到两阶段再到一阶段和transform的迭代过程;目标检测中的主要术语和常用的数据集。可以说我们目前对目标检测有了一个整体的了解了。
接下来 我们将会深入算法,下一篇我们会详解R-CNN系列算法,带你了解两阶段目标检测的进化过程,敬请期待。
文章首发gzh【破茧plan】,欢迎关注。