目标检测是一件比较实际的且具有挑战性的计算机视觉任务,其可以看成图像分类与定位的结合,给定一张图片,目标检测系统要能够识别出图片的目标并给出其位置,由于图片中目标数是不定的,且要给出目标的精确位置,目标检测相比分类任务更复杂。
为什么需要滑窗?
目标检测算法通过分类器只能够告诉我们这张图片是否包含待检测目标,但是无法确定其位置(x,y,height,width)。那么怎么去确定待检测物体在图像中的位置呢?我们需要讲图片分成许多个子区域(sub-regions),将这个子区域通过模型检测目标存在情况。如果置信度很高,那么我们有理由相信目标就在这个子区域内,因此可以使用方框标出。那么久衍生出两个问题:
- 子区域怎么划分
最简单的子区域划分就是滑动窗口技术,采用具有不同长宽比、步长的矩形框来产生子区域。
2. 多个矩形框都通过了分类器检测(选择问题,Which one)
经过滑窗处理检测的结果可能会出现有多个子区域都满足置信度条件。使用非极大值抑值算法选择最终结果。
前提:目标边界框列表及其对应的置信度得分列表,设定阈值,阈值用来删除重叠较大的边界框。
IoU:intersection-over-union,即两个边界框的交集部分除以它们的并集。
非极大值抑制的流程如下:
- 根据置信度得分进行排序
- 选择置信度最高的比边界框添加到最终输出列表中,将其从边界框列表中删除
- 计算所有边界框的面积
- 计算置信度最高的边界框与其它候选框的IoU。
- 删除IoU大于阈值的边界框
- 重复上述过程,直至边界框列表为空。
-
基本原理
滑窗的概念和卷积类似,通过使用某一长宽的核在图像上进行滑动,步长可以是任意设定的。在滑动过程中对每个图像块进行分类判别,以确定其中是否含有物体。首先对输入图像进行不同窗口大小的滑窗进行从左往右、从上到下的滑动。每次滑动时候对当前窗口执行分类器(分类器是事先训练好的)。如果当前窗口得到较高的分类概率,则认为检测到了物体。对每个不同窗口大小的滑窗都进行检测后,会得到不同窗口检测到的物体标记,这些窗口大小会存在重复较高的部分,最后采用非极大值抑制(Non-Maximum Suppression, NMS)的方法进行筛选。例如:
对上图的每个图像块分别使用训练好的分类器进行分类,即可检测到图片块中是否含有 “笔” 或 “充电器”。通过采用不同尺寸和长宽比的窗口对整张图片进行完整的搜索,理论上可以正确的找到目标所在位置:
加上分类器之后:
非极大值抑值:使用滑动窗口技术会检测出多个包含待检测物体的候选框,而这些候选框都通过了分类选择器。所以需要选择一个最恰当的候选框来唯一标识物体,非极大值抑值。
-
缺点
不知道要检测的目标大小是什么规模,所以要设置不同大小和比例的窗口去滑动,而且还要选取合适的步长。但是这样会产生很多的子区域,并且都要经过分类器去做预测,这需要很大的计算量,所以你的分类器不能太复杂,因为要保证速度。
-
解决办法
-
参考文献