目标识别基础算法(一)



0.对象检测和对象识别(Object Detection vs. Object Recognition)



  • 对象识别算法可以标注和识别图像中存在哪些对象。
    它以整个图像为输入,输出图像中存在的对象的类别标签和属于该类别的概率。

  • 对象检测算法不仅可以识别图像中的物体,还可以返回边界框来指示物体在图像中的位置。

所有对象检测算法的核心是对象识别算法。对象识别模型只能识别图像中是否有狗,但是不会告诉狗在图像中的具体位置。

为了更好的定位图像,我们需要在图像上选择子区域(sub-regions),并将对象识别算法应用到子区域上。对象的位置由子区域的位置给出,在这些子区域中,对象识别算法返回的类别概率很高。

生成较小子区域的最直接方法是“滑动窗口”方法。但是,滑动窗口方法有几个局限性。这些局限性可以通过一类称为“候选区域”(region proposal)的算法来克服。选择性搜索(selective research)是最受欢迎的候选区域算法之一。

0.1 滑动窗口算法(Sliding Window Algorithm)

在滑动窗口算法中,在图像上滑动一个框或窗口以选择一个子区域,并使用对象识别模型对窗口所覆盖的每个图像子区域进行分类。

局限性:

  • 滑动窗口方法适用于固定长宽比的对象,例如人脸或行人。 图像是3D对象的2D投影。诸如宽高比和形状之类的对象特征会根据拍摄图像的角度而显着变化。当滑动窗口方法搜索多个长宽比时,计算量非常大。
  • 选择子区域需要对整个图像上的子区域进行穷举搜索。 不仅需要搜索图像中所有可能的对象位置,而且还必须以不同的比例进行搜索。这是因为对象识别模型通常以特定比例(或比例范围)进行训练,会导致对成千上万个图像子区域进行分类。

0.2 候选区域算法(Region Proposal Algorithms)


候选区域算法可以解决滑动窗口存在的局限性。

候选区域算法将图像作为算法的输入,输出图像中最有可能是对象的所有子区域对应的边界框。

这些候选区域(边界框)可能是混乱的,重叠的,并且可能无法完美地包含对象,但在这些候选区域之中,会存在一个非常接近图像中实际对象的候选区域。然后使用对象识别模型对这些候选区域进行分类,分类概率分数较高的候选区域是对象的位置。


在这里插入图片描述
蓝色框为假阳性,绿色框为真阳性

  • 候选区域算法使用分割来识别图像中的预期对象。在分割中,我们基于颜色,纹理等标准将彼此相似的相邻区域分组。
  • 滑动窗口算法在所有像素位置和所有比例下寻找对象。

候选区域算法的工作原理是将像素分组为小数量的片段(segment)
因此,最终生成的候选区域数量比滑动窗口方法少很多倍,减少了必须分类的图像子区域的数量,而且生成的候选区域也具有不同的尺度比例和长宽比。

候选区域算法的一个重要特性是召回率很高。
这种说法所要满足的前提是,要查找的对象的区域必须包含在我们的候选区域列表中。我们的列表中可能有许多没有包含任何物体的候选区域。换句话说,只要我们能捕获所有真阳性值,可以让候选区域算法产生很多假阳性值。
大多数的假阳性值会被目标识别算法拒绝。当我们有更多的假阳性值且准确性会受到轻微影响时,识别所需的时间就会增加。但是,具有较高的召回率仍然是好的,因为缺少包含实际对象的子区域的选择会严重影响模型检测率。

以下为几种常用的候选区域算法,例如:

  • Objectness
  • Constrained Parametric Min-Cuts for Automatic Object Segmentation
  • Category Independent Object Proposals
  • Randomized Prim
  • Selective Search

在所有这些候选区域算法中,选择性搜索(Selective Search)是最常用的方法,因为它运行速度快且召回率很高

1.选择性搜索(selective search)


选择性搜索是在对象检测中使用的候选区域算法,速度很快且召回率很高。选择性搜索基于颜色,纹理,大小和形状兼容性,分层分组计算相似区域。

在最开始使用Felzenszwalb和Huttenlocher的基于图的分割算法,基于像素的强度对图像进行过度分割。


算法输入为:
在这里插入图片描述
算法输出为包含使用纯色表示的分段区域的图像:
在这里插入图片描述


但是不能将图像中的分段部分用作候选区域,原因是:

  • 原始图像中的大多数实际对象包含2个或更多的分段部分。
  • 无法生成诸如杯子盖住的盘子或装有咖啡的杯子等被遮挡对象的候选区域。

选择性搜索使用4种相似性度量,分别基于颜色,纹理,大小和形状兼容性。

  • 颜色相似度
  • 纹理相似度
  • 形状相容性
  • 尺寸相似度

[0]



2.R-CNN(Region-CNN)


2014年加州大学伯克利分校的Ross B. Girshick提出R-CNN算法,其在效果上超越同期的Yann Lecun提出的端到端方法OverFeat算法,其算法结构也成为后续two stage的经典结构。

