特征点检测

比如要检测人脸的64个特征点,这些特征点围绕眼镜、嘴巴,我们可以人为的标记特征点在训练图片上,然后用卷积网络最后一层来输出这些点(128个,包括x、y的坐标),通过某种损失函数,比如均方误差或者交叉熵来进行训练

 

基于滑动窗口的目标检测:

第一步:训练单张图片的卷积网络(每张图片几乎被要检测的物体充满)

目标检测长尾分布 目标检测步骤_滑动窗口

第二步:通过大小不同的窗口从左上方一直滑动到右下方寻找目标:

目标检测长尾分布 目标检测步骤_目标检测_02

简单的YOLO算法对上述算法的优化:

目标检测长尾分布 目标检测步骤_目标检测_03

第一步:用网格框图片,此时选择的是3*3的网格

第二步:人工标记训练数据,对于每张图片,要标记3*3的8维向量,即3*3*8,8维的意义如上图(当然也可以不是8维,这里有3个分类c1,c2,c3)

第三步:通过调整卷积步长与卷积核大小,使得我们的网络最终能输出3*3*8的形式,最后用损失函数求解

 

优点:神经网络可以精确到边界框,而不是向上面选取边界框去滑动。只需要卷积一次就可以得到最终结果,可达到实时效果

 

bx、by、bn、bw的范围:

目标检测长尾分布 目标检测步骤_特征点_04

 

目标检测算法的判别标准:交并比(IoU)

目标检测长尾分布 目标检测步骤_特征点_05

 

非极大值预测:

目标检测长尾分布 目标检测步骤_滑动窗口_06

 

观察上图,如果格子是19*19,那在预测时很可能会有好几个格子认为自己的格子里有车:

目标检测长尾分布 目标检测步骤_目标检测_07

 

比较完整的用上非极大值预测的预测流程:(先不考虑多对象处于一个格子中)(如果分类对象不只1个,就要分别对每个对象做一次抑制)

根据19*19的网格,我们获得19*19*5(只做car的检测pc、bx、by、bh、bw)的矩阵,首先去掉pc小于0.6的,然后从矩阵中找出pc最大的,然后与此矩阵有很高IoU的矩阵抑制(如果是分类数大于1,只对本类的高IoU抑制),然后从剩下矩阵再找最大,与之有高IoU的矩阵抑制,如此重复下去

 

 

Anchor boxes:一个格子可以检测多个对象

目标检测长尾分布 目标检测步骤_特征点_08

在标记训练样本做出如上的变化(上面只有2个类重叠在一个格子中的情况)

 

完整的YOLO算法:

题目:检测目标有3中分类,行人、汽车、摩托。

训练阶段(人工标记)

目标检测长尾分布 目标检测步骤_目标检测长尾分布_09

标记好数据后,神经网络输入shape是100*100*3(假设),输出是3*3*16(假设格子是3*3,类别3和2个anchor box)

 

预测阶段:

输入输出shape与训练阶段相同,效果会是这样:

目标检测长尾分布 目标检测步骤_滑动窗口_10

第一步,抛弃概率低的预测:

目标检测长尾分布 目标检测步骤_目标检测长尾分布_11

第二步:对每个类别用非极大值预测

目标检测长尾分布 目标检测步骤_目标检测长尾分布_12

小于0.6的舍弃掉,得到最终结果

 

 

R-CNN、Fast R-CNN、Faster R-CNN简单思想:

 

目标检测长尾分布 目标检测步骤_特征点_13

不再是用滑动窗口检测每个区域,而是先用图像分割算法求出候选区域,找到可能的候选区域进行检测

Fast R-CNN则进一步提升了速度,在候选区域使用滑动窗口,而Faster R-CNN是用卷积网络去找候选区域

 

目标检测长尾分布 目标检测步骤_目标检测_14