Yolo算法详解

2023-05-16

Yolo原理

yolo v1

Yolo是一种目标检测算法,目标检测的任务是从图片中找出物体并给出其类别和位置,对于单张图片,输出为图片中包含的N个物体的每个物体的中心位置(x,y)、宽(w)、高(h)以及其类别。

Yolo的预测基于整个图片,一次性输出所有检测到的目标信号,包括其类别和位置。Yolo首先将图片分割为sxs个相同大小的grid:
在这里插入图片描述

Yolo只要求grid中识别的物体的中心必须在这个grid内(具体来说,若某个目标的中心点位于一个grid内,该grid输出该目标类别的概率为1,所有其他grid对该目标预测概率设置为0)。实现方法:让sxs个框每个都预测出B个boungding box,bounding box有5个量,分别为物体的x,y,h,w和预测的置信度;每个grid预测B个bounding box和物体类别,类别使用one-hot表示。

尽管一个grid中有多个bounding box,但是只能识别出一个物体,因此每个grid需要预测物体的类别,但是bouding box不需要;因此对于sxs个grid,每个grid中包含B个bounding box,分类器分出C种不同物体,ground truth长度为sxsx(Bx5+C),boundingbox显示如下:
在这里插入图片描述

图中,bounding box的粗细程度是与置信度的大小成正比。bouding box用于锁定物体的位置,需要输出x,y,h,w四个关于位置的值,若输出的位置坐标是任意的正实数,容易导致模型在不同大小的物体上的泛化能力有较大差异。

针对上述问题,使用x除以grid的宽度,y除以grid的高度;w除以整张图片的宽度,h除以整张图片的高度,具体如下:

在这里插入图片描述

关于置信度confidence,其计算公式为:
在这里插入图片描述
IOU为两个框的交并比,Pr(obj)为grid中有物体的概率。

经过上述处理,每个grid会找到负责的物体,但是如果一个物体很大,grid很小,可能会出现一个物体被多个grid识别的情况,此时可以使用非极大值抑制方法进行处理。
在这里插入图片描述
如上述所示,B1,B2,B3,B4都可能识别为狗,在这四个grid中选择confidence最大的,删掉其余的可以保留唯一的grid,此处为B1。
将B1定义为极大bounding box,然后使用非极大值抑制(NMS)技巧,计算bounding box与其他几个判定为同一类别的交并比(如B1和B2、3、4),如果两个交并比超过一个阈值,认为二者预测同一个物体。

yolo损失函数设计如下:

在这里插入图片描述

yolo v2。

改进了v1版本

使用Fine-Grained细粒度特征
添加了passthrough layer,将前面一层的26x26的特征图和本层13x13特征图连接(例如26x26x512的特征图经过passthrough处理为13x13x2048,然后与后面的13x13x1024的特征图凭借为13x13x3072),然后在该特征图上卷积做预测。

输出层使用卷积层代替v1版本的全连接层

卷积层全部使用BN

引入了RPN中的anchor box的思想
v1版本中使用全连接层直接预测bounding box的坐标值;v2仅使用卷积层预测anchor box的偏移值和置信度,而不是直接预测坐标值

使用K-mens聚类算法
使用k-means让模型自动选择更合适的先验框的场、宽

预测的偏移量限制在一个网格范围内,使模型更稳定
模型早期迭代过程中,预测box的(x,y)坐标会出现不稳定现象。v2预测的是预测框中心相对于网格单元的偏移量,使用logistic将预测值限制在0-1范围内,保证框偏移不超过一个网格。

可以使用多尺度输入图像

高分辨率分类器
目前大部分检测模型都会现在ImageNet分类器上进行与训练,ImageNet大多数选用224x224的图片,分辨率较低。v1将分辨率增加至448x448,但直接切换分辨率导致检测模型无法快速适应高分辨率。v2增加了在ImageNet数据集上使用448x448输入来微调分类网络这一中间过程,使模型适用高分辨率输入。

yolov3

自yolo_v1开始,yolo算是是通过划分单元格做检测,采用leaky relu作为激活函数;yolo_v2开始,yolo将BN和leaky relu连接到每一层卷积层之后。

yolo v3的具体实现

在这里插入图片描述

  • bouding box预测
    yolo v3为每个b box预测4个坐标,tx,ty,tw,th,假设边界框左上角的坐标为(cx,cy),且b box的先验为pw,ph,预测结果如下:
    在这里插入图片描述
    bbox 训练使用均方差损失函数,如预测坐标点的真实值为t*^,那么梯度为真实值与预测值之差t* ^-t*。
    yolo v3使用LR预测每个b box的object的objectness score,若先验框与真实值的重叠成都超过其他先验框,则得分应当为1。若一个先验框不是最优的,但与真实值的重合程度超过了某个阈值,忽略该预测。系统仅为每个真实值指定一个边界框,若一个先验框未指定给真实物体,不会引起坐标或类预测的损失,只有objectness。

  • 类别预测使用独立的logistic分类器,非softmax,训练过程中使用binary交叉熵损失。

  • yolo v3输出三个不同尺度的特征图。yolov3每种尺度预测三个box,anchor设计方式使用聚类,得到9个聚类中心,将其按照大小均分给3个尺度。尺度1:基础网络之后添加一些卷积层再输出box信息;尺度2,尺度1倒数第二层的卷积层上采样(x2)再与16x16大小的特征图相加,再次通过多个卷积后输出box信息,相比尺度1变大两倍;尺度3:类似于尺度2,使用32x32特征图

-基础网络使用设计的Darknet-53
在这里插入图片描述

参考文献:

[1] https://zhuanlan.zhihu.com/p/94986199
[2] https://blog.csdn.net/qq_30815237/article/details/91949543

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Yolo算法详解 的相关文章

随机推荐