首先学习的是这篇知乎文章
参考链接
YOLO简介: You Only Look Once
YOLO是一个目标检测算法。
输入一张图片,给出对象的bounding box及分类标签,如下图(图片来自yolo官网)。
YOLO是一个只使用一次CNN的端对端的算法。
目前已有好几代。
问题建模
- Yolo的CNN网络将输入的图片分割成S*S的 网格, 每个网格需要负责预测以本格子为中心的目标。
- 每个网格需要预测B个边框的位置,和C个类别各自的概率。总共是(B*5+C)个值。 其中
- 其中B是要预测几个边框
- C是类别数量。
- 5是说每个边框需要5个数值:(x,y,w,h,c),其中c是置信度。
- 所以最终预测值是一个SS(B*5+C)的张量。
- 以S=7,B=2, C=3 (狗,自行车,汽车)为例,最终预测值是一个SS(B5+C) = (77*30)的张量.。
网络结构
网络训练
先用ImageNet(GoogleNet)预训练(没太懂)。
回归问题,损失函数是均方差函数,但加了权。最后是一长串公式。
非极大值抑制 (non maximum suppression, NMS)
目的:去掉多余的框。
如下图,我们需要保留两个框,现在有5个,我们想删去多余的三个框。
算法步骤:
- 假设有ABCDE五个框,
- 先找出置信度最大的A,保留;然后计算BCDE和A的交并比IOU。发现IOU(A,B)大于阈值,则删除B,还剩A|CDE。
- 接着从CED中找出置信度最大的,发现是C,然后计算D和EyuC的IOU。发现IOU(C,D)和IOU(C,E)的均大于阈值,删去DE.还剩AC|
- 所以AC就是最后剩下的两个框。
未完待续