1. 目标定位
从简单的检测有没有车到给车画上框,实际增加了四个参数bx,by,bh,bw,为框左上角的点和长宽:
损失函数可以用八个值得平方差,也可以根据不同的选择不同的方式:
c1到c3使用softmax并输出一个,边界坐标用平方误差,Pc用逻辑回归,等等
2. 特征点检测
汽车、人脸、动作的特征点
3. 目标检测
滑动窗口:
缺点:对于卷积来说太慢了(已解决),而且除非采用小粒度的窗口,要不然描述不准确。
4. 卷积的滑动窗口实现
解决了重复卷积,一次性预测所有的框,但是精确还不够(下一节讲)
5. bounding box预测
YOLO(you only look once):
刚才的方法不能很好地解决准确性问题
蓝色的是按照4中的方法画的方框,可以看出和实际所在(红色)差距比较大。
YOLO:每个格子输出一个y,如果有目标会是绿色和黄色的样子,没有会是蓝色的样子,扫描后可以得到3x3x8的输出
怎么确定物体在那个格子里:中心点在哪个格子就算是在那个格子里
优点:卷积实现,可以达到实时识别
bx,by,bw,bh怎么确定:中心点在方框中的位置(方框左上角(0,0), 右下角(1,1))
6. 交并比(IoU)
如何判断检测算法运行良好:计算两个边界框交集和并集之比
7. 非最大抑制
有时候算法会对一个对象检测多次,这时候就可以用非最大抑制来使每个对象之被检测一次。
只输出最大比的输出,其他近似的输出被抑制
很多格子都认为自己有车:
找到最大的,抑制其他的:
以只检测有没有车为例:
Pc:格子里有车的概率
抛弃所有Pc<0.6的,在剩下所有里选出Pc最大的,抑制其他IoU大于0.5的
8. Anchor box
每个格子如何检测出多个物体?
两个物体(人和汽车)的中心点落在了同一个格子里:行人更像是竖直的,而汽车更偏向如水平,所以有了两个anchor box
找出物体的bx,by,bw,bh后,和两个anchor box算IoU,较大的是较合适的
缺点:如果有多于anchor box数量的物体出现在同一个格子中,没办法检测;如果两个anchor box的形状很像,也没有办法,需要其他手段
更好的办法(自动选择anchor box)YOLO里提到:k-means将两类形状聚类,用他来选择最具代表性的anchor box
9. 综合
10.RPN网络(region proposal 候选区域)
滑动窗格:使用训练好的分类器在所有窗格跑一边
卷积算法:在图中总有什么都没有的区域,在这些区域中浪费时间
带区域的卷积网络(R-CNN):尝试选出一些区域,使这些区域运行卷积是有意义的。
不再对整个图片跑窗格,而是选定特定区域(图像分割算法),在其上跑CNN,输出标签和bounding box
R-CNN:太慢。对每个区域跑一遍
fast R-CNN:慢。改进:用卷积实现了滑动窗格提高了速度,但候选区域的速度依旧很慢
faster R-CNN:大部分比YOLO慢(毕竟要分两步)。改进:使用卷积获得候选区域