04. 卷积神经网络
第3周 目标检测
3.1 目标定位
- 什么是定位和检测?
(1)图片分类
对给定图片进行标签预测
(2)具有定位的分类
对给定图片进行标签预测,并将目标定位出来。
(3)检测
图片中可能会有多个目标对象,甚至是多个类别的对象。 - 具有定位的分类
在图像分类的基础上,使网络进一步增加4维输出: b x , b y , b w , b h b_x, b_y, b_w, b_h bx,by,bw,bh,其中 ( b x , b y ) (b_x, b_y) (bx,by)是目标框的中心。 - 定义目标标签
(1)符号说明
1-行人
2-车辆
3-摩托车
4-背景
(2)需要输出 b x , b y , b w , b h b_x, b_y, b_w, b_h bx,by,bw,bh和类标签(1-4)
(3)定义输出 y y y
y = [ P c b x b y b h b w c 1 c 2 c 3 ] y = \left[\begin{matrix} P_c\\ b_x \\ b_y\\ b_h\\ b_w\\ c_1\\ c_2\\ c_3\\ \end{matrix} \right] y=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡Pcbxbybhbwc1c2c3⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
其中, P c = 1 P_c=1 Pc=1表示为目标,即分类1-3,且将目标类别对应的 c 1 c_1 c1、 c 2 c_2 c2、 c 3 c_3 c3置为1, P c = 0 P_c=0 Pc=0表示为背景。
(4)定义损失函数(简化版)
L ( y ^ , y ) = { ( y ^ 1 − y 1 ) 2 + ( y ^ 2 − y 2 ) 2 + ⋯ + ( y ^ 8 − y 8 ) 2 y 1 = 1 ( y ^ 1 − y 1 ) 2 y 1 = 0 L(\hat{y}, y)=\begin{cases} (\hat{y}_1-y_1)^2+(\hat{y}_2-y_2)^2+\dots+(\hat{y}_8-y_8)^2 & y_1=1\\ (\hat{y}_1-y_1)^2 & y_1=0 \end{cases} L(y^,y)={(y^1−y1)2+(y^2−y2)2+⋯+(y^8−y8)2(y^1−y1)2y1=1y1=0
(5)损失函数的变化
可对目标框应用平方误差,对 P c P_c Pc应用逻辑回归函数。
3.2 特征点检测
- 特征点检测
改造输出的结构,以实现对于目标特征点的检测。 - 定义的特征点对于所有的输入数据必须一致。
3.3 目标检测
- 车辆检测例子
(1)训练集
- 滑动窗口检测
逐次将窗口红框滑过图像的每个区域,并将窗口内的图像送入ConvNet,以检测是否有车辆。增大窗口大小,重复上述步骤。
缺点:计算成本较高。
3.4 卷积的滑动窗口实现
- 将FC层转化为卷积层
(1)网络结构示意
(2)修改后的网络结构
- 滑动窗口的卷积实现
(1)原始网络结构
假设测试数据大小为 16 × 16 × 3 16\times16\times3 16×16×3,示意图如下:
(2)修改后网络结构
- 问题: 目标框的边界可能不准确。
3.5 边界框预测
- 输出准确的边界框
- YOLO算法:You Only Look Once
(1)论文:Redmon et al. 2015. You Only Look Once: Unified real-time object detection.
(2)输入:( 3 × 3 网 格 3\times3网格 3×3网格,通常实现时更精细,如 19 × 19 19\times19 19×19)
(3)将前述图像定位算法应用到每个分格中。YOLO算法将目标分配给目标中心点所在分格。
(4)目标输出: 3 × 3 × 8 3\times3\times8 3×3×8 - 并不是要算法在每个格子内进行重复计算,而是应用卷积实现同时进行。
- 边界框的具体实现
(1)定义每个分格左上角为 ( 0 , 0 ) (0,0) (0,0),右下角为 ( 1 , 1 ) (1,1) (1,1)。
(2)根据中心点位置给出 ( b x , b y ) (b_x, b_y) (bx,by)。
(3)根据边界框大小,给出 ( b h , b w ) (b_h, b_w) (bh,bw)。
3.6 交并比
- 用来评价目标检测算法
- 评价目标定位
(1)交并比函数(IoU)
I o U = s i z e o f y e l l o w s i z e o f g r e e n IoU=\frac{size\space of\space yellow}{size\space of\space green} IoU=size of greensize of yellow
(2)若 I o U ≥ 0.5 IoU\geq0.5 IoU≥0.5,则定位正确。(0.5是人为设定的阈值。)
3.7 非极大值抑制
- 非极大值抑制举例
(1)示意图
(2)可能会有多个分格人为具有目标,如下:
(3)非极大值抑制用于处理多个检测结果。其基于输出的概率值。 - 非极大值抑制算法
(1)在每个分格运行算法,得到输出:
y ^ = [ p c b x b y b h b w ] \hat{y}=\left[\begin{matrix} p_c\\ b_x\\ b_y\\ b_h\\ b_w \end{matrix}\right] y^=⎣⎢⎢⎢⎢⎡pcbxbybhbw⎦⎥⎥⎥⎥⎤
(2)去除全部 p c ≤ 0.6 p_c\leq0.6 pc≤0.6的边界框。
(3)对于剩余的边界框重复如下步骤:
a. 选择 p c p_c pc最大的边界框作为输出预测;
b. 对于其余的边界框,计算和前一步输出边界框的 I o U IoU IoU,去除 I o U ≥ 0.5 IoU\geq0.5 IoU≥0.5的边界框。 - 对于多目标检测,可多次使用非最大值抑制进行去除边界框。
3.8 Anchor Boxes
- 重叠的目标
(1)示意图
(2)定义2个Anchor Box(实际中可能会要5个以上)
(3)输出变为
y = [ p c b x b y b h b w c 1 c 2 c 3 p c b x b y b h b w c 1 c 2 c 3 ] y=\left[\begin{matrix} p_c\\ b_x\\ b_y\\ b_h\\ b_w\\ c_1\\ c_2\\ c_3\\ p_c\\ b_x\\ b_y\\ b_h\\ b_w\\ c_1\\ c_2\\ c_3 \end{matrix}\right] y=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡pcbxbybhbwc1c2c3pcbxbybhbwc1c2c3⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
其中前8维与第1个Anchor Box有关,后8维与第2个Anchor Box有关。 - Anchor box算法
(1)之前
训练图像中的每个目标分配至包含其中心点的分格中。
(2)具有两个anchor boxes的方法
训练图像的每个目标分配至包含目标中心点的分格,以及具有最高 I o U IoU IoU的anchor box。
3.9 YOLO算法
-
训练集
(1)假设需要检测三种目标:行人,车辆,摩托车。
(2)假设使用2种anchor box,则输出为 3 × 3 × 2 × 8 3\times3\times2\times8 3×3×2×8(事实上输出的维度为 3 × 3 × 16 3\times3\times16 3×3×16)。 -
预测
-
输出非最大抑制的输出值
(1)对于每个分格,得到2个预测的边界框。
(2)得到低概率预测值。
(3)对于每个类别,使用非最大抑制方法得到最终输出结果。
3.10 候选区域
- 本节内容在实践中使用频率不高。
- RCNN:Region CNN
(1)只在部分窗口中进行卷积算法。
(2)参考文献:Girshik et. al. 2013. Rich feature hierarchies for accurate object detection and semantic segmentation.
(3)首先进行图像分割
- 更快的算法
(1)R-CNN:提出区域,对于每个区域进行分类,输出标签和边界框。
(2)Fast R-CNN:提出区域,对于所有区域使用卷积实现滑动窗口分类。
(3)Faster R-CNN:使用卷积网络提出区域。