引文
计算机视觉中关于图像识别有四大类任务:
(1)分类-Classification:解决“是什么?”的问题,即给定一张图片或一段视频判断里面包含什么类别的目标。
(2)定位-Location:解决“在哪里?”的问题,即定位出这个目标的的位置。
(3)检测-Detection:解决“在哪里?是什么?”的问题,即定位出这个目标的位置并且知道目标物是什么。
(4)分割-Segmentation:分为实例的分割(Instance-level)和场景分割(Scene-level),解决“每一个像素属于哪个目标物或场景”的问题。

目标检测
概念
目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。
目标检测算法分类
基于深度学习的目标检测算法主要分为两类:Two stage和One stage。
1)Two Stage
先进行区域生成,该区域称之为region proposal(简称RP,一个有可能包含待检物体的预选框),再通过卷积神经网络进行样本分类。
任务流程:特征提取 --> 生成RP --> 分类/定位回归。
常见two stage目标检测算法有:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN和R-FCN等。
Two stage 顾名思义就是“两阶段”的意思,我们在这个算法中:
第一阶段--先提取到物体区域
第二阶段--再对区域进行CNN分类识别;
代表性算法如下图的RCNN系列(RCNN,Fast RCNN,Faster RCNN)还有SPPNet等。
获取到输入的图像,提取候选区域;
再将每个候选区域的图片缩放固定到大小224x224,然后输入CNN网络
接下来对候选区域中的位置进行精确定位和修正,使用Roi_pooling层,可以将此层理解为抠图的操作,接着将抠图所得到的候选目标对应到特征图(feature map)上相应的特征区域,然后经过一个全连接层(fc),并得到相应的特征向量,最后通过分类和回归这样两个分支,来实现对这个候选目标类别的判定和目标位置的确定(也就是最后矩形框的四个点的坐标,(x,y,w,h):(x,y)为左上角顶点的坐标,w,h是矩形框的长和宽)。
两阶段目标检测模型结构:

2)One Stage
不用RP,直接在网络中提取特征来预测物体分类和位置。
任务流程:特征提取–> 分类/定位回归。
常见的one stage目标检测算法有:OverFeat、YOLOv1、YOLOv2、YOLOv3、SSD和RetinaNet等。

两类算法比较:
One-Stage
主要思路:直接通过卷积神经网络提取特征,预测目标的分类与定位;
One-stage模型是指在单次预测中完成目标检测的模型。它通常使用卷积神经网络(CNN)来完成特征提取和目标检测。在这种模型中,CNN通过卷积层和池化层来提取特征,然后使用预测层来预测目标的位置和类别。
Two-Stage
主要思路:先进行区域生成,即生成候选区域(Region Proposal),在通过卷积神经网络预测目标的分类与定位;
Two-stage模型是指在两个阶段完成目标检测的模型。第一阶段是特征提取阶段,第二阶段是目标检测阶段。在第一阶段,CNN通过卷积层和池化层来提取特征。在第二阶段,使用这些特征来预测目标的位置和类别。


目标检测原理
目标检测分为两大系列——RCNN系列和YOLO系列,RCNN系列是基于区域检测的代表性算法,YOLO是基于区域提取的代表性算法,另外还有著名的SSD是基于前两个系列的改进。
1. 候选区域产生
很多目标检测技术都会涉及候选框(bounding boxes)的生成,物体候选框获取当前主要使用图像分割与区域生长技术。区域生长(合并)主要由于检测图像中存在的物体具有局部区域相似性(颜色、纹理等)。目标识别与图像分割技术的发展进一步推动有效提取图像中信息。
滑动窗口
主要思路:首先对输入图像进行不同大小的滑窗从左往右、从上到下的滑动。每滑动时对当前窗口执行分类器(分类器是事先训练好的)。
如果当前窗口得到较高的分类概率,则认为检测到物体。
都进行滑窗检测过后,会得到不同窗口检测到的物体标记,那么有些窗口大小会存在重复较高部分,最后采用非极大值抑制(NMS)的方法进行筛选,经过筛选得到检测到的物体。
滑窗法的局限性在于,不同窗口大小全局搜索效率低下,并且窗口大小设计时还需要考虑物体的长宽比。
所以,对于实时性要求较高的分类器,不推荐使用滑窗法。

2.选择性搜索
① 什么是选择性搜索
滑窗法类似穷举进行图像子区域搜索,但是一般情况下图像中大部分子区域是没有物体的。学者们自然而然想到只对图像中最有可能包含物体的区域进行搜索以此来提高计算效率。选择搜索(selective search,简称SS)方法是当下最为熟知的图像bounding boxes提取算法
主要思想:图像中物体可能存在的区域应该是有某些相似性或者连续性区域的。因此,选择搜索基于这一想法采用子区域合并的方法进行提取bounding boxes。
首先,对输入图像进行分割算法产生许多小的子区域。
然后根据子区域之间的相似性(比如颜色、纹理、大小等)进行区域合并,不断进行区域迭代合并。
每次迭代过程中对这些合并的子区域做bounding boxes(外切矩形),这些子区域外切矩形就是通常所说的候选框。
② 选择搜索流程
step0:生成区域集R
step1:计算区域集R里每个相邻区域的相似度S={s1, s2,…}
step2:找出相似度最高的两个区域,将其合并为新集,添加进R
step3:从S中移除所有与step2中有关的子集
step4:计算新集与所有子集的相似度
step5:跳至step2,直至S为空
③ 选择搜索优点
计算效率优于滑窗法
由于采用子区域合并策略,所以可以包含各种大小的疑似物体框
合并区域相似的指标多样性,提高了检测物体的概率

