目标检测问题定义

目标检测问题

目标检测是在图片中可变数量的目标进行查找和分类

  1. 目标种类与数量问题
  2. 目标尺度问题
  3. 外在环境干扰问题

不仅要检测出目标,还要同时检测出目标类别。(多任务)

目标检测和目标分割相对于计算机视觉领域里来说是基础的,对于计算机视觉的其它任务往往会依赖于这两个的结果来进行后续的处理。比如说目标跟踪 多目标跟踪 单目标跟踪

目标检测VS图像分类

目标检测问题定义_第1张图片

左边的图是经过目标检测后输出的图像,这个图片标注了我们需要检测的物体的坐标位置相应的坐标的 矩形坐标框上会有一个零点几的小数值,这个值往往代表这个类别的置信度

而这个置信度也说明了我们当前的检测框属于我们需要查找的目标的一个概率值,通常我们会给出一个阈值。通过这样一个阈值来过滤掉一些检测错误的目标。可以看到在左边的图中检测出非常多的目标区域。不同的目标区域也通过了不同颜色的矩形框表示出来,因此我们可以发现目标检测不仅给出了矩形框,也就是我们需要检测的目标的位置,同时也对矩形框内的物质也进行了分类,并通过不同颜色的矩形框来表现不同的类别。右边的图是图像分类,而对于图像分类,它主要是将一副图片作为输入,而它属于不同类别的概率分布则作为输出图像分类的目的就是对指定的图片它所属的类别来进行判定。不管是图像分类还是图像检测,我们在使用深度学习的技术来进行处理的时候都需要完成特征提取的环节。对于经典或者说传统的机器学习方法来说,我们通常会设计一些手动的特征来完成特征提取这样的一个步骤。而对于深度学习我们往往通过卷积神经网这样的一个方式来完成特征的抽取。

对于目标检测和图像分类在计算机视觉领域都属于比较基础的研究。对于计算机视觉其他的研究往往会依赖于这两个任务的结果来进行后续的处理,比如说目标跟踪 多目标跟踪 单目标跟踪

目标检测VS目标分割

目标检测往往会采用上采样或者是反卷积来得到同原始图像同样大小的 输出结果

目标检测问题定义_第2张图片

a图表示图像分类(Image classification),只需要指定图像中的目标相应的类别就好了

b图表示目标检测(Object Iocalization),需要定位出图像目标的位置和目标相应的类别

c图表示目标分割(Semantic segmentation),需要找到当前的目标它所占的区域(语义分割)找到这些除去背景区域的其它区域,它到底属于哪个目标,精确到像素点级别,也就是说图像中的每一个像素点它到底属于哪一个目标都有明确的区分,也就是所谓的语义分割

d 图表示实例分割(Instance segmentation),它不仅要对不同图像进行语义分割,而且对于同一类别的目标需要划分出不同的实例(实例分割)

补充知识点:

  1. 目标分割也属于计算机视觉领域的基础
  2. 目标分割需要找到当前的目标所占的区域
  3. 目标检测和目标分割的模型会存在非常大的区别

目标检测与目标分割的区别:

目标检测只需要得到四个坐标点然后进行分类,目标分割需要对每一个像素点进行分割

目标检测问题方法的变迁

传统目标检测方法到深度学习目标检测方法的变迁

目标检测问题定义_第3张图片

主要遵循了传统的手动设计特征和并结合滑动窗口来进行目标检测和定位。(存在瓶颈)

通过这种方式来进行目标检测和定位主要存在的问题可以概括为以下几点:

通过这种方式来进行目标检测和定位主要存在的问题可以概括为以下几点:

  • 通过传统设计特征,往往特征一个是很难设计的,另一个设计出来的特征往往会存在各种各样的问题。比如说,它对与某些特定的条件会不适应,或者说设计出来的特征往往会不鲁棒。
  • 而传统手工来设计特征,效率也会存在瓶颈,另外通过滑动窗口来提取目标框,并且对目标框进行分类判定的这种策略。同样在提取滑动窗口的整个流程是比较复杂的。
  • 从DPM之后,级联在某些场景下会有某些性能提升,在ImageNet数据集上统治地位,基本上很难在往上提升。

深度学习目标检测方法

Overfeat和RCNN这些方法在使用深度学习的时候,只是利用卷积神经网络来进行特征进行提取,并没有从本质上改变搜索框和提取目标区域的策略,因此这些方法在速度上存在瓶颈。

