吴恩达深度学习 第三课 第三周 目标检测

目标定位

学习神经网络的另一个问题,即定位分类问题,我们不仅要判断图中是不是一辆车,还要标记出它的位置。

如果你在构建汽车自动驾驶系统,那么对象可能包括:行人、汽车、摩托车和背景,这四个分类就是softmax函数可能输出的结果。
如果我们还想定位图片中汽车的位置,我们可以让神经元多输出几个单元,输出一个边界框,可以是四个数字 b x , b y , b h , b w b_x,b_y,b_h,b_w ,这四个数字是被检测对象的边界框的参数化表示。
我们约定图片左上角为(0,0),右下角(1,1),要确定边框,需要指定红色方框的中心点 ( b x , b y ) (b_x,b_y) ,边框的高度 b h b_h 和宽度 b w b_w
以下图为例, b x b_x 的理想值为0.5,大约处于图片水平方向的中间; b y b_y 大约是0.7,表示汽车处于垂直的 7 10 \frac{7}{10} 的位置; b h b_h 约为0.3,因为红色方框的高度是图片高度的0.3倍; b w b_w 约为0.4,红色边框的宽度约为图片宽度的0.4倍。

为监督学习定义目标标签y

y为一个向量, p c p_c 表示是否还有对象,如果属于前3类,则为1,是背景则为0。若果检测到对象,就输出被检测对象的4个边界框参数,同时输出 c 1 , c 2 , c 3 c_1,c_2,c_3 ,表示该对象属于哪一类对象。这里我们假设只含有一个对象。
在这里插入图片描述
关于下面两张图片的具体表示,可以看到,当不存在对象时,以问好表示。

神经网络的损失函数

L ( y p r e , y ) = ( y p r e 1 y 1 ) 2 + ( y p r e 2 y 2 ) 2 . . . + ( y p r e 8 y 8 ) 2 L(y_{pre},y)=(y_{pre1}-y_1)^2+(y_{pre2}-y_2)^2...+(y_{pre8}-y_8)^2

特征点检测

神经网络可以通过输出图片上特征点的 ( x , y ) (x,y) 坐标来实现对目标特征的识别。
如果你正在构建一个人脸识别应用,你希望算法给出眼角的具体位置,可以让神经网络的最后一层多输出两个数字 l x , l y l_x,l_y ,如果你想知道四个眼角的具体位置,那么从左到右可以输出两个特征点 ( l 1 x , l 1 y ) , ( l 2 x , l 2 y ) (l_{1x},l_{1y}),(l_{2x},l_{2y}) ,如果你还想获取更多特征点输出值,都可以以坐标的形式加入 ( l 64 x , l 64 y ) (l_{64x},l_{64y}) 这样就构建了64个特征,来实现图片的人脸检测。当然你也可以定义人体姿态检测的关键特征点,头部、胸部、手肘等等

目标检测

学过了对象定位和特征点检测,我们来构建一个对象检测算法。通过卷积网络进行对象检测,采用基于滑动窗口的目标检测算法。
假如构建一个汽车检测算法,首先创建一个标签训练集,我们可以裁剪掉汽车以外的部分,使汽车居于中间并占据整张图片,然后开始训练神经网络,训练完这个卷积网络,就可以用它来实现滑动窗口目标检测

首先选定一个特定大小的窗口,将这个红色小块输入卷积神经网络,检测并输出0或1,然后以固定步幅活动窗口,遍历整个图像;第二次增大红框,重复上述检测步骤;第三次重复操作,选用更大的窗口,这样,不论汽车在图片的哪个位置,总有一个窗口可以检测到它。

这样滑动窗口太慢,计算成本很大

滑动窗口的卷积实现

将神经网络的全连接层转化为卷积层,用卷积层层代替全连接层

下图,图二为检测,在最初的滑动我们会预测分类0或1,然后与图一相同的变换到最后得到的2x2x4。很多计算时重复的,可以共享参数

Bounding Box预测

滑动窗口法的卷积实现效率很高,有个缺点,无法输出最精准的边界框。
YOLO算法,比较难,后续专门研究分享一下

交并比

计算两个边框的交集和并集之比(loU),当交并比大于等于0.5,认为检测正确
在这里插入图片描述

非最大值抑制(Non-max suppression)

非极大值意味着只输出概率最大的分类结果,但抑制很接近(loU较高)但不是最大的其他预测结果。
如下图,首先抛弃 p c < = 0.6 p_c<=0.6
然后while循环操作:

  1. 选择最大的概率 p c p_c
  2. 抛弃与最大概率 l o U > = 0.5 loU>=0.5

    当我们同时检测三个对象时,我们需要独立进行三次非极大值抑制

Anchor Boxes

如果你想让一个格子检测多个对象,可以使用anchor box

如上图,当行人和汽车的中点几乎在同一个地方,我们需要在两个检测结果选一个(其实我认为我们可以输出连个类别,但是这里还需要输入边界框,所以只能输出一个类别),我们定义如下的anchor box,相当于将上述anchor box重复了一遍

YOLO算法

  1. 将图像切分为3x3x2x8
  2. 预测
  3. 非极大值抑制

候选区域

R-CNN、Fast R-CNN先选出带区域的卷积网络,不再对每个滑动窗运行检测算法。


更多精彩内容