目标检测基础知识
框,边界框(Bounding Box)
框泛指图像上的矩形框,边界横平竖直
描述一个框需要4 个像素值:
- 方式1:左上右下边界坐标𝑙, 𝑡, 𝑟, 𝑏
- 方式2:中心坐标和框的长宽𝑥, 𝑦, 𝑤, ℎ
边界框通常指紧密包围感兴趣物体的框
检测任务要求为图中出现的每个物体预测一个边界框
框的相关概念
以下这些概念都指某种框,用在不同的上下文中:
- 区域(Region):框的同义词
- 区域提议(Region Proposal,Proposal)
指算法预测的可能包含物体的框,某种识别能力不强的算法的初步预测结果 - 感兴趣区域(Region of Interest,RoI)
当我们谈论需要进一步检测这个框中是否有物体时,通常称框为感兴趣区域 - 锚框(Anchor Box,Anchor)
图中预设的一系列基准框,类似滑窗,一些检测算法会基于锚框预测边界框
交并比Intersection Over Union
交并比(IoU)定义为两矩形框交集面积与并集面积之比,是矩形框重合程度的衡量指标
置信度Confidence Score
置信度(Confidence Score):模型认可自身预测结果的程度,通常需要为每个框预测一个置信度
大部分算法取分类模型预测物体属于特定类别的概率
部分算法让模型独立于分类单独预测一个置信度
我们倾向认可置信度高的预测结果
非极大值抑制Non-Maximum Suppression
滑窗类算法通常会在物体周围给出多个相近的检测框
这些框实际指向同一物体,只需要保留其中置信度最高的
删除,因为它和置信度更高框重叠
输入:检测器产生的一系列检测框𝐵 = 𝐵1, … , 𝐵𝑛 及对应的置信度
𝑠 = 𝑠1, … , 𝑠𝑛 ,IoU 阈值𝑡(通常0.7)
步骤:
- 初始化结果集𝑅 = ∅
- 重复直至𝐵 为空集
① 找出𝐵 中置信度最大的框𝐵𝑖 并加入𝑅
② 从𝐵 中删除𝐵𝑖 以及与𝐵𝑖 交并比大于𝑡 的框
输出:结果集𝑅
边界框回归Bounding Box Regression
问题
滑窗(或其他方式产生的基准框)与物体精准边界通常有偏差
处理方法
让模型在预测物体类别同时预测边界框相对于滑窗的偏移量
边界框编码Bbox Coding
边界框的绝对偏移量在数值上通常较大,不利于神经网络训练,通常需要对偏移量进行编码,作为回归
模型的预测目标
两阶段目标检测算法
两阶段算法概述
两阶段的检测范式最早由R-CNN 确立,因包含
区域提议和区域识别两个阶段得名
经历一些列发展到Faster R-CNN 和Mask RCNN
逐渐成熟
结合比较先进的主干网络和多尺度技术可以达到
比较优越的检测精度,使用广泛
近几年(2020~)随着单阶段算法精度和速度的
提高逐渐被取代
多尺度检测技术
多尺度检测必要性
图像中物体大小可能有很大差异(10 px ~ 500 px)
多尺度技术出现之前,模型多基于单级特征图进行预测,通常为主干网络的倒数第二层,受限于结构
(感受野)和锚框的尺寸范围,只擅长中等大小的物体
另一方面,高层特征图经过多次采样,位置信息逐层丢失,小物体检测能力较弱,定位精度较低
图像金字塔Image Pyramid
将图像缩放到不同大小,形成图像金字塔
检测算法在不同大小图像上即可检测出不同大小物体
优势:算法不经改动可以适应不同尺度的物体
劣势:计算成本成倍增加
可用于模型集成等不在意计算成本的情况
层次化特征
基于主干网络自身产生的多级特征图产生预测结果
由于不同层的感受大小不同,因此不同层级的特征天然适用于检测不同尺寸的物体
优势:计算成本低
劣势:低层特征抽象级别不够,预测物体比较困难
改进思路:高层次特征包含足够抽象语义信息。将
高层特征融入低层特征,补充低层特征的语义信息
特征金字塔网络Feature Pyramid Network (2016)
改进思路:高层次特征包含足够抽象语义
信息。将高层特征融入低层特征,补充低
层特征的语义信息
融合方法:特征求和
单阶段目标检测算法
单阶段检测算法概述
单阶段算法直接通过密集预测产生检测框,相比于两阶段算法,模型结构
简单、速度快,易于在设备上部署
早期由于主干网络、多尺度技术等相关技术不成熟,单阶段算法在性能上
不如两阶段算法,但因为速度和简洁的优势仍受到工业界青睐
随着单阶段算法性能逐渐提升,成为目标检测的主流方法
YOLO: You Only Look Once (2015)
最早的单阶段算法之一
主干网络:自行设计的DarkNet 结构,产生7×7×1024 维的特征图
检测头:2 层全连接层产生7×7 组预测结果,对应图中7×7 个空间位置上物体的类别和边界框的位置
YOLO 的分类和回归目标
将原图切分成S×S 大小的格子,对应预测图上S×S 个位置
如果原图上某个物体的中心位于某个格子内,则对应位置的预测值应给出物体类别和B组边界框位置
其余位置应预测为背景类别,不关心边界框预测结果
SSD: Single Shot MultiBox Detector (2016)
主干网络:使用VGG + 额外卷积层,产生11 级特征图
检测头:在6 级特征图上,使用密集预测的方法,产生所有位置、不同尺度、所有锚框的预测结果
RetinaNet (2017)
基于focal loss 的单阶段检测器
特征生成:ResNet 主干网络+ FPN 产生P3~P7 共5 级特征图,对应降采样率8~128 倍
多尺度锚框:每级特征图上设置3 种尺寸×3 种长宽比的锚框,覆盖32~813 像素尺寸
密集预测头:两分支、5 层卷积构成的检测头,针对每个锚框产生K 个二类预测以及4 个边界框偏移量
无锚框目标检测算法
锚框vs 无锚框
基于锚框(Anchor-based)
• Faster R-CNN、YOLO v3 / v5、RetinaNet 都是基于锚框的检测算法
• 模型基于特征预测对应位置的锚框中是否有物体,以及精确位置相对于锚框的偏移量
• 需要手动设置锚框相关的超参数(如大小、长宽比、数量等),设置不当影响检测精度
无锚框(Anchor-free)
• 不依赖锚框,模型基于特征直接预测对应位置是否有物体,以及边界框的位置
• 边界框预测完全基于模型学习,不需要人工调整超参数✔️
• YOLO v1 是无锚框算法,但由于提出时间较早,相关技术并不完善,性能不如基于锚框的算法
FCOS, Fully Convolutional One-Stage (2019)
特征生成:主干网络+ FPN 产生P3~P7 共5 级特征图,对应降采样率8~128 倍
密集预测头:两分支、5 层卷积构成的密集预测头,对于每个位置,预测类别、边界框位置和中心度三组
数值(与Anchor-based 有所不同)
CenterNet (2019)
针对2D 检测的算法,将传统检测算法中的“以框表示物体”变成“以中心点表示物体”,将2D 检测建模
为关键点检测和额外的回归任务,一个框架可以同时覆盖2D 检测、3D 检测、姿态估计等一系列任务
Detection Transformers
DETR (2020)
传统方法:在特征图上进行密集预测,依赖Anchor 设计、NMS 后处理等额外操作
DETR:脱离密集预测范式,将检测建模为从特征序列到框序列的翻译问题,用Transformer 模型解决
Deformable DETR (2021)
DETR 的注意力机制收敛很慢,收敛≈ 注意力机制注意到特定的位置
Deformable DETR 借鉴Deformable Conv 的方式,显示建模query 注意的位置,收敛速度更快
目标检测模型的评估方法
检测结果的正确/错误类型
正确结果(True Positive):算法检测到了某类物体(Positive),图中也确实有这个物体,检测结果正确(True)
假阳性(False Positive):算法检测到了某类物体(Positive),但图中其实没有这个物体,检测结果错误(False)
假阴性(False Negative):算法没有检测到物体(Negative),但图中其实有某类物体,检测结果错误(False)
检测到的衡量标准:对于某个检测框,图中存在同类型的真值框且与之交并比大于阈值(通常取0.5)
准确率与召回率的平衡
两种极端情况:
- 检测器将所有锚框都判断为物体:召回率≈100%,但大量背景框预测为物体,FP很高,准确率很低
- 检测器只输出确信度最高的1个检测框:以很大概率检测正确,准确率=100%,但因为大量物体被预测
为背景,FN很高,召回率很低
一个完美的检测器应该有100%召回率和100%的精度;在算法能力有限的情况下,应该平衡二者
通常做法:将检测框按置信度排序, 仅输出置信度最高的若干个框
置信度= 分类概率,或修正后的分类概率(YOLO、FCOS)
PR 曲线与AP 值
为得到阈值无关的评分,可以遍历阈值,并对Precision 和Recall 求平均
具体做法:
• 检测框按置信度排序,取前K 个框计算Precision 和
Recall
• 遍历K 从1 至全部检测框,将得到的Precision 和
Recall 值绘制在坐标系上,得到PR 曲线
• 定义Average Precision = Precision 对Recall 的平均
值,即PR 曲线下的面积,作为检测器的性能衡量指标