8.目标检测

目标定位

  1. 如何定位图片中对象的位置?
    目标的参数化表示,让神经网络多输出4个单元:

    • $b_{x}$:边界框的中心点的x坐标
    • $b_{y}$:边界框的中心点的y坐标
    • $b_{h}$:边界框的高度
    • $b_{w}$:边界框的宽度
  2. 如何为监督学习任务定义目标标签$y$?

    • $p_{c}$:表示是否存在目标;使用逻辑回归
    • $b_{x},b_{y},b_{h},b_{w}$:边界框参数;
    • $c_{1},c_{2},c_{3}$:不同类别;使用softmax,甚至是均方误差。

    $p_{c}=1$时,表示图中存在目标对象;
    $p_{c}=0$时,表示图中不存在目标对象,其余参数无意义。

特征点检测

假设构建一个人脸特征点检测的神经网络,检测人脸的64个关键点,则神经网络的最后一层需要输出129个单元:每个点的坐标为$(x,y)$,一共需要128个单元,还需要一个单元来确定是否存在人脸,所以一共需要129个单元。

目标检测

基于滑动窗口的目标检测算法。

  1. 构建标签训练集,训练卷积网络,然后利用其实现滑动窗口实现目标检测:
  2. 选定一个特定大小的窗口,将其中的部分图像输入网络,判断是否存在目标;
  3. 使用这个窗口遍历整张图片(这个过程有些类似于过滤器卷积输入图像),对每个位置进行分类;
  4. 选用更大的窗口重复以上步骤,肯定会有一个窗口可以检测到目标。

缺点:

  • 小步幅窗口多,性能较好,但计算成本太大;
  • 大步幅窗口少,性能差,计算成本相对低。

滑动窗口的卷积实现

使用卷积可以实现计算共享,提高性能。
上图中,14×14×3的蓝色矩阵代表输入训练集,经过神经网络的训练,可以得到一个1×1×4的分类结果;
16×16×3代表在测试集上进行抽象的滑动窗口,这里并没有真的滑动窗口,而是整个图片进行卷积计算后,2×2的预测结果正好可以与模拟的四次滑动窗口进行映射,这样,利用卷积计算,一次性的实现了整张图片的滑动窗口检测。其中,MAX POOL的维度可以控制抽象滑动窗口的步长。

Bounding Box预测

滑动窗口的卷积实现效率较高,但不能获得最精准的边界框,为了得到更精准的边界框,采用Bounding Box预测

此算法相当于将原图像进行了裁剪,并对每个小子图进行标注。例如裁剪为3×3的图像后,要对九个子图都进行标注,并当作训练数据,训练整个网络

交并比

评价对象检测算法。

$IoU>0.5$时,可以采用。这个0.5是人为规定的,如果需要提高对算法的要求,可以规定更大的$IoU$

非极大值抑制

非极大值抑制可以确保算法对每个对象只检测一次

  1. 去掉概率低于某个阈值的边框
  2. 选择概率最大的边框,去掉与概率最大的边框交并比较大的边框

Anchor Boxes

到目前为止,对象检测中存在的一个问题是每个格子只能检测出一个对象,如果你想让一个格子检测出多个对象,就是用Anchor Boxes

预先定义两个不同形状的anchor box,或者anchor box形状,把预测结果和这两个anchor box关联起来。
定义类别标签,不使用:

而是重复两次,使用:

前8个参数和anchor box 1关联,后8个参数和anchor box 2关联