目标定位和检测系列(1):一些基本概念
2018年01月23日 16:16:48 Meringue_zz 阅读数:1665
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/sinat_34474705/article/details/79131542
最近开始学习深度学习中的定位和检测任务。本来打算直接看论文,却发现文章中的的很多基本概念都搞不清楚,于是就自己先梳理了一些定位和检测任务的基本概念。(内容主要来自斯坦福大学的CS231课程、吴恩达的deeplearning.ai卷积部分,这两门课程都可以在网易云课堂里找到***)
识别、定位、检测和分割
识别和定位:针对单个目标的任务,识别就是给定一张图片,要让计算机告诉你图片中是什么。而定位任务不仅要识别出图像中是什么,还要给出目标在图像中的位置信息。简单的说,就是用一个矩形框把识别的目标框出来(有时候也有多个固定数量的目标)。而我们通常采用两种方式在图像中表示一个矩形框:
(1) (x1, y1, x2, y2): 即给出矩形框左上角和右下角的坐标
(2) (x1, y1, w, h):即给出矩形框的左上角坐标和矩形框的长宽。
总的的来说,不管用哪种方法表示,我们都至少需要4个值来定位出图像中的一个目标,如果一副图像中包含C个目标,那我们至需要4*C值来定位所有目标(这里不包括用于识别的类别标签)。
检测和分割:针对一幅图像中有多个目标(数量不固定)的情况。检测任务要尽可能多的将图像中的目标用矩形框定位出来,相当于对多个目标的定位。而分割要求更严格,不再是用矩形框框出目标,而是要从像素层面上将目标和背景完全分离出来。分割的结果往往是找出目标的轮廓线。
具体如下图(图片来自斯坦福CS231课程PPT):
定位任务评估方法:Intersection over Union (IoU)
IoU用来衡量模型最终输出的矩形框或者测试过程中找出的候选区域(Region Proposal)与实际的矩形框(Gound Truth)的差异程度,定义为两者交集和并集的比值。通常我们将这个阈值指定为0.5,即只要模型找出来的矩形框和标签的IoU值大于0.5,就认为成功定位到了目标。
目标定位的两种思路
看作回归问题。对于单个目标的定位,比较简单的思想就是直接看作是关于目标矩形框位置的回归问题,也就是把刻画矩形框位置信息的4个参数作为模型的输出进行训练,采用L2损失函数。对于固定的多个目标定位,也采用类似的方法,只不过输出由4个变成4*C个,C为需要定位的目标的类别数。这样,完整的识别定位问题的损失函数由两部分组成:第一部分是用于识别的损失,第二部分是用于定位产生的损失。显然这种方法对于目标数量固定的定位问题比较容易,当数量不定时(比如检测任务)就不适用了。
滑动窗口法。这种方法的一个典型代表是overFeat模型,它用不同大小的矩形框依次遍历图片中所有区域,然后在当前区域执行分类和定位任务,即每一个滑过的区域都会输出一个关于目标类别和位置信息的标签,最后再把所有输出的矩形框进行合并,得到一个置信度最高的结果。这种方法其实和我们人的思维很相似,但是这种方法需要用不同尺度的滑动框去遍历整幅图像,计算量是可想而知的。
目标检测的两种思路
一种思路就是上面定位问题提到的滑动窗口法。还有一种是基于候选区域的检测方法。简单地说,因为用滑动窗口法需要的计算量太大了,如果能够只针对其中的一部分区域进行分类监测,那效率必然会提高很多。于是这种方法第一步就是先基于原图像生成2000个左右的候选框,然后在这些候选框上分别进行分类和定位操作,最后再把所有的结果汇总到一起。这类方法典型代表是R-CNN系列方法。
选择性搜索(selective search)
上面提到基于候选框的目标检测需要先产生2000个左右的候选区域,而产生这些区域用的最多的方法是选择性搜索。算法过程大致如下:
(1) 生成初始区域集合
(2) 计算区域集合中所有相区域的相似度(相似度综合考虑了颜色、纹理、尺寸和空间交叠)
(3) 合并相似度最高的两个区域,并移除所有与这两个区域有关的区域
(4) 重新计算合并的区域和其他所有区域的相似度并执行合并过程直到结束
非极大值抑制(Non-Maximum Suppression)
上面我们提到,在目标检测的时候,因为我们是在多个区域上分别执行的,最终必然会产生大量的候选框。而我们希望得到一个最好的框来定位目标的位置。而非极大值抑制完成的就是抑制冗余的矩形框,保留最优框的过程。
具体来说,对于某一个目标,我们的模型框出了很多候选框,每一矩形框都会有一个对应的类别分类概率,我们将他们从大到小排序,然后舍弃掉与最大概率的矩形框相似度高的矩形框(IoU值大于设定的阈值),保留剩下来的矩形框。
目标检测评价指标:mean average precision (mAP)
这里涉及到两个概念:查准率(precision)和查全率(recall)因为对于目标检测任务,我们往往需要在一张图中检测多个目标。对于每一个目标都可以计算测试的查准率和查全率,通过选用不同的阈值进行测试实验,可以得出多组查准率和查全率数据,利用这些数据可以得到一条P-R曲线,而曲线下包围的面积就表示average precision (AP),也就是说,这个值越大,说明模型的综合性能越好。而对于多个目标,我们计算所有目标AP的平均值作为目标检测最终的性能评价指标即mean average precision (mAP)
原文链接:https://blog.csdn.net/sinat_34474705/article/details/79131542
更多目标检测网络解析参看原博
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:目标定位和检测系列(1):一些基本概念 - Python技术站