特征点检测
比如要检测人脸的64个特征点,这些特征点围绕眼镜、嘴巴,我们可以人为的标记特征点在训练图片上,然后用卷积网络最后一层来输出这些点(128个,包括x、y的坐标),通过某种损失函数,比如均方误差或者交叉熵来进行训练
基于滑动窗口的目标检测:
第一步:训练单张图片的卷积网络(每张图片几乎被要检测的物体充满)
第二步:通过大小不同的窗口从左上方一直滑动到右下方寻找目标:
简单的YOLO算法对上述算法的优化:
第一步:用网格框图片,此时选择的是3*3的网格
第二步:人工标记训练数据,对于每张图片,要标记3*3的8维向量,即3*3*8,8维的意义如上图(当然也可以不是8维,这里有3个分类c1,c2,c3)
第三步:通过调整卷积步长与卷积核大小,使得我们的网络最终能输出3*3*8的形式,最后用损失函数求解
优点:神经网络可以精确到边界框,而不是向上面选取边界框去滑动。只需要卷积一次就可以得到最终结果,可达到实时效果
bx、by、bn、bw的范围:
目标检测算法的判别标准:交并比(IoU)
非极大值预测:
观察上图,如果格子是19*19,那在预测时很可能会有好几个格子认为自己的格子里有车:
比较完整的用上非极大值预测的预测流程:(先不考虑多对象处于一个格子中)(如果分类对象不只1个,就要分别对每个对象做一次抑制)
根据19*19的网格,我们获得19*19*5(只做car的检测pc、bx、by、bh、bw)的矩阵,首先去掉pc小于0.6的,然后从矩阵中找出pc最大的,然后与此矩阵有很高IoU的矩阵抑制(如果是分类数大于1,只对本类的高IoU抑制),然后从剩下矩阵再找最大,与之有高IoU的矩阵抑制,如此重复下去
Anchor boxes:一个格子可以检测多个对象
在标记训练样本做出如上的变化(上面只有2个类重叠在一个格子中的情况)
完整的YOLO算法:
题目:检测目标有3中分类,行人、汽车、摩托。
训练阶段(人工标记)
标记好数据后,神经网络输入shape是100*100*3(假设),输出是3*3*16(假设格子是3*3,类别3和2个anchor box)
预测阶段:
输入输出shape与训练阶段相同,效果会是这样:
第一步,抛弃概率低的预测:
第二步:对每个类别用非极大值预测
小于0.6的舍弃掉,得到最终结果
R-CNN、Fast R-CNN、Faster R-CNN简单思想:
不再是用滑动窗口检测每个区域,而是先用图像分割算法求出候选区域,找到可能的候选区域进行检测
Fast R-CNN则进一步提升了速度,在候选区域使用滑动窗口,而Faster R-CNN是用卷积网络去找候选区域