OpenMMLab AI实战营 学习笔记 DAY-- 目标检测基础知识及评估方法
Posted R-F
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenMMLab AI实战营 学习笔记 DAY-- 目标检测基础知识及评估方法相关的知识,希望对你有一定的参考价值。
本次课程,仍然是由王若晖老师进行讲解,中间的答疑部分由张子豪(B站 同济子豪兄)进行答疑讲解。课程链接,也可以直接打开哔哩哔哩,搜索OpenMMLab,在其主页可以观看。
目标检测
什么是目标检测
对给定的一张图片框出所有兴趣目标同时预测目标类别。
目标检测的不同应用,人脸识别、智慧城市、自动驾驶、下游视觉任务、人体姿态识别…
目标检测VS图像分类![](https://image.cha138.com/20230301/53187d52f91f41d7bd9fc2b72a37ea60.jpg)
滑窗
- 设定一个固定大小的窗口
- 遍历图像所有位置,所到之处用分类模型(假设已经训练好)识别窗口中的内容
- 为了检测不同大小、不同形状的物体,可以使用不同大小、长宽比的窗口扫描图片
滑窗的效率问题
考虑 1000×600 大小的图像,设定 100×100 的窗口,每滑动 20 像素分类一次。
👉 仅推理一张图片,需对 46×26≈1200 个窗口进行分类
👉 若使用不同大小的窗口,分类次数成倍增加
❌不可接受的计算成本
改进思路 1:使用启发式算法替换暴力遍历
例如 R-CNN,Fast R-CNN 中使用 Selective Search 产生提议框依赖外部算法,系统实现复杂,难以联合优化性能
改进思路 2:减少冗余计算,使用卷积网络实现密集预测目前普遍采用的方式
改进思路 1:区域提议
基于图像颜色或底层特征,找出可能含有物体
的区域,再送给神经网络识别
相比于普通滑窗,减少框的个数且保证召回率
改进思路 2:分析滑窗中的重复计算
消除滑窗中的重复计算
改进思路:用卷积一次性计算所有特征,再取出对应位置的特征完成分类。
原图滑窗 👉 重叠区域重复计算卷积 ❌
特征图滑窗 👉 重叠区域只计算一次卷积特征,与窗的个数无关 ✔️
在特征图上进行密集预测
不同特征的感受野自然形成一系列等距离分布的窗。
密集预测实际上是一种隐式的滑窗方法计算效率远高于滑窗。
目标检测的基本范式
目标检测技术的演进
基础知识
框,边界框(Bounding Box)
框泛指图像上的矩形框,边界横平竖直
描述一个框需要 4 个像素值:
- 方式1:左上右下边界坐标 𝑙,𝑡, 𝑟, 𝑏
- 方式2:中心坐标和框的长宽 𝑥, 𝑦, 𝑤, ℎ
边界框通常指紧密包围感兴趣物体的框
检测任务要求为图中出现的每个物体预测一个边界框
框的相关概念
- 区域(Region):框的同义词
- 区域提议(Region Proposal,Proposal)
指算法预测的可能包含物体的框,某种识别能力不强的算法的初步预测结果 - 感兴趣区域(Region of Interest,RoI)
当我们谈论需要进一步检测这个框中是否有物体时,通常称框为感兴趣区域 - 锚框(Anchor Box,Anchor)
图中预设的一系列基准框,类似滑窗,一些检测算法会基于锚框预测边界框
交并比 Intersection Over Union
交并比(IoU)定义为两矩形框交集面积与并集面积之比,是矩形框重合程度的衡量指标。
置信度 Confidence Score
模型认可自身预测结果的程度,通常需要为每个框预测一个置信度。
- 大部分算法取分类模型预测物体属于特定类别的概率
- 部分算法让模型独立于分类单独预测一个置信度
我们倾向认可置信度高的预测结果。
非极大值抑制 Non-Maximum Suppression
滑窗类算法通常会在物体周围给出多个相近的检测框,这些框实际指向同一物体,只需要保留其中置信度最高的。通过非极大值抑制(NMS)算法实现:
边界框回归 Bounding Box Regression
边界框编码 Bbox Coding
两阶段目标检测算法
两阶段算法概述
两阶段的检测范式最早由 R-CNN 确立,因包含区域提议和区域识别两个阶段得名。经历一些列发展到 Faster R-CNN 和 Mask R-CNN 逐渐成熟,结合比较先进的主干网络和多尺度技术可以达到比较优越的检测精度,使用广泛。
近几年(2020~)随着单阶段算法精度和速度的提高逐渐被取代。
Region-based CNN (2013)
R-CNN 的训练
R-CNN 相比于传统方法的提升
R-CNN 的问题
慢 :区域提议一般产生 2000 个框,每个框都需要送入 CNN 前传,推理一张图要几秒至几十秒。
Fast R-CNN (2014)
改进 R-CNN:减少重复计算
Faster R-CNN (2015)
Faster R-CNN = RPN + Fast R-CNN 二者共享主干网络和特征
Faster R-CNN 的训练
多尺度检测技术
多尺度检测必要性
图像中物体大小可能有很大差异 (10 px ~ 500 px)
多尺度技术出现之前,模型多基于单级特征图进行预测,通常为主干网络的倒数第二层,受限于结构(感受野)和锚框的尺寸范围,只擅长中等大小的物体。另一方面,高层特征图经过多次采样,位置信息逐层丢失,小物体检测能力较弱,定位精度较低。
图像金字塔 Image Pyramid
层次化特征
特征金字塔网络 Feature Pyramid Network (2016)
在 Faster R-CNN 模型中使用 FPN
单阶段目标检测算法
单阶段检测算法概述
单阶段算法直接通过密集预测产生检测框,相比于两阶段算法,模型结构简单、速度快,易于在设备上部署。
早期由于主干网络、多尺度技术等相关技术不成熟,单阶段算法在性能上不如两阶段算法,但因为速度和简洁的优势仍受到工业界青睐。
随着单阶段算法性能逐渐提升,成为目标检测的主流方法。
YOLO: You Only Look Once (2015)
最早的单阶段算法之一
主干网络:自行设计的 DarkNet 结构,产生 7×7×1024 维的特征图
检测头:2 层全连接层产生 7×7 组预测结果,对应图中 7×7 个空间位置上物体的类别和边界框的位置
YOLO 的分类和回归目标
将原图切分成 S×S 大小的格子,对应预测图上 S×S 个位置
如果原图上某个物体的中心位于某个格子内,则对应位置的预测值应给出物体类别和B组边界框位置
其余位置应预测为背景类别,不关心边界框预测结果
YOLO 的损失函数
YOLO 的优点和缺点
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 个边界框偏移量
RetinaNet 的性能![](https://image.cha138.com/20230301/f67079b9f9fa4a638be153f2bd57857f.jpg)
YOLO v3 (2018)
- 自定义的 DarkNet-53 主干网络和 FPN 结构,产生 1/8、1/16、1/32 降采样率的 3 级特征图
- 在每级特征图上设置 3 个尺寸的锚框,锚框尺寸通过对真值框聚类得到
- 两层卷积构成的密集预测头,在每个位置、针对每个锚框产生 80 个类别预测、4个边界框偏移量、1个 objectness 预测,每级特征图 3×(80+4+1)=255 通道的预测值
得益于相对轻巧的主干网络设计、YOLO v3 的速度远快于 RetinaNet
无锚框目标检测算法
锚框 vs 无锚框
基于锚框(Anchor-based)
• Faster R-CNN、YOLO v3 / v5、RetinaNet 都是基于锚框的检测算法
• 模型基于特征预测对应位置的锚框中是否有物体,以及精确位置相对于锚框的偏移量
• 需要手动设置锚框相关的超参数(如大小、长宽比、数量等),设置不当影响检测精度
无锚框(Anchor-free)
• 不依赖锚框,模型基于特征直接预测对应位置是否有物体,以及边界框的位置
• 边界框预测完全基于模型学习,不需要人工调整超参数
• YOLO v1 是无锚框算法,但由于提出时间较早,相关技术并不完善,性能不如基于锚框的算法
FCOS, Fully Convolutional One-Stage (2019)
FCOS 的多尺度匹配
Anchor-based 算法根据锚框和真值框的 IoU 为锚框匹配真值框。通常,锚框会匹配到同尺度的真值框,小物体由低层特征预测,大物体由高层特征图预测。
由于重叠的物体尺度通常不同,同一位置重叠的真值框会被分配到不同
的特征层,从而避免同一个位置需要预测两个物体的情形
FCOS 的预测目标
基本规则
➢ 如果某个特征(在原图上对应的位置)位于某个真值框的内部,则该特征对应正样本,应预测物体的:
• 类别概率
• 边界框相对于该中心位置的偏移量
• 中心度,用于衡量预测框的优劣
➢ 如果某个位置不在任何物体的边界框内部,对应负样本,只需预测类别为背景。
FCOS 的损失函数![](https://image.cha138.com/20230301/4cd8b36fc1c649d1891ed4f8989eb928.jpg)
CenterNet (2019)
针对 2D 检测的算法,将传统检测算法中的“以框表示物体”变成“以中心点表示物体”,将 2D 检测建模为关键点检测和额外的回归任务,一个框架可以同时覆盖 2D 检测、3D 检测 、姿态估计等一系列任务。
CenterNet 的主要流程
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)
准确率 Precision 与 召回率 Recall
真值框总数与检测算法无关,因此只需将检测结果区分为 TP 和 FP 即可计算 recall 和 precision
准确率与召回率的平衡
两种极端情况:
- 检测器将所有锚框都判断为物体:召回率≈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 曲线下的面积,作为检测器的性能衡量指标
Mean AP
分类别统计AP,并按类别平均即得到 Mean AP
Mean AP 的完整计算流程:
• 将数据集中全部图像上的检测框按预测类别分类
• 对于某一类别的所有检测框,计算 AP:
- 按置信度将该类别的所有检测框排序
- 逐一与真值框比较,判定 TP 或 FP ,并绘制 PR 曲线
- 对 PR 曲线插值,计算 AP
• 求所有类别的 AP 的平均,得到 Mean AP
部分数据集(如 COCO)还要求在不同的 IoU 阈值下计算 Mean AP,得到 AP50,AP75 等指标可衡量检测器在不同定位精度要求下的性能。
以上是关于OpenMMLab AI实战营 学习笔记 DAY-- 目标检测基础知识及评估方法的主要内容,如果未能解决你的问题,请参考以下文章