2. 数据表示
经过标记后的样本数据
预测输出可以表示

其中,Pc为预测结果的置信概率,bx,by,bw,bh为边框坐标,C1 , C2 , C3 为属于某个类别的概率。通过预测结果、实际结果,构建损失函数。损失函数包含了分类、回归两部分组成。
3. 效果评估
使用IoU(Intersection over Union,交并比)来判断模型的好坏。所谓交并比,是指预测边框、实际边框交集和并集的比率,一般约定0.5为一个可以接收的值。
4. 非极大值抑制
预测结果中,可能多个预测结果间存在重叠部分,需要保留交并比最大的、去掉非最大的预测结果,这就是非极大值抑制(Non-Maximum Suppression,简写作NMS)。
所谓非极大值抑制:依靠分类器得到多个候选框,以及关于候选框中属于类别的概率值,根据分类器得到的类别分类概率做排序。
具体算法流程如下:
(1)将所有框的得分排序,选中最高分及选中最高分及其对应的框
(2)遍历其余的框,如果和当前最高分框的重叠面积(IOU)大于一定阈值,我们就将框删除。(为什么要删除,是因为超过设定阈值,认为两个框的里面的物体属于同一个类别,比如都属于狗这个类别。我们只需要留下一个类别的可能性框图即可。)
(3)从未处理的框中继续选一个得分最高的,重复上述过程。
(详细可到http://t.csdn.cn/638fu)
目标检测模型
1. R-CNN系列
流程
预训练模型。选择一个预训练 (pre-trained)神经网络(如AlexNet、VGG)。
重新训练全连接层。使用需要检测的目标重新训练(re-train)最后全连接层(connected layer)。
提取 proposals并计算CNN 特征。利用选择性搜索(Selective Search)算法提取所有proposals(大约2000幅images),调整(resize/warp)它们成固定大小,以满足 CNN输入要求(因为全连接层的限制),然后将feature map 保存到本地磁盘。
训练SVM。利用feature map 训练SVM来对目标和背景进行分类(每个类一个二进制SVM)
边界框回归(Bounding boxes Regression)。训练将输出一些校正因子的线性回归分类器
效果
R-CNN在VOC 2007测试集上mAP达到58.5%,打败当时所有的目标检测算法
缺点
重复计算,每个region proposal,都需要经过一个AlexNet特征提取,为所有的RoI(region of interest)提取特征大约花费47秒,占用空间
selective search方法生成region proposal,对一帧图像,需要花费2秒
三个模块(提取、分类、回归)是分别训练的,并且在训练时候,对于存储空间消耗较大
2. YOLO系列
基本思想
YOLO(You Only Look Once )是继RCNN,fast-RCNN和faster-RCNN之后,Ross Girshick针对DL目标检测速度问题提出的另一种框架,其核心思想是生成RoI+目标检测两阶段(two-stage)算法用一套网络的一阶段(one-stage)算法替代,直接在输出层回归bounding box的位置和所属类别。
之前的物体检测方法首先需要产生大量可能包含待检测物体的先验框, 然后用分类器判断每个先验框对应的边界框里是否包含待检测物体,以及物体所属类别的概率或者置信度,同时需要后处理修正边界框,最后基于一些准则过滤掉置信度不高和重叠度较高的边界框,进而得到检测结果。这种基于先产生候选区再检测的方法虽然有相对较高的检测准确率,但运行速度较慢。
YOLO创造性的将物体检测任务直接当作回归问题(regression problem)来处理,将候选区和检测两个阶段合二为一。只需一眼就能知道每张图像中有哪些物体以及物体的位置。下图展示了各物体检测系统的流程图。

实际上,YOLO并没有真正去掉候选区,而是采用了预定义候选区的方法,也就是将图片划分为7*7个网格,每个网格允许预测出2个边框,总共49*2个bounding box,可以理解为98个候选区域,它们很粗略地覆盖了图片的整个区域。YOLO以降低mAP为代价,大幅提升了时间效率。

每个网格单元预测这些框的2个边界框和置信度分数。这些置信度分数反映了该模型对框是否包含目标的可靠程度,以及它预测框的准确程度。
置信度定义为:

置信度是每个bounding box输出的其中一个重要参数,作者对他的作用定义有两重:
一重是:代表当前box是否有对象的概率 Pr(Object),注意,是对象,不是某个类别的对象,也就是说它用来说明当前box内只是个背景(backgroud)还是有某个物体(对象);
另一重:表示当前的box有对象时,它自己预测的box与物体真实的box可能的交并比的值,注意,这里所说的物体真实的box实际是不存在的,这只是模型表达自己框出了物体的自信程度。
以上所述,也就不难理解作者为什么将其称之为置信度了,因为不管哪重含义,都表示一种自信程度:框出的box内确实有物体的自信程度和框出的box将整个物体的所有特征都包括进来的自信程度。
如果该单元格中不存在目标,则置信度分数应为零。否则,我们希望置信度分数等于预测框与真实值之间联合部分的交集(IOU)。
每个边界框包含5个预测:xxx,yyy,www,hhh和置信度。( x ,y ) (x,y)(x,y)坐标表示边界框相对于网格单元边界框的中心。宽度和高度是相对于整张图像预测的。最后,置信度预测表示预测框与实际边界框之间的IOU。
每个网格单元还预测CCC个条件类别概率Pr ( Class i ∣ Object ) \Pr(\textrm{Class}_i\textrm{Object})
这些概率以包含目标的网格单元为条件。每个网格单元我们只预测的一组类别概率,而不管边界框的的数量BBB是多少。