初始yolo
之前我们可能听说过yolo,并且还知道这个是用来目标检测和目标追踪的。但是我们并没有深入了解过其中的内部算法原理。所以今天来学习下yolov1,从最基础的来学习。
初识yolo
YOLO(You Only Look Once)是一种基于深度学习的目标检测算法,由Joseph Redmon等人于2016年提出。它的核心思想是将目标检测问题转化为一个回归问题,通过一个神经网络直接预测目标的类别和位置。YOLO算法将输入图像分成SxS个网格,每个网格负责预测该网格内是否存在目标以及目标的类别和位置信息。此外,YOLO算法还采用了多尺度特征融合的技术,使得算法能够在不同尺度下对目标进行检测。 相比于传统的目标检测算法,如R-CNN、Fast R-CNN和Faster R-CNN等,YOLO算法具有更快的检测速度和更高的准确率。这得益于其端到端训练方式和单阶段检测的特性,使其可以同时处理分类和定位任务,避免了传统方法中的多阶段处理过程。因此,YOLO算法广泛应用于实时目标检测和自动驾驶等领域。
one-stage的优缺点: 优点:识别速度非常快,适合做实时检测任务 缺点:正确率相比较低
two-stage的优缺点: 优点:正确率比较高,识别效果理想 缺点:识别速度比较慢,通常达到5FPS
这里我们的yolo就是一种one-stage的模型。
yolo评价指标
1 mAp(Mean Average Precision)
针对所有类别的平均精度,是衡量模型整体检测精度的关键指标。公式:mAP = 所有类别AP的平均值
YOLOv1 在 PASCAL VOC 数据集上的 mAP 约为 63.4%(对比同期算法如 R-CNN 的 66.4%,虽略低但速度远超)。
说白了就是,我的预选框与真实框之间的交集/预选框和真实框之间的并集
3 置信度
表示某个预测框中存在目标的可能性大小,是一个介于 0 到 1 之间的数值。例如,一个预测框的目标存在置信度为 0.8,意味着模型有 80% 的把握认为该预测框中包含一个目标。
4 准确率召回率
但这个受到一个阈值的影响,前面我们说了置信度,我们会设置一个阈值,当置信度大于我们的阈值那么就属于这个类,如果小于就丢弃了。
yolo算法
1 目标检测要解决的3大问题
a、有没有?
图片中是否有要检测的物体?(检测物体,判定前景背景)
b、是什么?
这些物体分别是什么?(检测到的物体是什么)
c、在哪里?
这些物体在哪里?(画框,描边,变色都行)
2 核心思想
将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。说白了就是,我们把一个图片画成n*n个方格,然后对每一个方格找出两个预选框(这里两个预选框的规格是固定的,后面升级会变化),然后如果这个方格里面刚好包含了我们真实框的中心点,那么这个方格就负责预测我们的物体,然后接下来就是对我们的预选框进行变化最终和我们的真实框一致。
3 网络架构
网络结构借鉴了 GoogLeNet 。24个卷积层,2个全链接层。(用1×1 reduction layers 紧跟 3×3 convolutional layers 取代Goolenet的 inception modules )
经过一系列的卷积和全连接层,最终我们的图片变成了7*7*30这样大小的一个数据,其中7*7就是把我们的图像变化成了7*7大小的方格,30包含了三部分(5,5,20),5是表示这个方格的预选框大小(x,y,w,h,z)
x,y表示预选框的中心点位置
w,h表示预选框的宽和高
z 表示或者预选框中有物体的置信度
后面20个表示对20种物体进行预测的种类。
4 损失函数
YOLO-V1算法最后输出的检测结果为7x7x30的形式,其中30个值分别包括两个候选框的位置和有无包含物体的置信度以及网格中包含20个物体类别的概率。那么YOLO的损失就包括三部分:位置误差,confidence误差,分类误差。 损失函数的设计目标就是让坐标(x,y,w,h),confidence,classification这个三个方面达到很好的平衡。
其实主要也是围绕图片中是否有要检测的物体?这些物体分别是什么?这些物体在哪里?
非极大值抑制
虽然开始的时候我们说了,我们会让真实框的中心点来负责预测,然后对这个取预选框,但是在我们检测的时候,我们可能会在检测到物体但但不是中心点的地方看作为中心点,所以这里用非极大值抑制,这样就会把非极大值给舍去,留下一个效果最好的。
优缺点
YOLO V1存在的优缺点:
优点:速度快,简单
问题1:每个cell只预测1个类别,如果重叠无法解决
问题2:小物体检测效果一般,长宽比可选,但单一。