(四)计算机视觉之目标检测算法基础

目录

前言

一、目标检测是什么?

1.目标检测VS图像分类

2.检测最朴素方法——滑窗 Sliding Window

(1)滑窗的效率问题

(2)改进

3.目标检测的基本范式

4.目标检测技术的演练

二、基础知识

1.框,边界框(Bounding Box)

2.交互比Intersection Over Union

3.置信度Confidence Score

4.非极大值抑制 Non-Maximum Suppression

5.边界框回归 Bounding Box Regression

6.边界框编码 Bbox Coding

三、两阶段目标检测Two-stage Detectors

1.两阶段算法概述

2.Region-based CNN (2013)

(1)R-CNN 的训练

(2)R-CNN 相比于传统方法的提升

(3)R-CNN 的问题

3.Fast R-CNN (2014)

(1)RoI Pooling

(2)RoI Align

(3)Fast R-CNN 的训练

(4)Fast R-CNN 的速度提升

(5)Fast R-CNN 的精度提升

(6)Fast R-CNN 的速度瓶颈

(8)降低区域提议的计算成本

(9)锚框Anchor

4.Faster R-CNN (2015)

Faster R-CNN 的训练

5.两阶段方法的发展与演进 (2013~2017)

四、多尺度检测技术

1.多尺度检测必要性

2.图像金字塔 Image Pyramid

3.层次化特征

4.特征金字塔网络 Feature Pyramid Network (2016)

5.在 Faster R-CNN 模型中使用 FPN

五、单阶段目标检测One-stage Detectors

1.单阶段算法概述

2.YOLO: You Only Look Once (2015)

(1)YOLO 的分类和回归目标

(2) YOLO 的损失函数

(3)YOLO 的优点和缺点

3.SSD: Single Shot MultiBox Detector (2016)

SSD 的损失函数

4.正负样本不均衡问题

解决方法:

5.困难负样本 Hard Negative

6.RetinaNet (2017)

7.YOLO v3 (2018)

六、无锚框目标检测算法 Anchor-free Detectors

1.锚框 vs 无锚框

2.FCOS, Fully Convolutional One-Stage (2019)

(1)FCOS 的多尺度匹配

(2)FCOS 的预测目标

(3)中心度 Center-ness

(4)FCOS 的损失函数

3.CenterNet (2019)

七、Detection Transformers

1.DETR (2020)

2.Deformable DETR (2021)

八、目标检测模型的评估方法

1.检测结果的正确/错误类型

2.准确率 Precision 与 召回率 Recall

两种极端情况:

3.PR 曲线 与 AP 值

(1)完整数据集上的例子:

(2)PR 曲线的起伏

(3)Mean AP

总结


前言

OpenMMLab AI实战营第四课!目标检测是计算机视觉中最重要,也是最热门的工作,它的主要任务是用方框标出图片中的“猫”。课程链接:4 目标检测算法基础_哔哩哔哩_bilibili


一、目标检测是什么?

给定一张图片,框出所有兴趣目标同时预测目标类别。

目标检测的应用:人脸识别,身份识别、属性分析等;智慧城市,垃圾检测(保持城市干净整洁)、非法占道检测、违章停车检测、自动服务等;自动驾驶,环境感知-->路径规划与控制;下游视觉任务,光学字符识别(定位+识别)、人体姿态识别等。

1.目标检测VS图像分类

检测,是在一般的场景,目标所在位置、数量、大小均不固定。

分类,是一个更受限的环境,通常情况下,只有一个物体、位于图像中央、占据主要面积。

目标检测与图像分类共同点就是,需要算法“理解”图像的内容-->深度神经网络实现。同样都需要模型对数据、图像中的内容进行一个理解。深度神经网络在图像分类上从AlexNet开始取得了非常和的成绩,目标检测遵循相同套路。

2.检测最朴素方法——滑窗 Sliding Window

首先设定一个固定大小的窗,然后拿这个窗去图像上去扫,有点像算卷积那样。然后我们扫到的位置,把窗内的这个块给抠下来,送到一个神经网络去预测里面的物体是什么(类别)。预测完一个位置后,再滑动10像素预测其他位置,重复操作。在网络训练好的前提下,遍历图像所有位置后,可以找到所有物体的位置并识别类别。

为了检测不同大小、不同形状的物体,可以使用不同大小、长宽比的窗口扫描图片。

(1)滑窗的效率问题

效率是滑窗Sliding Window的致命问题,考虑1000x600大小的图像,设定100x100的窗口,每滑动20像素分类一次。仅推理一张图片,需要对46x26将近1200个窗口进行分类。若使用不同大小的窗口,分类次数成倍增加。所以有着不可接受的计算成本,实用性太低。

