目标检测学习-滑动窗口法

  • 目标检测的目的
  • 滑动窗口法
  • 交并比(IoU)
  • 非极大抑制(NMS)
  • 简单思路
  • 一些问题


目标检测的目的

最近在研究关于目标检测的项目,所以学习了下目标检测相关的基础,也有些自己的理解,所以就想记录下,分享下。

目标检测的目的简单的说就是要找到图片里有什么东西,在什么位置,比如下面经典的图,能检测到一条狗,一辆自行车和一辆汽车,然后把他们所在的区域位置给显示出来:

滑动窗口法 java 滑动窗口法模型检验_滑动窗口法 java


那这个是怎么做到的呢,看到那么多框,应该会想到,是不是用很多个大小的框,一个个找过去,找到最像目标的东西,然后显示出来,没错,大致是这个思想,所以先介绍下传统的滑动窗口法。

滑动窗口法

简单来说,就是那个框,在图片上移动,就看框里面有没有你要找的目标,有就是了,网上找了个简单的图来说明下:

滑动窗口法 java 滑动窗口法模型检验_计算机视觉_02


其实就是用不同大小的图,在图片上从左到右,从上到下的搜索,找到你要的目标,因为目标的大小不一样,所以很多时候你看你需要很多个尺寸的框来搜索,所以基本是属于穷举法啦,找到适合的为止。

先说下一些概念,后面会用到,方便理解,不讲具体细节,就讲个原理能理解就行。

交并比(IoU)

简单理解为交集和并集的比值,交集和并集的概念应该知道吧,然后用在窗口上,也就是两个窗口相交的区域和并起来的区域的比值,反应的是两个窗口的重合度。

喜欢看公式的:

滑动窗口法 java 滑动窗口法模型检验_目标检测_03


喜欢直观的:

滑动窗口法 java 滑动窗口法模型检验_滑动窗口法_04

非极大抑制(NMS)

简单理解就是把不是最大的给扔了,具体就是说把很多重叠的框按照分类分数排个序,取出最高的那个,把一些和他交并比大的给抛弃了,当然是有一个阈值的,然后剩下的一些继续做非极大抑制,直到全部处理完,最后留下的既是分类分数高的,又是框比较合适的窗口,如下图:

滑动窗口法 java 滑动窗口法模型检验_滑动窗口法 java_05

简单思路

1.我们把要找的目标先训练好一个分类器,比如上面的狗,人,骑车,马,训练一个4分类器。比如用SVM或者CNN训练一个分类器,输入一个固定大小图片,输出类别概率。
2.用很多不同大小的窗口进行移动,把图片分成很多个小窗口,然后把每个窗口喂给分类器,如果给出较高的分类分数,那就说明这个窗口有物体,那就留着,这样处理完所有窗口。
3.处理完的窗口当然会有很多重叠的啦,我们当然希望处理一些比较像我们标注的窗口啦,然后我们就使用 非极大抑制,留下合适的框,丢弃其他的框。
4.得到各种窗口和对应的类别,此时可以拿标注的数据框来进行回归,让窗口更加精确点,当然不回归也可以,可能不是很精确啦。

找到一个比较完整的结构图,可以帮助理解:

滑动窗口法 java 滑动窗口法模型检验_计算机视觉_06

一些问题

1.如果考虑到有不同大小的物体,那需要不同的尺寸的框来进行处理,基本是穷举很多尺寸了,不然效果可能不好,所以效率非常低下。

2.很多个窗口的情况下,执行比较复杂的分类器,可能又会很耗时。

3.如果分类器的输入图片尺寸是固定的,还要把不同的窗口大小缩放到固定尺寸,又要耗时费力,可能还会对分类产生影响。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自网络,侵删。