Object Detection(对象检测)原理介绍

1. 基础概念

  1. 图像分类(Classification)

       图像分类是给定一张图片,我们希望程序可以识别图片中的物体。比如,我们构造一个分类器,来识别图片中的物体是猫或是狗,这是图像分类技术。如下图所示,给定一张图片,分类器给出图片中物体的类别:

Object Detection(对象检测)原理介绍

2. 定位(Localization)

       通过以上图片分类算法后,我们知道图片中物体的类别,但是还不知道物体在图片中的位置。定位算法允许我们识别物体的位置。Classification with Localization算法不仅能识别图片中物体的类别而且可以得到物体在图片中的位置,通常图片中只有一个物体。而Detection算法主要场景是一张图片中有多个物体,需要识别定位所有的物体的类别和位置。下图说明了分类算法、定位算法和Detection算法的区别:

Object Detection(对象检测)原理介绍Object Detection(对象检测)原理介绍

 

       在Classification and Localization算法中,我们用一个方框标识图片的位置,具体算法的输出结果可以表示为:

Object Detection(对象检测)原理介绍

       损失函数可以如下定义:

Object Detection(对象检测)原理介绍

       以上公式中,Object Detection(对象检测)原理介绍表示图片中是否有物体,n表示算法输出结果的长度。

2. Sliding Window Object Dection

       在计算机视觉中,滑动窗口是一个固定大小的矩形框区域,从图片的左上角自左至右、自上而下依次滑动指定像素(stride),直到穿过图片的每一个区域。

       Sliding Window Object Dection算法以滑动窗口中的图片作为输入,判断该部分图片中是否包含物体,并以该Sliding Window作为物体的定位。在滑动窗口算法中,通常从小到大设置一组窗口大小,从最小的窗口开始依次执行算法,直到滑动窗口检测到物体,或算法结束。

       算法以滑动窗口作为物体的位置,所以在构造训练数据集时,我们的输入图片应该以滑动窗口为大小,并且物体位于图片正*,且占满图片,如下图所示:

Object Detection(对象检测)原理介绍

    滑动窗口算法虽然简单,但是有以下两个缺点:

  1. 计算量大。针对每一次滑动窗口经过的图片区域,都需要经过计算判断是否包含物体,如果把每次移动的步长设置过大,虽然减少了计算量,但不能保证滑动窗口正好经过并包含物体。
  2. 物体的位置不够准确,以滑动窗口作为物体的位置不够准确,很难保证滑动窗口正好包含图片中的物体。

       针对计算量过大的问题,可以通过CNN实现算法加一优化,该算法只需要计算一次,即可得到所有滑动窗口经过的区域,是否包含物体。如下图所示:

Object Detection(对象检测)原理介绍

Object Detection(对象检测)原理介绍

 

       如上图所示,输入图片大小是16*16*3,滑动窗口大小是14*14,步长是2,则经过CNN算法后的输出结果是2*2。最后每一个单元格表示对应的滑动窗口的输出结果。

3. YOLO

       You Only Look Once是一个高效的实时对象检测算法,该算法将图片分为n*n个区域,并对每一个区域执行分类定位算法(Classification with localization),同时将物体分配给包含其中点的区域。如下图所示:

Object Detection(对象检测)原理介绍

       上图将图片分为3*3个子区域,针对每个子区域运用分类定位算法(Classification with localization)得到其结果,每个子区域最后的输出结果可以表示为:

Object Detection(对象检测)原理介绍

       最后整个算法的输出结果大小为:3*3*(5+C),C表示需要识别的物体类别个数。在YOLO算法中,物体被分配到包含其中点的子区域内,很有可能出现下面场景,多个区域检测到同一物体,如下图所示:

Object Detection(对象检测)原理介绍

 

       我们可以使用Non-maximum suppression算法对其进行去重。具体算法如下:

  1. 去除Pc< threshold的方框
  2. 在检测到的物体方框中,选取概率最大的一个方框,对余下的方框计算IOU,去除IOU>0.5的方框
  3. 再从余下的方框中选取概率最大的方框,重复第二步进行计算。

       IOU为两个方框的重叠区域/总共所占面积。

              YOLO算法虽然可以在一张图片中识别多个物体,但每一个子区域内只能包含一个。通常,我们将图片分为19*19个子区域,在每个子区域内出现多个物体的概率很小。如果多个物体出现在同一个子区域内,我们可以采用Anchor Box算法解决。如下图所示,两个物体属于同一个子区域内,我们可以定义两个Anchor,如下图中的两个紫色方框,则使用Anchor Box后,算法的输出结果大小为:3*3*(5+C)*Anchor Box Num,其中,每个物体被分配给包含其中点的子区域的对应Anchor Box中,至于放在哪个Anchor Box中,取决于其与Anchor Box的IOU大小。

Object Detection(对象检测)原理介绍