yolo v1算法理解

写的比较明确,不是笼统的介绍,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个新框)。这样明显增加了类别的召回率。测试时确实效果好了不少。











猜你喜欢

转载自blog.csdn.net/zlsjsj/article/details/80513952