R-CNN是第一个成功将深度学习应用到目标检测上的算法。R-CNN基于卷积神经网络(CNN),线性回归,和支持向量机(SVM)等算法,实现目标检测技术。

传统的目标检测方法大多以图像识别为基础。 一般可以在图片上使用穷举法选出所所有物体可能出现的区域框,对这些区域框提取特征并使用图像识别方法分类, 得到所有分类成功的区域后,通过非极大值抑制(Non-maximumsuppression)输出结果。

R-CNN遵循传统目标检测的思路,同样采用提取框,对每个框提取特征、图像分类、 非极大值抑制四个步骤进行目标检测。只不过在提取特征这一步,将传统的特征(如 SIFT、HOG 特征等)换成了深度卷积网络提取的特征。

2.1 算法流程

1.
对于一张图片,R-CNN基于selective search方法大约生成2000个候选区域(region proposal)
2.
每个候选区域被resize成固定大小,并输入到一个CNN模型中,得到一个特征向量
3.
这个特征向量被送入一个多类别SVM分类器中,预测出候选区域中所含物体的属于每个类的概率值。每个类别训练一个SVM分类器,从特征向量中推断其属于该类别的概率大小。

为了提升定位准确性,R-CNN最后又训练了一个边界框回归模型,通过边框回归模型对框的准确位置进行修正。

2.2 创新点

(1)可以将高容量卷积神经网络(CNN)应用于自下而上的候选区域,以便定位和分割对象;(2)当标记的训练数据不足时,先对辅助任务进行监督预训练,然后进行特定领域的微调,产生显著的性能提升。

[1][2]



3. SPP-Net(Spatial Pyramid Pooling in Deep Convolutional Networks)


R-CNN中对输入的图像有一个人为的要求,即输入的图像大小是固定的(如:224*224)。但这个“要求”对于任意尺度和大小图像(或子图像)来说会降低识别的准确率。

SPP-Net使用空间金字塔池化策略,消除了这个要求。

SPP-Net可以生成固定长度的表示形式,而与图像大小和尺度无关。它仅从整个图像中计算一次特征图,然后在任意区域(子图像)中合并特征,以生成固定长度的表示形式以训练检测器。

R-CNN是直接从原始图片中提取特征,它在每张原始图片上提取2000个候选区域,然后对每一个候选区域框进行一次卷积计算,而SPP-Net则是在卷积原始图像之后的特征图上提取候选区域的特征。所有的卷积计算只进行了一次。

SPP-Net避免了重复计算卷积特征。在处理测试图像时,SPP-Net比R-CNN计算卷积特征快30-170倍(整体速度快24-64倍)

3.1 缺点

SPP-Net已有一定的速度提升,它在ConvNet的最后一个卷积层才提取候选区域,但是依然有不足之处。

  • 和R-CNN一样,它的训练要经过多个阶段,特征也要存在磁盘中。
  • SPP-Net中的微调只更新空间金字塔池化层后面的全连接层,不适用于很深的网络。

[3][4]



4. Faster R-CNN


giuhub代码:https://github.com/rbgirshick/py-faster-rcnn

最新的目标检测网络是依赖于候选区域算法来假设物体位置。SPP-net 和 Fast R-CNN已经缩短了检测网络的运行时间,但是候选区域的计算时间成为了瓶颈。

Faster R-CNN使用一个候选区域网络RPN(Region Proposal Network),解决了这个问题。它共享完整图像卷积特征的检测网络,从而实现几乎无成本的选择候选区域。RPN是一个全卷积的网络,它同时预测每个位置的物体边界和物体的预测得分。RPN经过端到端的训练,生成高质量的候选区域,由Fast R-CNN用于检测。

Faster R-CNN将RPN和Fast R-CNN合并成一个单独的网络,通过共享它们的卷积特征,使用神经网络“注意力”机制,RPN组件告诉统一网络在哪里寻找合适的候选区域。

对于非常深的VGG-16模型[3],Faster R-CNN在GPU上的帧速率为5fps(包括所有步骤)。Faster R-CNN在PASCAL VOC 2007、2012和MS COCO数据集上实现了先进的目标检测准确率,每张图像仅需要300个候选区域。

4.1 创新点

  • 采用RPN(Region Proposal Network)代替选择性搜索(Selective Search),生成数量更少且高质量的候选区域。
  • 利用GPU进行计算,大幅度缩减提取候选区域的速度。
  • 产生建议窗口的CNN和目标检测的CNN共享。

[5][6]



资源链接


[0]
https://www.learnopencv.com/selective-search-for-object-detection-cpp-python/

[1]
https://baike.baidu.com/item/R-CNN/23197553#reference-[1]-23752483-wrap

[2]
https://blog.csdn.net/qq_35451572/article/details/80273088

[3]
Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

[4]
https://blog.csdn.net/qq_35451572/article/details/80273222

[5]
https://arxiv.org/pdf/1506.01497.pdf

[6]
https://blog.csdn.net/qq_35451572/article/details/80095628

  • 1
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值