目标检测、分割、识别、分类综述
目标分割的任务是把目标对应的部分分割出来。目标检测:检测到图片当中的目标的具体位置目标识别:即是在所有的给定数据中,分类出哪一些sample是目标,哪一些不是。这个仅仅做一下分类任务。yes or no典型的技术路线是:目标分割 ——>目标检测 ——>目标识别 ——>目标跟踪如:需要对视频中的小明进行跟踪,处理过程将经历如下过程:(1)首先,采集第一帧视频图...
目标分割的任务是把目标对应的部分分割出来。
目标检测:检测到图片当中的目标的具体位置
目标识别:即是在所有的给定数据中,分类出哪一些sample是目标,哪一些不是。这个仅仅做一下分类任务。yes or no
典型的技术路线是:目标分割 ——>目标检测 ——>目标识别 ——>目标跟踪
如:需要对视频中的小明进行跟踪,处理过程将经历如下过程:
(1)首先,采集第一帧视频图像,因为人脸部的肤色偏黄,因此可以通过颜色特征将人脸与背景分割出来(目标分割);
(2)分割出来后的图像有可能不仅仅包含人脸,可能还有部分环境中颜色也偏黄的物体,此时可以通过一定的形状特征将图像中所有的人脸准确找出来,确定其位置及范围(目标检测);
(3)接下来需将图像中的所有人脸与小明的人脸特征进行对比,找到匹配度最好的,从而确定哪个是小明(目标识别);
(4)之后的每一帧就不需要像第一帧那样在全图中对小明进行检测,而是可以根据小明的运动轨迹建立运动模型,通过模型对下一帧小明的位置进行预测,从而提升跟踪的效率(目标跟踪)
计算机视觉中关于图像识别有四大类任务:
- 分类-Classification:解决“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。对于一幅图像来说,分类就是聚类,即分割;对于一组图像样本来说,分类是检测出样本中有相同目标的图像。
- 定位-Location:解决“在哪里?”的问题,即定位出这个目标的的位置。
- 检测-Detection:解决“是什么?在哪里?”的问题,即定位出这个目标的的位置并且知道目标物是什么。
- 分割-Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每一个像素属于哪个目标物或场景”的问题。图示如下:
- a)图像分类:一张图像中是否包含某种物体
- b)物体检测识别:若细分该任务可得到两个子任务,即目标检测,与目标识别,首先检测是视觉感知得第一步,它尽可能搜索出图像中某一块存在目标(形状、位置)。而目标识别类似于图像分类,用于判决当前找到得图像块得目标具体是什么类别。
- c)语义分割:按对象的内容进行图像得分割,分割的依据是内容,即对象类别。
- d)实例分割:按对象个体进行分割,分割的依据是单个目标。
目标分类和分割其实算是一个意思,比如,对一幅图像,我们根据相似性,将其分成不同的区域,这个可以说以分割,也是分类,对每个分类的区域进行特征匹配,就可知道每个区域是什么,实现目标识别。
不管什么任务,目标检测应该是计算机视觉领域首先需要掌握的。目标检测要解决的核心问题:
1.目标可能出现在图像的任何位置。
2.目标有各种不同的大小。
3.目标可能有各种不同的形状。
如果用矩形框来定义目标,则矩形有不同的宽高比。由于目标的宽高比不同,因此采用经典的滑动窗口+图像缩放的方案解决通用目标检测问题的成本太高。
1、传统的目标检测(滑动窗口的框架):
(1).滑动窗口
(2).提取特征(SIFT,HOG,LBP)
(3).分类器(SVM)
传统的计算机视觉问题的解决思路:图像——预处理——人工特征(hand-crafted features)提取——分类。大部分研究集中在人工特征的构造和分类算法上。但存在的问题是人工设计的特征可能适用性并不强,或者说泛化能力较弱,一类特征可能针对某类问题比较好,其他问题就效果甚微。
滑窗法作为一种经典的物体检测方法,个人认为不同大小的窗口在图像上进行滑动时候,使用分类器判别滑动框存在物体的概率。滑窗法的物体检测流程图:
滑窗法主要思路:首先对输入图像进行不同窗口大小的滑窗进行从左往右、从上到下的滑动。每次滑动时候对当前窗口执行分类器(分类器是事先训练好的)。如果当前窗口得到较高的分类概率,则认为检测到了物体。对每个不同窗口大小的滑窗都进行检测后,会得到不同窗口检测到的物体标记,这些窗口大小会存在重复较高的部分,最后采用非极大值抑制(Non-Maximum Suppression, NMS)的方法进行筛选。最终,经过NMS筛选后获得检测到的物体。
滑窗法简单易于理解,但是不同窗口大小进行图像全局搜索导致效率低下,而且设计窗口大小时候还需要考虑物体的长宽比。所以,对于实时性要求较高的分类器,不推荐使用滑窗法。
2、基于深度学习的目标检测:
通过深度学习算法,进行端到端的解决,即输入图像到输出任务结果一步完成。但其实内部它还是分stages的,通常是图像——特征提取网络——分类、回归。
这里特征提取网络即各种深度神经网络结构,整个网络分作两类的:
前N个层用于特征的提取,输入图片,输出特征图,这与传统的人工特征提取本质上没有太大区别,只是提取特征的算法变成了神经网络算法。
网络的后K层完成具体的分类或者回归任务,输入前一个部分得到的特征图,输出任务的结果。所以显然后一部分其实是可以被替代的,也确实有很多框架的第二部分采用其他机器学习的算法替代,如SVM。
先献上一个RCNN系列的图(来自知乎:iker peng)。
RCNN/SPP-Net/Fast-RCNN等文章都会谈及候选区域的生成。为什么要有候选区域?既然目标是在图像中的某一个区域,那么最直接的方法就是滑窗法(sliding window approach),就是遍历图像的所有的区域,用不同大小的窗口在整个图像上滑动,那么就会产生所有的矩形区域,然后再后续排查,思路简单,但开销巨大。
候选区域生成算法主要使用图像分割与区域生长技术。区域生长(合并)主要由于检测图像中存在的物体具有局部区域相似性(颜色、纹理等)。基于图像的颜色、纹理、面积、位置等合并相似的像素,最终可以得到一系列的候选矩阵区域。这些算法,如selective search或EdgeBoxes,通常只需要几秒的CPU时间,而且,一个典型的候选区域数目是2k,相比于用滑动窗把图像所有区域都滑动一遍,基于候选区域的方法十分高效。
选择性搜索(Selective Search)是主要运用图像分割技术来进行物体检测。滑窗法类似穷举进行图像子区域搜索,但是一般情况下图像中大部分子区域是没有物体的。学者们自然而然想到只对图像中最有可能包含物体的区域进行搜索以此来提高计算效率。选择搜索方法是当下最为熟知的图像bouding boxes提取算法。
选择搜索算法的主要观点:图像中物体可能存在的区域应该是有某些相似性或者连续性区域的。因此,选择搜索基于上面这一想法采用子区域合并的方法进行提取bounding boxes候选边界框。首先,对输入图像进行分割算法产生许多小的子区域。其次,根据这些子区域之间相似性(相似性标准主要有颜色、纹理、大小等等)进行区域合并,不断的进行区域迭代合并。每次迭代过程中对这些合并的子区域做bounding boxes(外切矩形),这些子区域外切矩形就是通常所说的候选框。
总体思路:假设现在图像上有n个预分割的区域,表示为R={R1, R2, …, Rn}, 计算每个region与它相邻region(注意是相邻的区域)的相似度,这样会得到一个n*n的相似度矩阵(同一个区域之间和一个区域与不相邻区域之间的相似度可设为NaN),从矩阵中找出最大相似度值对应的两个区域,将这两个区域合二为一,这时候图像上还剩下n-1个区域; 重复上面的过程(只需要计算新的区域与它相邻区域的新相似度,其他的不用重复计算),重复一次,区域的总数目就少1,直到最后所有的区域都合并为同一个区域(即此过程进行了n-1次,区域总数目最后变成了1).算法的流程图如下图所示:
- step0:生成区域集R,具体参见论文《Efficient Graph-Based Image Segmentation》,基于图的图像分割,博客:https://blog.csdn.net/surgewong/article/details/39008861/
- step1:计算区域集R里每个相邻区域的相似度S={s1,s2,…}
- step2:找出相似度最高的两个区域,将其合并为新集,添加进R
- step3:从S中移除所有与step2中有关的子集
- step4:计算新集与所有子集的相似度
- step5:跳至step2,直至S为空
相似度计算:论文从四个方面考虑相似度度量——颜色、纹理、尺寸和空间交叠
选择搜索优点:
- 计算效率优于滑窗法。
- 由于采用子区域合并策略,所以可以包含各种大小的疑似物体框。
- 合并区域相似的指标多样性,提高了检测物体的概率。
from:https://blog.csdn.net/qq_25680531/article/details/80932137
from:https://blog.csdn.net/surgewong/article/details/39008861/
SSD算法是一种直接预测目标类别和bounding box的多目标检测算法。与faster rcnn相比,该算法没有生成 proposal 的过程,这就极大提高了检测速度。算法的主网络结构是VGG16,将最后两个全连接层改成卷积层,并随后增加了4个卷积层来构造网络结构。对其中5种不同的卷积层的输出feature map分别用两个不同的 3×3 的卷积核进行卷积,一个输出分类的confidence,每个default box 生成21个类别confidence;一个输出回归用的 localization,每个 default box 生成4个坐标值(x, y, w, h)。此外,这5个feature map还经过PriorBox 层生成 prior box(生成的是坐标)。上述5个feature map中每一层的default box的数量是给定的(8732个)。最后将前面三个计算结果分别合并然后传给loss层。
YOLO对于给定的输入图像,YOLO不管三七二十一最终都划分出7x7的网格,也就是得到49个窗口,每个格子预测2个矩形框及其置信度,这个预测是通过全连接层来完成的,以及20种类别的概率。舍弃了Region proposal阶段,加快了速度,但是定位精度比较低,YOLO会预测每个矩形框的4个参数和其包含物体的信度,以及其属于每个物体类别的概率。YOLO的速度很快,在GPU上可以达到45fps。
对于目标检测这一任务而言,如果更关注性能指标,则可以参考two-stage系列的方法,而如果更关注实时性的要求,则可以关注one-stage的方法,这篇报告特别讲述了one-stage的YOLO算法,YOLO是以实时性为基础的快速目标检测算法,这种方法很快,也有许多工作。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)