直到后来FasterRcnn方法的提出,通过RPN网络来代替原始的滑动窗口的策略,也标志着基于深度学习的方法彻底的完成了一个端到端的过程。(性能和速度得到很大的提升)

再到后来不采用提取候选框的策略,采用直接回归目标框位置的策略,比如说YOLO和SSD

这样的方法来完成目标检测和定位能够再一次对目标检测算法速度进行进一步的提升,而且能够保证同原先的基于Proposal策略的检测算法基本上一致的检测精度

那基于深度学习的学习算法也主要分成了两大类,一种是包括Proposal这样一个过程的目标检测方法另外一种是直接回归目标位置的目标检测方法

目标检测问题定义_第4张图片

通过直接回归的方式是深度学习的方法,而通过候选框的方法目前主流的是同样也是深度学习方法,但是这样的一个框架同样也适用于传统的目标检测方法。只不过区别在于我们在进行目标特征提取的时候是采用卷积神经网络还是采用一些手动设计的特征,比如说HOG特征,积分图特征等特征。再有在提取候选框的时候会有一些不同的策略

传统目标检测方法

  • Viola-Jones(积分图特征结合Adaboosts来解决人脸检测等目标检测问题)
  • HOG+SVM(SVM主要用于行人目标检测的任务,通过对行人目标候选区域提取HOG特征,并且结合SVM分类器来进行判定)
  • DPM(基于HOG特征的变种,不同地方在于DPM会加入一些额外的策略来提升检测的精度,而DPM也是目前非深度学习中目标检测效果和性能最优的一种方法)

深度学习目标检测方法

  1. One-stage(YOLO和SSD系列)
  2. Two-stage(Faster RCNN系列)

One-stage主要通过直接回归来进行目标检测和定位,代表性方法(YOLO和SSD)

Two-stage通过利用RPN网络对候选区域进行目标检测定位,代表性方法(Faster-RCNN)

目标检测问题定义_第5张图片

目标检测问题方法

传统目标检测方法VS深度学习目标检测方法

  • 手动设计特征               深度网络学习特征
  • 滑动窗口                   Proposal或者直接回归
  • 传统分类器                 深度网络
  • 多步骤                     端到端
  • 准确度和实时性差           准确度高和实时性好

目标检测算法的应用场景

目标检测问题定义_第6张图片

传统目标检测算法综述

目标检测问题定义_第7张图片

图片作为检测算法的输入,然后对这张图片进行候选框的提取,候选框的提取通常会采用候选框的方法来进行,就会对每一个窗口中的局部图像信息进行特征抽取,这个特征抽取的部分经常会常用一些经典的计算机视觉模式识别中的关于图像特征表示的一些方法,常见的分别为基于颜色的方法基于纹理的方法基于形状的方法,以及一些中层次或者高层次的语义的方法。这些方法有的是需要经过学习来得到的方法,比如说来抽取最基本的直方图特征以及纹理特征。HOG特征或者说double特征,这样的一些稠密的特征,通过TCA算法来进行特征降维,或者可以采用LDA来对特征进行空间的投影,来对抽取出的基本特征进行进一步的学习,来挖掘一些更加鲁棒的特征

低层特征:颜色纹理

中层次特征:基于这些底层特征,进行机器学习和特征挖掘来进行特征学习过程之后得到的特征,包括了PCA特征或者TCA特征,一些基于优化理论来完成的特征的学习这样的一个过程

高层次的特征:基于低层次特征和中层次特征进行进一步挖掘特征。(语义特征表示)

基于候选区域提取出来的特征进行分类判定,分类器需要经过事先的学习和训练得到的。

在这个过程中,我们对于单分类别目标的检测只需要区分当前的窗口中所包含的对象是否为背景还是是否为我们需要检测的目标,这样的一个二分类的问题。

对于多分类问题我们可能需要进一步去区分当前目标窗口中是否为背景,如果不为背景的话它属于哪一类,也就可能是一个多分类的问题,经过对候选框进行判定之后,我们就会得到一系列的可能为当前检测目标的候选框,那么这些候选框可能会存在一些重叠的状况,需要一个NMS(非极大抑制)的方法来对候选框进行合并,得到我们最终需要合并的目标,也就是我们最终的算法输出的结果。

