写的比较明确,不是笼统的介绍,yolo 目标检测算法个人总结(yolov1) - 朱勇的文章 - 知乎
https://zhuanlan.zhihu.com/p/27515705
yolo v1在检测目标时,不同于之前RCNN系列的方法,是将检测对象的类别和位置同时进行预测,是一种回归问题。
主要步骤为:卷积层进行图像特征提取;全连接层用于后续类别和目标位置的回归预测。
具体预测方法:目标可能位于图像的不同局部区域,因此,作者首先将图像分割成S*S个栅格单元,
并同时期望每一个栅格单元能完成识别和检测落入到该单元的目标。
基于此,作者提出对每一个栅格单元,主要预测以下几个值:1 预测的B个Box的置信度;
2 每个Box的位置(Box中心坐标x,y以及Box的宽和高);
3 在当前栅格单元有对象的条件下,输入每个类别的概率;作者同时还指出,一个栅格单元只负责检测一个目标,
并且B个Box只有一个用于预测目标的位置,这句话为我们对Train的Image的类别标记和计算loss值提供了依据。
具体loss计算文章中有非常详细的介绍,截图如下:
关于loss中的参数,原文有非常详细的介绍,在这里就不一一展开。只列举出,我在实现的过程中为难的地方:
1 文章中每一个栅格单元会预测2个Box,那么类别标记的时候这两个Box怎么处理的?
我在实现过程中,并没有找到作者关于这2个Box的说明,更别说其他的细节了。
后来,我想,其实这里预测几个Box其实并不重要,作者的目标是一个栅格单元只检测出一个目标,
理论上一个Box就能达到要求,作者在这里选择两个Box我想主要是由于不同的物体形状上可能差异比较大,
两个Box可以分别负责预测两种形状的物体(w>h or w<h)。因此,我在处理时,对于根据目标的长、
宽比确定选择哪一个Box作为作者所说的"responsible"。并没有计算Box与ground truth的IOU,
并找到最大的那个。(这里有处理错误,还请指出来)
2 作者说每一个栅格单元是否包含object的判断方法是:检测目标Box的中心点是否落入到该单元。
由于我的最终目标是要检测人,人一般会比较大,Box的中心点位置标记为object往往不能覆盖到人的有用信息
(如下图中黄色矩形示意),这会较低召回率。为此,类别标记时,我们将一个object差分为4个object,
具体如图所示(原来的框+3个新框)。这样明显增加了类别的召回率。测试时确实效果好了不少。