改进思路1:使用启发式算法替换暴力遍历。例如R-CNN,Fast R-CNN中使用Selective Search 产生提议框依赖外部算法,系统实现复杂,不能训练,难以联合优化性能。

改进思路2:减少冗余计算,使用卷积网络实现密集预测目前普遍采用的方式。实际上,卷积本身也是一种滑窗,而且有一个参数共享的理念,所以更容易优化。

(2)改进

区域提议,基于图像颜色或底层特征,找出可能含有物体的区域,再送给神经网络识别。相比于普通滑窗,减少框的个数且保证召回率。

分析滑窗中的重复计算,假设用于分类的卷积网络只有2层:

我们去分析两个框的重合部分。在第一张图里预测的时候被卷积核扫过得到第一层特征,然后又扫了一遍得到第二层特征。而在第二张图里,只有位置改变,网络实际上相同,我们用相同网络的相同卷积扫了相同的部分图像,只不过在不同位置说生成了相同的特征,这部分实际上是冗余的。于是,我们考虑从这个卷积网络的的计算上设计某种算法把重复的去除。

改进思路:用卷积一次性计算所有特征,再取出对应位置的特征完成分类。

在特征图上进行密集预测,密集预测实际上是一种隐式的滑窗方法,计算效率远高于滑窗。这里的窗并非我们手动设置的,而是网络去定义的。

3.目标检测的基本范式

主干网络Backbone,输入图像产生一个多通道的特征图。基于特征图的特征去产生类别预测的,叫检测头Head。

4.目标检测技术的演练

深度学习出现以前,目标检测巅峰算法叫DPM(Deformable Part Model)。深度学习出来以后,2012 年卷积神经网络(Convolutional Neural Networks, CNN)的提出开始,不断有基于深度学习的目标检测算法被提出,分单阶段检测和两阶段检测算法。两阶段精度高但速度慢,单阶段速度快但精度稍逊。近几年随着Transformer算法的兴起,基于Transformer的一些优秀算法陆续出现。

二、基础知识

1.框,边界框(Bounding Box)

框泛指图像上的矩形框,边界横平竖直。描述一个框需要4个像素值:方式①左上右下边界坐标(l,t,r,b);方式②中心坐标和框的长宽(x,y, w, h)。
  边界框通常指紧密包围感兴趣物体的框,检测任务要求为图中出现的每个物体预测一个边界框。

框相关的概念:

  • 区域(Region):框的同义词。
  • 区域提议(Region Proposal,Proposal) 指算法预测的可能包含物体的框,某种识别能力不强的算法的初步预测结果。
  • 感兴趣区域(Region of Interest,RoI) 当我们谈论需要进一步检测这个框中是否有物体时,通常称框为感兴趣区域。
  • 锚框(Anchor Box,Anchor) 图中预设的一系列基准框,类似滑窗,一些检测算法会基于锚框预测边界框。

2.交互比Intersection Over Union

交互比(Intersection Over Union,IoU),定义为两矩形框交集面积与并集面积之比,是矩形框重合程度的衡量指标,是模型产生的目标窗口与原来标记窗口的交叠率。

3.置信度Confidence Score

置信度(Confidence Score):模型认可自身预测结果的程度,通常需要为每个框预测一个置信度。大部分算法取分类模型预测物体属于特定类别的概率,部分算法让模型独立于分类单独预测一个置信度。我们倾向认可置信度高的预测结果。

4.非极大值抑制 Non-Maximum Suppression

滑窗类算法通常会在物体周围给出多个相近的检测框。这些框实际指向同一物体,只需要保留其中置信度最高的。通过非极大值抑制(NMS)算法实现:

5.边界框回归 Bounding Box Regression

问题:滑窗(或其他方式产生的基准框)与物体精准边界通常有偏差。

处理方法:让模型在预测物体类别同时预测边界框相对于滑窗的偏移量

6.边界框编码 Bbox Coding

边界框的绝对偏移量在数值上通常较大,不利于神经网络训练,通常需要对偏移量进行编码,作为回归 模型的预测目标。

三、两阶段目标检测Two-stage Detectors

1.两阶段算法概述

两阶段的检测范式最早由 R-CNN 确立,因包含区域提议和区域识别两个阶段得名。经历一些列发展到 Faster R-CNN 和 Mask R-CNN 逐渐成熟。结合比较先进的主干网络和多尺度技术可以达到 比较优越的检测精度,使用广泛。近几年(2020~)随着单阶段算法精度和速度的 提高逐渐被取代。

2.Region-based CNN (2013)

Stage 1 产生提议框

使用传统视觉算法,推测可能包含物体的框(约2000个) ✔️不漏:真正包含物体的框通常会被选中 ❌不准:大部分大部分提议框并不包含物体

Stage 2 识别提议框