那通常的目标检测算法主要是包括了这样的一个基本的流程,对于深度学习的目标检测算法其中有一系列的方法也会遵从这样的一个过程,区别就在于将特征提取的部分变成一个卷积神经网,而候选框提取的部分则通过一个RPN网络来完成,也就是我们经常会提到的Two-Stage的目标检测算法,而One-Stage的目标检测算法则会通过一个直接回归的方法来获得我们可能的目标的区域,或者说目标的位置,以及目标的类别

常见传统目标检测方法

  1. Viola-Jones
  2. HOG+SVM
  3. DPM

Viola-Jones(人脸检测)

  1. Haar特征抽取
  2. 训练人脸分类器(Adaboost算法等)
  3. 滑动窗口

Viola-Jones(人脸检测)

目标检测问题定义_第8张图片

Viola-Jones(人脸检测)

Adaboost算法(集成学习的方法)

  1. 初始化样本的权重w,样本权重之和为1
  2. 训练弱分类器
  3. 更新样本权重
  4. 循环第二步
  5. 结合做个分类器结果,进行投票

HOG+SVM(行人检测,Opencv实现)

  • 提取HOG特征
  • 训练SVM分类器
  • 利用滑动窗口提取目标区域,进行分类判断
  • NMS
  • 输出检测结果

HOG特征

  • 灰度化+Gamma变换(数据平滑)
  • 计算梯度map
  • 图像划分成小的cell,统计每个cell梯度直方图
  • 多个cell组成一个block,特征归一化
  • 多个block串联,并归一化

HOG+SVM(行人检测,Opencv实现)

  • SVM
  • 最大分类间隔面

目标检测问题定义_第9张图片

常见传统目标检测方法

DPM(物体检测)

  • HOG的扩展
  • 利用SVM训练得到物体的梯度

常见传统目标检测方法

DPM(物体检测)

DPM特征提取

  • 有符号梯度
  • 无符号梯度

目标检测问题定义_第10张图片

DPM特征提取

  • 有符号梯度
  • 无符号梯度

计算DPM特征图

计算响应图(root filter 和 part filter)

Latent SVM分类器训练

检测识别

常见传统目标检测方法

NMS(非极大值抑制算法)

  1. 目的:为了消除多余的框,找到最佳的物体检测的位置
  2. 思想:选取那些领域里分数最高的窗口,同时抑制那些分数低的窗口

Soft-NMS

目标检测问题定义_第11张图片

所有检测到的检测框进行排序,按照他们的得分来进行排序,这个得分实际上就是我们利用分类器来分类得到的一个概率值,这个概率值实际上表示我们所需要检测的目标的一个概率,我们在利用这个概率值所有的检测框进行排序之后我们选出最大的那个检测框,对于得分最大的检测框而言,就是我们首先选出得分最高的检测框,然后将那些同当前得分最大的检测框IOU面积大于某些阈值的那些框,也就是重叠率高的那些框进行删除,这个时候我们就会删掉一些检测框,同样有些检测框是与当前的检测框不重叠的,或者他们的重叠面积非常小。接下来我们就会对那些没有处理过的检测框再重新进行排序,排序完之后我们同样会选择出一个得分最大的检测框,然后计算最大的检测框同当前的检测框的IOU面积,然后将IOU面积大于某些阈值的框再进行一遍删除。我们不断地迭代这个过程,直到所有的检测框都处理过这个过程,我们就输出最终的检测结果。

对于NMS算法,有一个改进的算法叫Soft-NMS算法。

Soft-NMS(非极大值抑制算法)

  1. 相邻区域内的检测框的分数进行调整而非彻底抑制,从而提高了高检索率情况下的准确率
  2. 在低检索率时仍能对物体检测性能有明显的提升

目标检测问题定义_第12张图片

Two-stage基本介绍

  • CNN卷积特征
  • R.Girshick et al.,2014提出RCNN到faster RCNN
  • 端到端的目标检测(RPN网络)
  • 准确度高,速度相对one-stage慢

目标检测问题定义_第13张图片

Two-stage:

首先输入图片,然后对图片进行深度特征的提取,一幅图会作为输入,输入之后会经过一个卷积神经网,这里将这个卷积神经网称为主干网络,典型的主干网络就包括了VGG,ResNet等等的一些经典的神经网络的结构,再然后我们会通过一个RPN网络来完成我们之前在传统网络的目标检测算法中滑动窗口所完成的任务,也就是产生产生候选区域,这样的一些候选区域会通过一个RPN网络来完成,并且在进行候选框区域提取的时候会完成一个对候选框区域的分类,这个分类的过程就将候选区域分为背景和目标这样的两种不同的类别,并且在RPN网络产生候选区域的时候会对目标的区域进行初步的预测,那也就是区域分类和位置精修的两个环节。得到候选区域后,进行进一步的位置精确的回归和修正。这里就需要一个roi_pooling。接下来我们得到候选目标对应到feature map上的它的那一段区域或者说特征之后,通过一个fc层,也就是全连接层,来进一步对候选区域进行进一步的表示。接下来我们通过分类和回归这样的两个分支来分别完成对候选目标他的类别的判定,以及对候选目标位置的精修这样的两个过程,这里呢我们的类别不同于RPN网络的网络类别,在这里我们通常会得到物体的真实类别,比如说对于VOC数据集我们通常回去判定21类别,对于一些单词检测我们通常只会用到两个类别,回归主要得到当前物体的具体的坐标位置,实际上具体的坐标位置会表示为一个矩形框,对于一个矩形框我们会通过四个值来完成矩形框的表示,也就是分别为坐上角的顶点坐标以及矩形框的长和宽,得到(x,y,w,h),这样的四个值最终表示目标区域的位置。

Two-Stage常见算法

  • RCNN
  • Faster RCNN
  • Faster RCNN
  • Faster RCNN变种

 

目标检测问题定义_第14张图片

Two-Stage核心组件

  • CNN网络
  • RPN网络

CNN网络设计原则

  • 从简到繁再到简的卷积神经网

(最开始的卷积神经网络是非常简单的,比较经典的就是LeNet ,LeNet包括了几个卷积层,几个pooling层,激活层,softmax层和loss层,它的结构非常简单,但是它的性能在一些大规模会有一些瓶颈,比如说网络的表达能力抽象能力相对来说会弱一点,经历过LeNet之后呢,又提出了其他网络,这些网络都是尽可能的提升网络的深度,网络越深它的非线性表达的能力就会越强,因为现实中的很多任务中往往不是线性的而是非线性的,因此呢尽可能的加深网络能够得到物体更加抽象的表达,另外通过研究也发现越深层次的网络特征,对于图像最初的一些变化更加的不敏感,也就是说越深层次的特征,它的鲁棒性会越好,因此我们希望尽可能的加大网络的深度。但是实际上加大网络的深度一方面会加大网络的规模,另一方面会导致梯度消失,或者说梯度离散这样的一些问题,这也是目前解决神经网难以实现涉及到非常非常深的原因,目前可能设计到几百层的网络就很难训练了,典型的代表就是ResNet网络结构,ResNet通过简单的网络堆叠能够达到100多层的网络深度,GoogleNet,这样一系列的Inception,,这些追求的是加大网络的宽度来增加网络的表达能力,比较具有代表性的就是Google提出的一系列的Inception结构的网络结构,这也是目前卷积神经网络一个重要的分支)

在发展到现在,因为很多卷积神经网它希望跑在终端而不是跑在云端,因此我们在设计网络结构的时候可能会希望网络尽可能的轻量型,那这个时候就会出现轻量型的网络的原则,在设计网络的时候考虑性能和网络模型大小它的一个平衡,其中比较具有代表性的轻量级网络就包括了。。。。

除了设计轻量型的网络结构,还有对网络进行压缩,裁剪,量化等等一系列的策略来减小网络的大小,能够使网络在尽可能在小的损失性能的情况下压缩模型大小,使网络最终跑在一些功耗和性能比较差的设备上。对于卷积神经网络的设计原则我们一方面是从网络它的结构复杂程度上来解释,另一方面我们可以从多尺度特征融合的网络来考虑。

  • 多尺度特征融合的网络
  • 更轻量级的CNN网络

(设计网络的时候需要考虑网络的性能,他的模型的大小,它的耗时,以及它的参数量,这些对于产品的落地是具有非常重要的意义的)

Two-Stage核心组件

  • RPN网络
  • 区域推荐(Anchor机制)
  • ROI Pooling
  • 分类和回归

目标检测问题定义_第15张图片

除了主干网络也就是所谓的卷积神经网络以外还需要一个非常重要的神经网络也就是RPN网络。

