计算机视觉中的物体检测方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机视觉中的物体检测方法相关的知识,希望对你有一定的参考价值。

参考技术A 本文适合刚入门物体检测的人群学习,不涉及公式推理。

相比于图像分类,图像中物体检测是计算机视觉中一个更加复杂的问题,因为图像分类只需要判断出图像属于哪一类就行,而在物体检测中,图像里可能有多个物体,我们需要对所有物体进行种类判别和位置确定,所以比图像分类更具有挑战性,应用于物体检测的深度学习模型也会更加复杂。本文将会着重介绍几种基于深度学习的物体检测方法。

待识别的物体有20类:
person
bird, cat, cow, dog, horse, sheep
aeroplane, bicycle, boat, bus, car, motorbike, train
bottle, chair, dining table, potted plant, sofa, tv/monitor

Detection Label (Ground truth)格式:

提交结果文件格式:

有YOLO、SSD、rcnn、fast rcnn及faster rcnn等
注:后边部分内容会对算法进行详细介绍

针对单个物体实例而言,通常由于图像采集过程中光照条件、拍摄视角、距离的不同,物体自身的非刚体形变以及其他物体的部分遮挡使得物体实例的表观特征产生很大的变化,给视觉识别算法带来了极大的困难。

属于同一类的物体表观特征差别比较大,其原因有前面提到的各种实例层次的变化,但这里更强调的是类内不同实例的差别,例如图 3(a)所示,同样是椅子,外观却是千差万别;其次是类间模糊性,即不同类的物体实例具有一定的相似性,如图 3(b)所示,左边的是一只狼,右边的是一只哈士奇,但我们从外观上却很难分开二者;再次是背景的干扰,在实际场景下,物体不可能出现在一个非常干净的背景下,往往相反,背景可能是非常复杂的、对我们感兴趣的物体存在干扰的,这使得识别问题的难度大大加大。

困难与挑战与图像的视觉语义相关,这个层次的困难往往非常难以处理,特别是对现在的计算机视觉理论水平而言。一个典型的问题称为多重稳定性。如图所示,图 3(c)左边既可以看成是两个面对面的人,也可以看成是一个燃烧的蜡烛;右边则同时可以解释为兔子或者小鸭。同样的图像,不同的解释,这既与人的观察视角、关注点等物理条件有关,也与人的性格、经历等有关,而这恰恰是视觉识别系统难以很好处理的部分。

bounding box:矩形框
SPP:Spatial Pyramid Pooling
SVM:支持向量机
RPN:Region Proposal Network

区域检测模块主要处理图像检测区域窗口的问题。根据获得区域待检测窗口方法的不同,物体检测方法大致可分为稠密检测窗提取(蛮力搜索)和稀疏检测窗两类方法。稠密检测窗提取方法,比如滑动窗法,相对比较简单,它是通过使用训练好的模板在输入图像的多个尺度上图像金字塔上进行滑动扫描,通过确定最大响应位置找到目标物体的矩形窗口。稀疏检测窗提取方法,则一般利用某些先验或其他图像任务的结果,选择最有可能成为物体的检测窗口,比如选择性搜方法,对图像分割的结果进行利用,通过区域融合生产目标检测窗。(算法具体内容自行了解,比如边缘盒算法,选择性算法)

这是最重要和最关键的步骤,传统的特征提取方法,比如HOG、SIFT特征,通过计算图像局部区域的梯度特征,得到图像边缘或角点特征。相比现在深度学习的提取特征方法,这些方法都是根据图像的某些性质通过人工设计相应的特征。缺点很明显,第一人工设计很麻烦,第二很具有局限性,特征提取不够完整,而深度卷积神经网络就可以客服这些不足。

分类器模块是物体图像检测与分类系统的结果输出,用于评价整个检测系统的性能。在模式识别和机器学习领域中,常用的分类器包括:逻辑回归、softmax、SVM、ada-boost等。在深度学习模型中一般采用SVM和softmax。

暂时略

既然传统的物体检测方法局限性很大,此时随着深度学习的发展,基于深度学习的物体检测算法R-CNN横空出世了。

Fast-RCNN主要贡献在于对R-CNN进行加速,只有速度够快,才能做到实时处理。那么Fast-RCNN是改进了R-CNN哪些地方提高了处理速度呢?

SPP:Spatial Pyramid Pooling(空间金字塔池化)
它有两个特点:
1.结合空间金字塔方法实现CNNs的多尺度输入。

一般CNN后接全连接层或者分类器,他们都需要固定的输入尺寸,因此不得不对输入数据进行crop或者warp,这些预处理会造成数据的丢失或几何的失真。SPP Net的第一个贡献就是将金字塔思想加入到CNN,实现了数据的多尺度输入。在卷积层和全连接层之间加入了SPP layer。此时网络的输入可以是任意尺度的,在SPP layer中每一个pooling的filter会根据输入调整大小,而SPP的输出尺度始终是固定的。

