网站访问速度分析,企业品牌推广,如何在电商上购物网站,媒体广告OpenMMlab AI实战营第四期培训 OpenMMlab实战营第四次课2023.2.6学习参考一、什么是目标检测1.目标检测下游视觉任务2.图像分类 v.s. 目标检测 二、目标检测实现1.滑窗 Sliding Window2.滑窗的效率问题3.改进思路#xff08;1#xff09;消除滑窗中的重复计算#xff08;21消除滑窗中的重复计算2在特征图上进行密集预测3目标检测的基本范式 4.目标检测技术的演进 三、基础知识1.框边界框Bounding Box1定义2常见概念3交并比 Intersection Over Unio4置信度 Confidence Score5非极大值抑制 Non-Maximum Suppression6边界框回归 Bounding Box Regression7边界框编码 Bbox Coding 四、两阶段目标检测算法1.两阶段算法的概述2.Region-based CNN (2013)1R-CNN思路2R-CNN训练3R-CNN 的问题 3.Fast R-CNN (2014)1Fast R-CNN思路2RoI Pooling3RoI Align4Fast R-CNN 的训练 3.朴素方法的局限1锚框 Anchor 4.Faster R-CNN (2015)1Faster R-CNN (2015)思路2Faster R-CNN (2015)训练 5.两阶段方法的发展与演进 (2013~2017) 五、多尺度检测技术1.多尺度检测技术的提出2.图像金字塔 Image Pyramid3.层次化特征4.特征金字塔网络 Feature Pyramid Network (2016)5.在 Faster R-CNN 模型中使用 FPN 六、单阶段目标检测算法1.单阶段算法的概述2.**YOLO: You Only Look Once (2015)**1YOLO(2015)思想2优缺点 3.**SSD: Single Shot MultiBox Detector (2016)**1SSD思想2SSD的损失函数3SSD正负样本不均衡问题4解决样本不均衡问题5Focal Loss 4.RetinaNet(2017) 七、无锚框目标检测算法1.锚框 v.s. 无锚框2.FCOS, Fully Convolutional One-Stage (2019)3.CenterNet (2019) 八、Detection Transformers1.DETR20202.Deformable DETR (2021) 九、目标检测模型的评估方法1.检测结果的正确/错误类型2.准确率 Precision 与 召回率 Recall3.PR 曲线 与 AP 值 子豪兄的补充1.目标检测算法的改进思路 OpenMMlab实战营
第四次课2023.2.6
此次实战营的积分规则介绍 学习参考
笔记建议结合ppt来学习使用ppt中对应知识可以参照笔记的标题进行查看。
pptlesson4_ppt
b站回放OpenMMLab AI 实战营
往期笔记笔记回顾
相关学习推荐 同济子豪兄大佬子豪兄b站主页 OpenMMlab主页OpenMMla主页 OpenMMlab Github仓库链接Github OpenMMlab MMDetection Github仓库链接Github MMDetection OpenMMlab 此次AI实战营的仓库AI实战营github
一、什么是目标检测
与分类问题不同目标检测的目标是在检测图像中物体类别的同时用矩形框框出所有感兴趣的物体。
例如
相机中的人脸拍照识别就需要先把人脸识别出来智慧城市垃圾检测、违章停车检测、危险行为检测等等自动驾驶环境感知、路线规划与控制
1.目标检测下游视觉任务
目标检测的一些具体的下游任务例如
两阶段光学字符识别算法 首先检测出文字出现的区域识别区域中的文子 两阶段人体姿态估计算法 人体检测把图像中的人框出来单人姿态估计具体分析每个人的姿态是什么样的
2.图像分类 v.s. 目标检测
我们从下表所示的不同点与相同点的角度来比较图像分类与目标检测
图像分类目标检测通常只有一个物体物体数量不固定不同点通常位于图像中央物体位置不固定通产占据主要面积物体大小不固定相同点需要算法“理解”图像的内容即深度神经网络实现需要算法“理解”图像的内容即深度神经网络实现
二、目标检测实现
1.滑窗 Sliding Window
首先设定一个固定大小的窗口其次遍历图像所有位置所到之处使用已经训练好的分类模型识别窗口的内容为了检测不同大小、不同形状的物体可以使用不同大小、长宽比的窗口来扫描图片
也就是下图所示的我们通过窗口获取图像中一个区域的内容然后将该区域的图像传入一个例如卷积神经网络去预测里面是什么东西下图所示的窗口中没有任何物体所有返回类别**“背景”**。随着窗口的滑动我们的预测类别会有所不同。 2.滑窗的效率问题
计算成本过于大如下图所示 这1200个窗口都需要分别放入神经网络中去进行前向预测所以计算量非常大。
3.改进思路
使用启发式算法替换暴力遍历 例如 R-CNNFast R-CNN 中使用 Selective Search 产生提议框依赖外部算法系统实现复杂难以联合优化性能 减少冗余计算使用卷积网络实现密集预测 目前普遍采用的方式
基于第二种改进的思路我们可以做这样的分析如果两个窗口之间有重合的部分能否设计一些算法使其避免计算重复部分。
1消除滑窗中的重复计算
思路用卷积一次性计算所有特征再取出对应位置的特征完成分类
解释
首先使用两层的卷积层提取出整张图片的特征图然后窗口扫到那一部分就从第二层的卷积层中取出相应区域的特征图后续实现分类任务效果就是可以避免一些重叠区域重复计算特征提前一次性全算好随用随取 原图滑窗 重叠区域重复计算卷积 ❌特征图滑窗 重叠区域只计算一次卷积特征与窗的个数无关 ✔️ 2在特征图上进行密集预测
思路把特征图中某一个位置的特征取出来由不同卷积核基于同一个感受野计算出来随着卷积核的移动卷积操作由于步长stride的存在我们的原图会在卷积核的平移过程中自然形成一系列等距离分布的窗。不同的窗产生了不同的特征我们将不同的窗卷积之后产生的特征放入线性分类器去生产一个C1维的概率向量来完成分类1的原因是考虑区域中可能没有物体即背景
解释在上面通过卷积操作实现的隐式的滑窗的基础上通过1x1的卷积实现维度变换最终得到一个C1维的概率图使得计算效率远高于滑窗的一般实现。 3目标检测的基本范式
两阶段方法 基于区域的方法以某种方式产生窗再基于窗口内的特征进行预测 单价段方法 在特征图上基于单点特征实现密集预测隐式的滑窗
其中用于将原图计算出特征图的部分称为主干网络Backbone从特征图计算特定区域滑窗区域的部分称为检测头Head。 4.目标检测技术的演进
直接上图
这里子豪兄有推荐yolov5是已经经过开源检测的模型所以yolo系列推荐使用v5 三、基础知识
1.框边界框Bounding Box
1定义
框泛指图像上的矩形框边界横平竖直
描述一个框需要 4 个像素值 方式1左上右下边界坐标 (,, , ) 方式2中心坐标和框的长宽(, , , ℎ)
边界框通常指紧密包围感兴趣物体的框框的边界和图像平行除非有一些特殊的旋转框
检测任务要求为图中出现的每个物体预测一个边界框 2常见概念
以下这些概念都指某种框用在不同的上下文中 区域Region框的同义词 区域提议Region ProposalProposal指算法预测的可能包含物体的框某种识别能力不强的算法的初步预测结果 感兴趣区域Region of InterestRoI当我们谈论需要进一步检测这个框中是否有物体时通常称框为感兴趣区域 锚框Anchor BoxAnchor图中预设的一系列基准框类似滑窗一些检测算法会基于锚框预测边界框
3交并比 Intersection Over Unio
交并比IoU两矩形框交集面积与并集面积之比是矩形框重合程度的衡量指标
交并比∈[0, 1] 4置信度 Confidence Score
置信度Confidence Score模型认可自身预测结果的程度通常需要为每个框预测一个置信度 大部分算法取分类模型预测物体属于特定类别的概率 部分算法让模型独立于分类单独预测一个置信度
我们倾向认可置信度高的预测结果 5非极大值抑制 Non-Maximum Suppression
滑窗类算法通常会在物体周围给出多个相近的检测框这些框实际指向同一物体只需要保留其中置信度最高的
通过非极大值抑制NMS算法实现
输入检测器产生的一系列检测框 {1, … , }及对应的置信度 {1, … , } IoU 阈值 通常0.7
步骤 初始化结果集 ∅ 重复直至 为空集 找出 中置信度最大的框 并加入 从 中删除 以及与 交并比大于 的框
输出结果集 6边界框回归 Bounding Box Regression
问题
滑窗或其他方式产生的基准框与物体精准边界回归问题通常有偏差
处理方法
让模型在预测物体类别同时预测边界框相对于滑窗的偏移量通常采用多任务学习
同时对于提取的滑窗区域内的图像提取特征后进行分类任务和回归任务然后将两个损失同时处理也许求和然后用于反向传播梯度下降。 7边界框编码 Bbox Coding
直观上理解 回归任务相较于分类任务比较难 边界框的绝对偏移量在数值上通常较大不利于神经网络训练通常需要对偏移量进行编码作为回归模型的预测目标
通常的方法
通常进行一些归一化或者对数尺度的归一化让计算机使用编码后的结果归一化后的结果进行计算效率比较高解码的时候再逆向使用编码的公式求回去绘制编码框 四、两阶段目标检测算法
1.两阶段算法的概述
直接上图
2.Region-based CNN (2013)
1R-CNN思路
**一阶段**产生提议框 使用传统视觉算法推测可能包含物体的框约2000个 ✔️不漏真正包含物体的框通常会被选中 ❌不准大部分大部分提议框并不包含物体
**二阶段**识别提议框 将提议框内的图像缩放至固定大小原始论文 227×227 送入卷积网络进一步识别得到准确结果 2R-CNN训练
直接上图 3R-CNN 的问题
慢区域提议一般产生 2000 个框每个框都需要送入 CNN 前传推理一张图要几秒至几十秒 3.Fast R-CNN (2014)
➢ 改进 R-CNN减少重复计算✔️
1Fast R-CNN思路
**一阶段**产生提议框
仍然依赖传统CV方法
**二阶段**识别提议框
卷积层应用于全图一次性计算所有位置的图像特征剪裁提议框对应的特征图送入全连接层计算分类 问题提议框大小不同需要处理成固定尺寸才能送入全连接层
2RoI Pooling
目标将不同尺寸的提议框处理成相同尺寸使之可以送入后续的全连接层计算分类和回归 算法 将提议框切分成固定数目的格子上图中 2×2实际常用 7×7对齐ResNet等经典结构 如果格子边界不在整数坐标则膨胀至整数坐标 在每个格子内部池化得到固定尺寸的输出特征图
3RoI Align
RoI Align 比 RoI Pooling 在位置上更精细 将提议区域切成固定数目的格子例如 7×7 在每个格子中均匀选取若干采样点如 2×24 个 通过插值方法得到每个采样点处的精确特征 所有采样点做 Pooling 得到输出结果 4Fast R-CNN 的训练
➢ 多任务学习、端到端训练
直接上图 3.朴素方法的局限
上面提到的都是基于滑窗思想的朴素方法最后都是一个二分类器这会带来的局限就是当我们的图像 图中有不同大小的物体区域提议算法需要产生不同尺寸的提议框以适应不同尺寸的物体 物体可能有一定程度重合区域提议算法要有能力在同一位置产生不同尺寸的提议框以适应重合的情况框中既有人也有摩托车那么识别为哪一类呢
下面两张图分别对应了两个问题 1锚框 Anchor
在原图上设置不同尺寸的基准框称为锚框基于特征独立预测每个锚框中是否包含物体 可以生成不同尺寸的提议框 可以在同一位置生成多个提议框覆盖不同物体 4.Faster R-CNN (2015)
1Faster R-CNN (2015)思路
➢ Faster R-CNN RPN Fast R-CNN 二者共享主干网络和特征
直接上图 2Faster R-CNN (2015)训练
➢ 联合学习 RPN 与 Fast R-CNN
注为锚框和预测框产生分类和回归真值的方法与 R-CNN相同即基于 IoU 为锚框和预测框匹配真值框
直接上图 5.两阶段方法的发展与演进 (2013~2017)
直接上图 五、多尺度检测技术
1.多尺度检测技术的提出
图像中物体大小可能有很大差异 (10 px ~ 500 px)
多尺度技术出现之前模型多基于单级特征图进行预测通常为主干网络的倒数第二层受限于结构感受野和锚框的尺寸范围只擅长中等大小的物体。另一方面高层特征图经过多次采样位置信息逐层丢失小物体检测能力较弱定位精度较低。
2.图像金字塔 Image Pyramid
由于卷积操作会使得图像逐渐变小卷积核所包含的信息越来越全局。所以提取的特征会越来越具体越来越具有语义特征。
而图像金字塔就是基于卷积操作的这种特性提出来的 将图像缩放到不同大小形成图像金字塔 检测算法在不同大小图像上即可检测出不同大小物体 优势算法不经改动可以适应不同尺度的物体 劣势计算成本成倍增加 可用于模型集成等不在意计算成本的情况 3.层次化特征
基于主干网络自身产生的多级特征图产生预测结果
由于不同层的感受大小不同因此不同层级的特征天然适用于检测不同尺寸的物体 优势计算成本低 劣势低层特征抽象级别不够预测物体比较困难 **改进思路**高层次特征包含足够抽象语义信息。将 高层特征融入低层特征补充低层特征的语义信息 4.特征金字塔网络 Feature Pyramid Network (2016) 改进思路高层次特征包含足够抽象语义信息。将高层特征融入低层特征补充低层特征的语义信息 融合方法特征求和 5.在 Faster R-CNN 模型中使用 FPN
直接上图 六、单阶段目标检测算法
1.单阶段算法的概述
直接上图在单阶段的目标检测算法中最成功的就是YOLO。 2.YOLO: You Only Look Once (2015)
1YOLO(2015)思想
最早的单阶段算法之一 主干网络自行设计的 DarkNet 结构产生 7×7×1024 维的特征图 检测头2 层全连接层产生 7×7 组预测结果对应图中 7×7 个空间位置上物体的类别和边界框的位置 最终不只是判断出该区域是否有物体而且能够预测出是什么物体 2优缺点 优点 **快**在Pascal VOC 数据集上使用自己设计的 DarkNet 结构可以达到实时速度使用相同的 VGG可以达到 3 倍于 Faster R-CNN 的速度 缺点 由于每个格子只能预测 1 个物体因此对重叠物体、尤其是大量重叠的小物体容易产生漏检直接回归边界框有难度回归误差较大YOLO v2 开始使用锚框对于小目标的检测效果可能比较差
3.SSD: Single Shot MultiBox Detector (2016)
1SSD思想
同期的另一个单阶段目标检测算法 主干网络使用 VGG 额外卷积层产生 11 级特征图 检测头在 6 级特征图上使用密集预测的方法产生所有位置、不同尺度、所有锚框的预测结果 2SSD的损失函数
训练 为 8732 个锚框上的分类和回归预测计算损失
为每个预测值设定分类、回归设定真值比对锚框和真值框的 IoU 为每个锚框设定分类、回归真值总损失 所有分类损失 所有正样本的边界框回归损失 例如只有红色的锚框预测出来了是狗那么就在这个锚框中计算狗这一类别的损失其他锚框没有预测出来狗就和背景这一类别计算损失最后所有损失求和计算梯度更新参数。
3SSD正负样本不均衡问题
单阶段算法需要为每个位置的每个锚框预测一个类别训练时需要为每个预测计算分类损失。图中锚框的数量远远大于真值框数万 vs 数个大量锚框的预测真值为背景负样本 使用类别不平衡的数据训练出的分类器倾向给出背景预测导致漏检该区域应该有物体但是预测为背景。朴素的分类损失不能驱动检测器在有限的能力下达到漏检和错检之间的平衡 4解决样本不均衡问题
两阶段检测器通过区域提议拒绝了大量负样本区域检测头接收的正负样本比例并不悬殊
单阶段检测器则需要专门处理样本不均衡问题 YOLO 正负样本使用不同的权重比例不悬殊时可以这样用 SSD 采用困难负样本挖掘Hard Negative Mining策略 即选取分类损失最大的部分负样本困难负样本计入损失正负样本比例在 1:3 困难样本 分类器难以分类正确的样本 loss 大的样本 负样本 真值为背景的样本 困难负样本 真值为背景但被分类为前景且置信度非常高的样本可能是真值框周围但 IoU 并不高的候选框 “比较复杂、不太优雅”
5Focal Loss
由于原来分类任务的交叉熵损失函数在单阶段目标检测问题中无法起到比较好的效果所以提出了Focal Loss取得了更好的效果。 4.RetinaNet(2017)
基于 focal loss 的单阶段检测器 特征生成ResNet 主干网络 FPN 产生 P3~P7 共 5 级特征图对应降采样率 8~128 倍 多尺度锚框每级特征图上设置 3 种尺寸×3 种长宽比的锚框覆盖 32~813 像素尺寸 密集预测头两分支、5 层卷积构成的检测头针对每个锚框产生 K 个二类预测以及 4 个边界框偏移量 最终性能也是超过了Fast R-CNN的两阶段目标检测算法 之后又不断进化产生了YOLO V3~V8
七、无锚框目标检测算法
引入锚框是考虑到图像中的物体存在重叠图中的物体存在不同的大小等等。而无锚框的目标检测算法指的是我们直接基于特征去预测原图中真正的物体和我们的框中心有多少的偏移。
1.锚框 v.s. 无锚框
基于锚框Anchor-based Faster R-CNN、YOLO v3 / v5、RetinaNet 都是基于锚框的检测算法 模型基于特征预测对应位置的锚框中是否有物体以及精确位置相对于锚框的偏移量 需要手动设置锚框相关的超参数如大小、长宽比、数量等设置不当影响检测精度 ❌
无锚框Anchor-free 不依赖锚框模型基于特征直接预测对应位置是否有物体以及边界框的位置 边界框预测完全基于模型学习不需要人工调整超参数 ✔️ YOLO v1 是无锚框算法但由于提出时间较早相关技术并不完善性能不如基于锚框的算法 2.FCOS, Fully Convolutional One-Stage (2019)
由于多尺度检测技术的发展我们知道虽然图像中可能有不同大小的物体但是由于特征图随着深度的变化所表示的原图中图像的范围也是在时刻变化的所以并不一定要使用锚框来进行目标检测。 特征生成主干网络 FPN 产生 P3~P7 共 5 级特征图对应降采样率 8~128 倍 密集预测头两分支、5 层卷积构成的密集预测头对于每个位置预测类别、边界框位置和中心度三组数值与 Anchor-based 有所不同
如下图所示整个过程在FCOS中就是通过卷积来完成的。 3.CenterNet (2019)
针对 2D 检测的算法将传统检测算法中的“以框表示物体”变成“以中心点表示物体”将 2D 检测建模为关键点检测和额外的回归任务一个框架可以同时覆盖 2D 检测、3D 检测 、姿态估计等一系列任务。 将检测问题从框 - 关键点一些辅助信息 这个模型除了目标检测也可以解决一些其他问题 八、Detection Transformers
1.DETR2020 传统方法在特征图上进行密集预测的范式依赖 Anchor 设计、NMS 后处理等额外操作 DETR脱离密集预测范式将检测建模为从特征序列到框序列的翻译问题用 Transformer 模型解决 DETR认为所有的框可以看成是一个序列的问题特征也可以看作一系列的序列所以定义了一个序列到序列的问题 DETR经常在工业质检的缺陷检测中用到 问题慢由于attention聚焦到特定的特征上过程非常慢所以整个DETR也是很慢的。
2.Deformable DETR (2021)
直接基于query的特征去关注图像的位置和权重而不是用query、key、value做内积再去计算attention DETR 的注意力机制收敛很慢收敛 ≈ 注意力机制注意到特定的位置 Deformable DETR 借鉴 Deformable Conv 的方式显示建模 query 注意的位置收敛速度更快 九、目标检测模型的评估方法
这部分内容在机器学习相关知识有更详细的解释
1.检测结果的正确/错误类型 正确结果 (True Positive)算法检测到了某类物体 (Positive)图中也确实有这个物体检测结果正确 (True) 假阳性 (False Positive)算法检测到了某类物体 (Positive)但图中其实没有这个物体检测结果错误 (False) 假阴性 (False Negative)算法没有检测到物体 (Negative)但图中其实有某类物体检测结果错误 (False) 检测到的衡量标准对于某个检测框图中存在同类型的真值框且与之交并比大于阈值通常取0.5 2.准确率 Precision 与 召回率 Recall
结合上面的TP、FP、FN我们就可以计算准确率和召回率 真值框总数与检测算法无关因此只需将检测结果区分为 TP 和 FP 即可计算 recall 和 precision
准确率与召回率的平衡
两种极端情况 检测器将所有锚框都判断为物体召回率≈100%但大量背景框预测为物体FP很高准确率很低 检测器只输出确信度最高的1个检测框以很大概率检测正确准确率100%但因为大量物体被预测为背景FN很高召回率很低
一个完美的检测器应该有100%召回率和100%的精度在算法能力有限的情况下应该平衡二者
通常做法将检测框按置信度排序 仅输出置信度最高的若干个框
置信度 分类概率或修正后的分类概率YOLO、FCOS
3.PR 曲线 与 AP 值
AP是PR曲线下方的面积PR曲线越靠近右上方说明预测效果越好。
子豪兄的补充
1.目标检测算法的改进思路
数据集
数据集扩增YOLO V5中的马赛克拼接
骨干网络提取
骨干网络中的三个部分都可以做相应修改
后处理
各种后处理方法或者评价指标
针对小目标/密集目标进行改进
比如哪些部分开始用了后来不用了再后来又用了比如Anchor
针对特定数据集
添加一些人工标注的先验特征人工构造的特征来进行目标检测