将提议框内的图像缩放至固定大小(原始论文 227×227) ,送入卷积网络进一步识别,得到准确结果。

(1)R-CNN 的训练

 (2)R-CNN 相比于传统方法的提升

不同检测算法在 Pascal VOC 2007 数据集上的 mAP 评分(分数越高性能越好)。

 (3)R-CNN 的问题

慢 :区域提议一般产生 2000 个框,每个框都需要送入 CNN 前传,推理一张图要几秒至几十秒。

3.Fast R-CNN (2014)

改进 R-CNN:减少重复计算✔️

Stage 1 产生提议框  仍然依赖传统CV方法

Stage 2 识别提议框

  • 卷积层应用于全图,一次性计算所有位置的图像特征
  • 剪裁提议框对应的特征图送入全连接层计算分类

问题:提议框大小不同,需要处理成固定尺寸才能送入全连接层。

(1)RoI Pooling

目标:将不同尺寸的提议框处理成相同尺寸,使之可以送入后续的全连接层计算分类和回归。算法:

  • 将提议框切分成固定数目的格子(上图中 2×2,实际常用 7×7,对齐ResNet等经典结构)。
  • 如果格子边界不在整数坐标,则膨胀至整数坐标。
  • 在每个格子内部池化,得到固定尺寸的输出特征图。

(2)RoI Align  

RoI Align 比 RoI Pooling 在位置上更精细。

(3)Fast R-CNN 的训练

多任务学习、端到端训练

(4)Fast R-CNN 的速度提升

相比 R-CNN 速度大幅提升。

(5)Fast R-CNN 的精度提升

(6)Fast R-CNN 的速度瓶颈

(8)降低区域提议的计算成本

区域提议→在图中找到包含物体的框→不需要区分类别的检测问题
  特定位置的特征包含其感受野内图像的信息,且已达到足够的抽象层级。基于特征做二分类就可以预测感受野内是否包含物体,从而实现区域提议。

朴素方法的局限:图中有不同大小的物体,区域提议算法需要产;物体可能有一定程度重合,区域提议算法要有生不同尺寸的提议框,以适应不同尺寸的物体能力在同一位置产生不同尺寸的提议框,以适应重合的情况。

(9)锚框Anchor

从2012以后,不断有基于深度学习的目标检测算法被提出,其主要有两条技术发展路线:Anchor-based和Anchor-free方法。锚框Anchor是在图像上设定好的不同大小、长宽比例的参照框。在原图上设置不同尺寸的基准框,称为锚框Anchor,基于特征独立预测每个锚框中是否包含物体。可以生成不同尺寸的提议框,可以在同一位置生成多个提议框覆盖不同物体。

4.Faster R-CNN (2015)

Faster R-CNN = RPN + Fast R-CNN 二者共享主干网络和特征。

Faster R-CNN 的训练

联合学习 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

五、单阶段目标检测One-stage Detectors

1.单阶段算法概述

单阶段算法直接通过密集预测产生检测框,相比于两阶段算法,模型结构简单、速度快,易于在设备上部署。

早期由于主干网络、多尺度技术等相关技术不成熟,单阶段算法在性能上不如两阶段算法,但因为速度和简洁的优势仍受到工业界青睐。

随着单阶段算法性能逐渐提升,成为目标检测的主流方法

2.YOLO: You Only Look Once (2015)

最早的单阶段算法之一

主干网络:自行设计的 DarkNet 结构,产生 7×7×1024 维的特征图。检测头:2 层全连接层产生 7×7 组预测结果,对应图中 7×7 个空间位置上物体的类别和边界框的位置。

(1)YOLO 的分类和回归目标

将原图切分成 S×S 大小的格子,对应预测图上 S×S 个位置。如果原图上某个物体的中心位于某个格子内,则对应位置的预测值应给出物体类别和B组边界框位置,其余位置应预测为背景类别,不关心边界框预测结果。

(2) YOLO 的损失函数

多任务学习:回归、分类共同计入损失函数,通过 λ 控制权重。

(3)YOLO 的优点和缺点

  快!在Pascal VOC 数据集上,使用自己设计的 DarkNet 结构可以达到实时速度,使用相同的 VGG可以达到 3 倍于 Faster R-CNN 的速度。

由于每个格子只能预测1个物体,因此对重叠物体、尤其是大量重叠的小物体容易产生漏检。直接回归边界框有难度,回归误差较大,YOLO v2开始使用锚框。

3.SSD: Single Shot MultiBox Detector (2016)

主干网络:使用 VGG + 额外卷积层,产生 11 级特征图。检测头:在 6 级特征图上,使用密集预测的方法,产生所有位置、不同尺度、所有锚框的预测结果。

特征图分辨率×锚框数目,对所有特征图求和 = 8732 个检测框。

SSD 的损失函数

训练