输入的图片在经过卷积层,也就是我们刚才所提到的CNN过程之后我们会得到经过主干网络之后提取出来的feature maps,这个feature maps通常为(n,c,w,h)四维的卷积特征。n代表batch size的数量,也就是当前样本的数量,c 代表channel,w,h表示长宽。可能会与我们原始图片的长宽相差一定的倍数,一方面我们在进行卷积的时候可能会产生一些长宽的损失,这些损失的前提就是基于我们没有使用padding策略,在有一种我们使用pooling层的时候也会对图像进行一些下采样来得到更大的感受野,但是会缩小图片的尺寸,再有就是c,c是对应到不同的卷积核,对于我们通过卷积之后得到的一个feature maps之后会通过一个RPN网络来完成区域推荐和候选目标的筛选,这个步骤就相当于利用传统目标的检测算法进行目标检测时会用到的滑动窗口的策略。这里需要重点了解的内容包括了区域推荐算法,RPN网络的区域推荐算法也就是所谓的Anchor机制,需要了解对于候选区域筛选的得到之后会通过ROI Pooling 来提取候选目标,然后利用一个分类和回归网络对候选区域进行精确的分类和坐标位置的回归。最重要的两个步骤就是区域推荐和ROI PoolIng

RPN网络

区域推荐(Anchhor机制)

目标检测问题定义_第16张图片

对于当前的feature maps的大小为 (n*c*w*h),实际上我们这里的Anchor是指对于feature maps对于feature maps我们选择其中的每一个点来作为一个锚点,这个锚点就是所谓的候选区域的中心点,我们以每一个点来作为中心点去提取候选区,这样的每一个点我们都称之为一个Anchor。接下来以这个点为中心去提取候选区域,这个候选区域我们通常会按照一定的比例来提取候选区域。对于Faster Rcnn这里我们通常会采用9个不同的尺度来提取9个候选区域,换句话说,我们对于一个feature maps,我们会提取出多少个候选区域呢,提取(w*h*9(这里的9是因为提取9个候选区域,如果是n个候选区域,则 w*h*n))的候选区域,这个就是所谓的anchor。这样的一个候选区域我们会通过针对于候选区域以及我们的真值(GT),我们利用真值来对这样的一些候选区域进行筛选,经过筛选之后我们得到正样本和负样本,正样本表示包含目标的候选区域,负样本表示不包含目标的候选区域,包含与不包含通常会通过一个IOU来进行判定,也就是说真值和候选区域的重叠面积,如果候选区域同真值的覆盖面积超过了0.7(取值),我们认为是一个正样本,如果小于0.3(取值),我们认为是一个负样本

当前的feature maps的大小为w*h,而我们的真值候选区域目标它的坐标则是针对于原始的feature maps,原始的图像Image来讲的,我们如何判定在当前的feature maps上的一个候选区域同真值的候选区域它的一个重叠面积。图像进行下采样的时候是按照一定的倍数进行下采样的,对于其中的候选区域它的,对于真实图片中的一个目标区域实际上我们可以通过这样的一个下采样的过程来找到它在当前feature maps上所对应的真值的候选区域,比如说我们的feature maps按照8倍的进行下采样,也就是说我们的大小相当于原始图像的1/8,这个时候图像中的目标区域的大小也会下采样1/8,那它的坐标的位置实际上可以理解成一个相对的位置,而我们在计算IOU的时候通常会根据这样的一个相对位置来进行计算。

RPN网络

  • ROI Pooling
  • 输入:特征图标 ,rois(1*5*1*1)以及ROI参数
  • 输出:固定尺寸的feature map

ROI Pooling(完成抠图(相应的feature map)+resize(固定feature map的大小))

Two-Stage改进方向

  • 更好的网络特征
  • 更精准的RPN
  • 更完善的ROI分类
  • 样本后的处理
  • 更大的mini-Batch

基于One-Stage的目标检测算法综述

  • 使用CNN卷积特征
  • 直接回归物体的类别概率和位置坐标值(无region proposal)
  • 准确度低,速度相对two-stage快

目标检测问题定义_第17张图片

One-Stage常见算法

  • YoloV1/V2/V3
  • SSD/DSSD
  • Retina-Net
  • 等等

目标检测问题定义_第18张图片

One-stage VS Two-stage

One-stage

优点

速度快

避免背景错误,产生false positives

学到物体的泛化特征

缺点

精度低(定位,检出率)

小物体的检测效果不好

Two-Stage

优点

精度高(定位,检出率)

Anchor机制

共享计算量

缺点

速度慢

训练时间长

误报高

 

图片是视频截图获取的,我是你们的好朋友呵呵哒!!!

 

你可能感兴趣的:(深度学习)