分类:是什么
定位:在哪里?是什么?(单目标或数量固定的多目标)
检测:在哪里?分别是什么?(数量不固定的多目标)
分割:在检测的基础上,不再使用bounding box框出目标的位置,而是将目标和背景分离,找出目标的轮廓线。(图片来自博客)
看作回归问题。对于单个目标的定位,比较简单的思想就是直接看作是关于目标矩形框位置的回归问题,也就是把刻画矩形框位置信息的4个参数作为模型的输出进行训练,采用L2损失函数。对于固定的多个目标定位,也采用类似的方法,只不过输出由4个变成4*C个,C为需要定位的目标的类别数。这样,完整的识别定位问题的损失函数由两部分组成:第一部分是用于识别的损失,第二部分是用于定位产生的损失。显然这种方法对于目标数量固定的定位问题比较容易,当数量不定时(比如检测任务)就不适用了。
滑动窗口法。这种方法的一个典型代表是overFeat模型,它用不同大小的矩形框依次遍历图片中所有区域,然后在当前区域执行分类和定位任务,即每一个滑过的区域都会输出一个关于目标类别和位置信息的标签,最后再把所有输出的矩形框进行合并,得到一个置信度最高的结果。这种方法其实和我们人的思维很相似,但是这种方法需要用不同尺度的滑动框去遍历整幅图像,计算量是可想而知的。
关于对象选框(object proposal)的问题,方法主要有两类:一类叫grouping method,即先将图片打碎,然后再聚合的一种方法,比如selective search;另一类叫window scoring method,是生成大量window并打分,然后过滤掉低分的一种方法,比如objectness。这里的Sliding Window也是这类方法。
一种思路就是上面定位问题提到的滑动窗口法,该方法存在的问题是基于窗口滑动的区域没有针对性,时间复杂度高,窗口冗余。
还有一种是基于候选区域的检测方法。该方法预先找出图中目标可能出现的位置。该方法利用了图像中的纹理、边缘、颜色等信息,可以保证在较少窗口的情况下保持较高的召回率,大大降低了后续操作的时间复杂度,比较常用的Region Proposal算法有selective search和edge boxes
然后在这些候选框上分别进行分类和定位操作,最后再把所有的结果汇总到一起。
上面提到基于候选框的目标检测需要先产生2000个左右的候选区域,而产生这些区域用的最多的方法是选择性搜索。算法过程大致如下:
(1) 生成初始区域集合
(2) 计算区域集合中所有相邻区域的相似度(相似度综合考虑了颜色、纹理、尺寸和空间交叠)
(3) 合并相似度最高的两个区域,并移除所有与这两个区域有关的区域
(4) 重新计算合并的区域和其他所有区域的相似度并执行合并过程直到结束
(该部分具体可参考博客)
利用边缘信息(Edge),确定框框内的轮廓个数和与框框边缘重叠的轮廓个数(这点很重要,如果能够清楚的知道一个框框内完全包含的轮廓个数,那么目标有很大可能就在这个框中),并基于此对框框进行评分,进一步根据得分的高低顺序确定proposal信息(由大小,长宽比,位置构成)。而后续工作就是在proposal内部运行相关检测算法。
对于目标检测任务,我们往往需要在一张图中检测多个目标。对于每一个目标都可以计算测试的查准率和查全率,通过选用不同的阈值进行实验,可以得出多组查准率和查全率,利用这些数据可以得到一条P-R曲线,而曲线下包围的面积就表示average precision (AP),这个值越大,说明模型的综合性能越好。而对于多个目标,我们计算所有目标AP的平均值作为目标检测最终的性能评价指标即mean average precision (mAP)
题外话:
在此有必要提一下非极大值抑制,因为在目标检测的时候,我们是在多个区域上分别执行的,最终必然会产生大量的候选框。而最终希望得到一个最好的框来确定目标的位置。而非极大值抑制就是抑制不是最大值的部分,在这里就是抑制冗余的矩形框,保留最优框的过程。
具体来说,对于某一个目标,我们的模型框出了很多候选框,每一矩形框都会有一个对应的类别分类概率,我们将他们从大到小排序,然后舍弃掉与最大概率的矩形框相似度高的矩形框(IoU值大于设定的阈值),保留剩下来的矩形框。
参考:https://blog.csdn.net/sinat_34474705/article/details/79131542
https://blog.csdn.net/qq_30159351/article/details/52440058
本文链接:http://task.lmcjl.com/news/12239.html