OpenMMLab 实战营打卡 - 第 四 课 目标检测算法基础相关推荐

  1. OpenMMLab 实战营打卡 - 第 1 课

    目录 一. Computer Vision Tasks 二. MMCV简介 MMCV 支持以下的系统 三. 计算机视觉的主要应用 四.计算机视觉的发展 五.深度学习时代最完整的计算机视觉开源算法体系 ...

  2. OpenMMLab实战营打卡-第3课

    一.配置环境 北京超算平台 参加openmmlab课程的同学可以通过给出的申请二维码扫描,完善信息问卷后等待几个工作日邮箱会发送回复,还可以自己搜索"北京超级云计算中心"微信公众号 ...

  3. 【OpenMMLab AI实战营 学习笔记 DAY(四)-- 目标检测基础知识及评估方法】

    本次课程,仍然是由王若晖老师进行讲解,中间的答疑部分由张子豪(B站 同济子豪兄)进行答疑讲解.课程链接,也可以直接打开哔哩哔哩,搜索OpenMMLab,在其主页可以观看. 目标检测 什么是目标检测 对 ...

  4. AI基础实战营打卡笔记

    AI基础实战营打卡笔记 20230201第一天(计算机视觉之算法基础鱼OpenMMLab入门)-张子豪 20230202第二天(计算机视觉之图像分类算法基础)-王若晖 20230203第三天(计算机视 ...

  5. 使用PyTorch从零开始实现YOLO-V3目标检测算法 (四)

    原文:https://blog.csdn.net/u011520516/article/details/80228130 点击查看博客原文 这是从零开始实现YOLO v3检测器的教程的第4部分,在上一 ...

  6. 人工智能教程第二课 目标检测OverView和RCNN

    4.1 目标检测概述 学习目标 了解目标检测的任务 知道目标检测的常用数据集 知道目标检测算法的评价指标 掌握非极大值NMS算法的应用 了解常用的目标检测算法分类 1. 目标检测 目标检测(Objec ...

  7. 四类异常检测算法综述:Isolation Forest、LOF、PCA及DAGMM

    异常检测(Anomaly detection)问题是机器学习算法的一个常见应用.这种算法的一个有趣之处在于:它虽然主要用于非监督学习问题,但从某些角度看,它又类似于一些监督学习问题.本文总结了四种机器 ...

  8. 【仿真建模】第四课:AnyLogic入门基础课程 - 轨道交通仿真入门讲解

    文章目录 一.轨道库的概念和特点 二.轨道交通仿真 三.更换车头和车身样式 一.轨道库的概念和特点 二.轨道交通仿真 新建模型 搭建轨道 定义轨道上的起点和终点 拖拽出一个trainSource,设置 ...

  9. 弱监督目标检测算法论文阅读(四)Localizing Common Objects Using Common Component Activation Map

    Abstract 在这项工作中,我们提出了一种从一组图像中的新颖对象类别中定位常见对象的方法. 我们使用新的通用组件激活图(CCAM)解决了这个问题,其中我们将特定于类别的激活图(CAM)视为组件,以 ...

最新文章

  1. 在Mac上控制Alt Delete-如何在Macbook上打开任务管理器
  2. PHP serialize JSON 解析
  3. onvif学习笔记8:最近写的一个ONVIF客户端的心得小结
  4. [译] 逐渐去掌握 React(作为一名 Angular 开发者)
  5. FPN网络详解(知识点记录)
  6. 微信小程序的两种视频录制方式
  7. vue开发很难?不存在的,可视化开发神器mxdev0.4版更新
  8. 北风:二类电商“空手套白狼”的赚钱套路
  9. XDOJ 完全平方数
  10. python nan变成0_python nan怎么解决
  11. 基于OpenCASCADE自制三维建模软件(一)介绍
  12. eclipse+ADT使用第三方静态库及COCOS2d问题汇总
  13. java 判断手机运营商_如何用java判断手机号运营商?
  14. itk读取.img格式的医学图像
  15. 计算机一级试题怎么保存上网,计算机一级试题中上网部分怎么保存文件
  16. 蛋白结构分析实操教程
  17. 什么是爱情——碧海青天BBS
  18. 据说,年薪百万的程序员,都是这么开悟的
  19. excel转换成PDF的软件
  20. Google I/O大会:Android 13

热门文章

  1. Matlab--创建函数(function)
  2. 怎么做web接口测试
  3. 软件测试面试题:对杯子进行测试用例设计?
  4. 8.mysql备份恢复
  5. linux下下载部署nginx
  6. 用牛顿迭代法求方程。
  7. 【2021.12.25】ctf逆向中常见加密算法和编码识别
  8. 3-4、无/有信息搜索
  9. 客户端与服务器的数据传输
  10. MySQL插入数据的多种方式