0%

YOLO简介

滑动窗口是一种解决目标检测的简单方法,但其问题也很明显:不能输出精确的边界框,同时识别精度与滑动窗的大小相关

比如在上图中由于滑动窗的选择大小不精确,就导致没有任何一个窗口中完全包含目标,同时目标边界未必是正方形或者指定的窗口大小

YOLO(You Only Look Once)算法是一种能实现精准定位边界框的目标检测算法

对于$100*100$的 输入,我们在上面铺一层网格,将其分成$3*3=9$个方框(在实际应用中往往为$19*19$或者更多),然后利用网格来修改之前目标定位的输出
在目标定位问题中,我们默认图像中只有单个目标,所以其输出$y$为$8*1$的列向量(仍假设识别行人、车、摩托三种物体)。现在为了达到目标检测即多目标定位的问题,我们就可以把不同的$y$归在网格中的不同格中来同时输出多个$y$
如上图,对于每一个目标,我们将其归至其中心点所属的网格,即左侧车位于绿色格,右侧车位于黄色格中,紫色格则什么都没有。对于每一个网格,我们都输出一个$8*1$的$y$来代表中心点落在该格内的目标的信息,对于整幅输入图像来说最终的输出的规模就变成了$3*3*8$,假如我们把图片分割的足够多,我们就能保证没有网格中包含两个目标,这样我们就能确定的把结果变成卷积层来输出

如果同一个网格中同时包含两种物体,我们可以通过anchor box的的思想来解决这一问题。假设有一辆车和一个人的中心点都同属于一个网格中,我们可以人为的定义两个anchor box,第一个细高,第二个矮胖,来分别模拟行人和车的形状,然后把每一个目标归到与其IoU最大的anchor box中

然后把原来的$8*1$的$y$拓展成$8*2*1$的$y’$,$y’$的前半段表示anchor box 1在该网格的预测结果,后半段表示anchor box 2的预测结果,实验表明如果anchor box设置的全面就可以很好的实现在同一网格中预测多物体的目标
但anchor box思想依旧没有解决在同一网格中含有多相同种类目标的情况,假如anchor box设置数量不够也不能将所有种类的目标检测出来,但由于网格在实际应用中划分的足够小,两个物体的中心点出现在同一网格的概率很小,基本不影响性能

在得出预测结果后,我们对于每一种类进行NMS,消除重复检测及置信度较低的检测,至此Yolo算法的基本流程结束