2.只对原图提取一次卷积特征

在R-CNN中,每个候选框先resize到统一大小,然后分别作为CNN的输入,这样是很低效的。所以SPP Net根据这个缺点做了优化:只对原图进行一次卷积得到整张图的feature map,然后找到每个候选框zaifeature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层。节省了大量的计算时间。

Fast-RCNN正是通过融合了SPP的设计(这一层称之为ROI Pooling),有了以上这两个优点,使得Fast-RCNN比R-CNN快多了。

原来的方法:许多候选框(比如两千个)-->CNN(两千次卷积)-->得到每个候选框的特征(不同尺度特征图不行)-->分类+回归
现在的方法:一张完整图片-->CNN(一次卷积)-->得到每张候选框的特征(可以不同尺度特征图不行,因为这里加了一层SSP net 称之为ROI Pooling)-->分类+回归

其还有个贡献是多任务Loss层:将分类和边框回归进行合并(又一个开创性的思路),通过多任务Loss层进一步整合深度网络,统一了训练过程,从而提高了算法准确度。

Fast-RCNN虽然加快了不少速度,但是其选择性搜索,找出所有的候选框,这个也非常耗时,于是有人就在Fast-RCNN的基础上解决了这个问题,提出了更快的Faster-RCNN。

Faster-RCNN特点(创新点):候选框提取不一定要在原图上做,特征图上同样可以,在低分辨率上做意味着计算量减小。
那么怎么在特征图上做候选框提取呢:于是有人提出了用神经网络去做,加入一个边缘提取的神经网络,称之为Region Proposal Network(RPN)。
具体加入方法:
• 将RPN放在最后一个卷积层的后面
• RPN训练好后能使用其直接得到候选区域

https://zhuanlan.zhihu.com/p/25236464

暂时略

1. http://blog.csdn.net/weixin_35653315/article/details/71028523 .
2. https://zhuanlan.zhihu.com/p/25236464 .
3. http://blog.csdn.net/AkashaicRecorder/article/details/68942949 .
4.黄凯奇,任伟强,谭铁牛.图像物体分类与检测算法综述,中国科学院自动化研究所模式识别国家重点实验室智能感知与计算研究中心,12(36),2013:1225-1240.
5.夏源.基于深度学习的图像物体检测与分类,北京邮电大学,2016.
6. https://www.cnblogs.com/skyfsm/p/6806246.html
7. https://blog.csdn.net/linolzhang/article/details/54344350
8. https://blog.csdn.net/shenxiaolu1984/article/details/51066975

这些计算机视觉 API 可以检测到多少物体?

【中文标题】这些计算机视觉 API 可以检测到多少物体?【英文标题】:How many objects these Computer Vision API can detect? 【发布时间】:2019-12-06 23:35:07 【问题描述】:

https://docs.microsoft.com/fr-fr/azure/cognitive-services/computer-vision/concept-object-detection

https://cloud.google.com/vision/docs/object-localizer

我想知道使用这些 API 可以识别多少以及哪些对象,但我找不到提及这一事实。

我发现 google API 使用基于 schema.org 类型的 https://developers.google.com/knowledge-graph/,但我不太了解它的全部内容。

【问题讨论】:

【参考方案1】:

很抱歉,据我所知,Azure 计算机视觉能够检测到的类没有固定的列表。

顺便说一句,即使有,此列表会定期更新(但没有公布时间表)。

无论如何,都是有限制的(参见 doc here):

请务必注意对象检测的局限性,以便您可以 避免或减轻假阴性(遗漏的对象)的影响和 细节有限。

如果对象很小(小于 5% 图片)。 如果对象被排列,通常不会被检测到 紧靠在一起(例如,一堆盘子)。 对象不按品牌或产品名称区分(不同 例如,商店货架上的苏打水类型)。但是,您可以获得 使用品牌检测功能从图片中获取品牌信息。

如果您想检测特定对象,我强烈建议您使用Custom Vision(文档/概述here),而不是Computer Vision,您可以在其中使用自己的图像训练模型以匹配您想要的检测

【讨论】:

以上是关于计算机视觉中的物体检测方法的主要内容,如果未能解决你的问题,请参考以下文章

计算机视觉——典型的目标检测算法(Fast R-CNN算法)(五)

这些计算机视觉 API 可以检测到多少物体?

计算机视觉案例:应用opencv+keras完成视频物体检测

『计算机视觉』物体检测之RefineDet

深度学习在计算机视觉中应用综述

[AutoCars]基于计算机视觉的无人车感知