目标检测进阶二(Yolo算法)

假设你的输入图像是100✖100的,然后再图像上放一个网格。为了简单这里放置了3✖3的网格(实际实现时会更加精细)。YOLO算法基本思路是:使用图像分类和定位算法(之前博客中介绍过),然后将算法应用到9个格子上。
目标检测进阶二(Yolo算法)_第1张图片
更具体一点,需要这样定义训练标签,对于9个格子中的每一个,指定一个标签y,y是8维向量,即Pc=0或1,表示格子中是否有图像,然后bx,by,bh,bw去表示(如果那个格子中有对象)边界框坐标,再就是c1,c2,c3表示你想要识别的三个类别。所以图里有9个格子,每个格子都对应这样的y。
目标检测进阶二(Yolo算法)_第2张图片
这张图有两个对象,Yolo算法的做法是取两个对象的中点,然后将这个对象分配给包含对象中点的格子。所以左边的汽车就分配到对应的格子上,右边的车就分配到黄色的格子中。
目标检测进阶二(Yolo算法)_第3张图片
所以即使中心格子同时有两车的一部分,我们假设中心格子没有任何我们感兴趣的对象,所以对于中心格子分类标签y就和没有对象的向量类似即Pc=0。而对于绿色格子,它的y中Pc=1,然后写出bx,by,bh,bw来制定边界框位置,然后c1,c2,c3来指定汽车。对于9个格子中任何一个,你都会得到一个8维输出向量,总的输出维度为3✖3✖8.
这个算法的优点在于,可以输出精确的边界框,并且它是个卷积过程,实际上它的运行速度非常快,可以达到实时识别。
还有一个小的细节,如何编码这些bx,by,bh,bw。我们以图片中右边的车为例,橙色格子里有一个对象,所以Pc=1。
目标检测进阶二(Yolo算法)_第4张图片目标检测进阶二(Yolo算法)_第5张图片
再YOLO算法中,对于这个方框我们约定坐上这个点是(0,0),右下这个点是(1,1).,要指定橙色中点的位置,bx大概是0.4,by=0.3,bw应该0.9,bh=0.5。它们的单位是相对格子尺度的比例。bx,by在0-1之间,而bh,bw可能会大于1,因为对象尺寸可能超过格子即一个对象占据几个格子。
目标检测进阶二(Yolo算法)_第6张图片
为了更好的理解YOLO算法,这里我们介绍交并比函数(iou)可以用来评价对象检测算法。在目标检测任务中,我们希望能够同时定位对象,那么图中紫色方框结果是好还是坏?
目标检测进阶二(Yolo算法)_第7张图片目标检测进阶二(Yolo算法)_第8张图片
交并比(iou)函数做的是计算两个边界框交集和并集之比,并集是绿色阴影,交集是橙色阴影。那么交并比就是计算交集的大小除以并集面积。一般约定,在计算检测任务中,IOU大于等于0.5,就说检测正确。
目标检测进阶二(Yolo算法)_第9张图片
如果预测和实际边界框完美重叠,IOU=1。所以这是衡量定位精确度的一种方式。

你的算法可能对同一个对象做出多次检测,非最大值抑制可以确保算法对每个对象只检测一次。
目标检测进阶二(Yolo算法)_第10张图片
假设你需要在这张图中检测行人和汽车,你可以在上面放19✖19网格,理论上这个车辆只有一个中点,所以它应该只分配到一个格子里。实践中当你跑算法时,每个格子都跑一次,对应的格子可能都会认为中点在它的内部。
目标检测进阶二(Yolo算法)_第11张图片
因为你要在19✖19个格子上都跑一次算法,那么可能很多格子都会举手说我的Pc,我这个格子里有车的概率很高,而不是361个格子中仅有两个格子,最后可能会对同一个对象做出多次检测。
目标检测进阶二(Yolo算法)_第12张图片
所以非最大值抑制就是清理这些检测结果,这样一辆车只检测一次。,首先看看每个检测结果相关的概率Pc,看概率最大的那个,这个例子中是0.9即最可靠的检测,我们把它表示出来,然后非最大值抑制就会逐一审视剩下的矩形,那么这些输出就会被抑制。非最大值抑制即只输出概率最大的分类结果。

目前为止,每个格子只能检测出一个对象,如果想让一个格子检测出多个对象,这时我们就要用到Anchor boxes的概念。
目标检测进阶二(Yolo算法)_第13张图片
对于这个例子,我们继续使用3✖3网格,注意行人的中点和汽车的中点几乎在同一个地方。对于这个格子输出的y,它的c1,c2,c3就不能确定了,因为它同时存在两个对象。anchor box的思路是这样的,预先定义两个不同形状的anchor box。
目标检测进阶二(Yolo算法)_第14张图片
我们把预测结果和这两个anchor box关联气来,所以输出y要改变成16维,首先是和anchor box1关联的8个输出参数(Pc,bx,by,bw,bh,c1,c2,c3)然后和anchor box2关联的8个输出参数与1相同。因为行人的形状更类似于anchor box1的形状,所以可以用前8个参数来描述人,而车更类似于anchor box2,可以用后8个参数来描述车。

最后用一个例子来总结Yolo算法,如图,我们采用3✖3网格以及两个anchor box。那么对于9个格子,每个格子都会有两个边界框。
目标检测进阶二(Yolo算法)_第15张图片
接下来你放弃概率低的预测,去掉这些连神经网络都认为没有对象的边界框。目标检测进阶二(Yolo算法)_第16张图片
最后,如果你有三个对象检测类别,那么分别对每个类别采用非最大值抑制,运行三次得到最终预测结果。
目标检测进阶二(Yolo算法)_第17张图片

你可能感兴趣的:(目标检测进阶二(Yolo算法))