一文读懂YOLOv1和YOLOv2

一、检测算法分类

1.1 one-stage

典型的算法代表是:YOLO系列

one-stage的优缺点:

优点:识别速度非常快,适合做实时检测任务

缺点:正确率相比较低

示例:

重要参数介绍:

FLOPs表示模型进行一次前向传播(即处理一张图像)所需要的浮点运算次数。它是一个衡量算法效率的关键指标,与模型的计算量和推断速度密切相关。

FPS:每秒可以处理的图像数量。

对比SSD300,SSD500,YOLOv2 608 * 608,Tiny YOLO这几个模型,发现YOLO的模型相较其他的更优。

1.2 two-stage

典型算法有:two-stage:Faster-rcnn和mask-Rcnn系列

two-stage的优缺点:

优点:正确率比较高,识别效果理想

缺点:识别速度比较慢,通常达到5FPS

步骤:

两阶段目标检测器是一种先生成候选框,然后对候选框进行分类和回归的检测方法。这种方法主要包括两个阶段:

第一阶段:生成候选框。这通常通过一个类似于Selective Search或EdgeBoxes等区域提名算法来实现,该算法从输入图像中生成多个候选框。每个候选框都会经过一个CNN模型进行特征提取,然后通过分类器进行过滤,保留与目标物体更相似的候选框。

第二阶段:在保留的候选框上进行精细的分类和回归。这个阶段通常使用另一个CNN模型或类似SVM的分类器来进行分类和回归。对于每个候选框,可能需要预测物体的类别、位置和大小等。

Fast-RCNN模型:

二、YOLO算法评价指标

2.1 置信度(置信度=类概率*IoU)

表示某个预测框中存在目标的可能性大小,是一个介于 0 到 1 之间的数值。例如,一个预测框的目标存在置信度为 0.8,意味着模型有 80% 的把握认为该预测框中包含一个目标。

2.2 IOU

IoU 实际上就是预测框和真实框面积的交集与并集的比值(两边界框相交部分面积与相并部分面积之比)。我们认为只有 IoU>0.5 的 priorbox 才是有价值的。

示例:

2.3 map指标

在开始介绍map指标前,先回归下精确度(预测的结果中有多少是正确的),召回率(真实的结果中有多少是预测正确的)怎么算的。

根据不同的阈值,绘制出召回率和精确率的曲线将曲线以下的面积作为MAP值当MAP值越大,则表示指标越好 。

补充:

mAP50: 表示当 IoU 阈值为 0.5 时模型的平均精度。即只考虑预测框与真实框的重叠部分达到 50% 及以上的情况,计算所有类别的 AP(Average Precision)的平均值,AP 衡量的是随着不同置信度阈值的召回率变化,精度是如何变化的。mAP50 是一个固定的评估标准,仅关注 IoU 为 0.5 这一特定阈值下的模型性能。

mAP50 - 95: 衡量的是模型在 IoU 阈值从 0.5 到 0.95 范围内的平均精度。计算的是所有类别的 AP 的平均值,其中 AP 是在 IoU 阈值从 0.5 到 0.95 的每个 0.05 步长上计算的。mAP50 - 95 考虑了更广泛的 IoU 范围,能够评估模型在不同重叠程度下的性能,提供了更全面的模型性能评估,是一个更严格的评估指标,其值通常比 mAP50 要低。

三、YOLOv1

简介:YOLO(You Only Look Once)算法是一种目标检测算法,把检测问题转换为回归问题,输出x,y,w,h。一个cnn就可以解决可以对视频进行实时检测,应用领域非常广

3.1 YOLOv1的核心思想

利用整张图作为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别。

3.2 实现方法

将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。

每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的:

该表达式含义:如果有object落在一个grid cell里,则第一项取1,否则取0。 第二项是预测的bounding box和实际的groundtruth之间的IoU值。

每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。则SxS个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。

注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的。

bounding box:

即检测框,就是目标外围带颜色的框框,一般简称 bbox。

YOLO并没有预先设置2个bounding box的大小和形状 ,也没有对每个bounding box分别输出一个对象的预测。它的意思仅仅是对一个对象预测出2个bounding box,选择预测得相对比较准的那个。

目标检测算法中有几种标识物体位置的框:

边界框,bounding box,用于标识物体的位置,常用格式有左上右下坐标,即xyxy;中心宽高,即x,y,w,h。

真实框,Ground truth box, 是人工标注的位置,存放在标注文件中

预测框,Prediction box, 是由目标检测模型计算输出的框

锚框,Anchor box,根据数据集的对象位置类聚出来,用于预测框计算做参考;

3.2 YOLOv1的网络架构

网络结构借鉴了 GoogLeNet 。24个卷积层,2个全链接层。(用1×1 reduction layers 紧跟 3×3 convolutional layers 取代Goolenet的 inception modules )

YOLOv1 训练时用的是 224*224像素,测试时使用 448*448像素,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x(2x5+20)即1470的一个tensor。

每个grid有30维,这30维中,8维是回归box的坐标,2个B是box的confidence,还有20维是类别。 其中坐标的x,y(相对于网格单元格边界的框的中心)用对应网格的归一化到0-1之间,w,h用图像的width和height归一化到0-1之间。

注意:

由于输出层为全连接层,因此在检测时,YOLOv1模型的输入只支持与训练图像相同的输入分辨率。

虽然每个格子可以预测B个bounding box,但是最终只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。

即:给个一个输入图像,首先将图像划分成7*7的网格;

对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率);

根据上一步可以预测出7*7*2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可。

3.3 损失函数

YOLO-V1算法最后输出的检测结果为7x7x30的形式,其中30个值分别包括两个候选框的位置和有无包含物体的置信度以及网格中包含20个物体类别的概率。那么YOLO的损失就包括三部分:位置误差,confidence误差,分类误差。 损失函数的设计目标就是让坐标(x,y,w,h),confidence,classification这个三个方面达到很好的平衡。

3.4 NMS(非极大值抑制)

对于以下这种情况,我们需要将分数排序,得到分数从大到小顺序的bbox;

每一个bbox就代表一个框,然后取分数最大的bbox,记为"bbox_max",将其他的bbox与bbox_max进行比较,其他的bbox记为"bbox_cur",如果IoU(bbox_max, bbox_cur) > 0.5,那么将bbox_cur的分数设为0,将其过滤到。

经过这样的一次迭代,完成了第一次的遍历。然后我们选择第二大分数的bbox,并设为"bbox_max",进行和之前一样的操作,按照相同的方式进行遍历,最后类别为狗的,分数不是0的bbox,只剩下2个,然后我们按照同样的方式,对其他19类进行同样的操作。

注意:0.5这个阈值可以根据实际调节。

3.5 YOLOv1存在的优缺点

YOLO V1存在的优缺点:

优点:速度快,简单

问题1:每个cell只预测1个类别,如果重叠无法解决

问题2:小物体检测效果一般,长宽比可选,但单一

四、YOLOv2

4.1 介绍

YOLOv2相对v1版本,在继续保持处理速度的基础上,从预测更准确(Better),速度更快(Faster),识别对象更多(Stronger)这三个方面进行了改进。其中识别更多对象也就是扩展到能够检测9000种不同对象,称之为YOLO9000。

4.2 YOLOv2的改进点

4.2.1 Batch Normalization

YOLOv2 版本舍弃 Dropout,卷积后全部加入 Batch Normalization,网络的每一层的输入都做了归一化,收敛相对更容易,经过 Batch Normalization 处理后的网络会提升 2% 的 mAP。

批量归一化有助于解决反向传播过程中的梯度消失和梯度爆炸问题,降低对一些超参数(比如学习率、网络参数的大小范围、激活函数的选择)的敏感性,并且每个batch分别进行归一化的时候,起到了一定的正则化效果,从而能够获得更好的收敛速度和收敛效果。

4.2.2 更高的图像分辨率

YOLOv1使用ImageNet的图像分类样本采用 224*224 作为输入,来训练CNN卷积层。然后在训练目标检测时,检测用的图像样本采用更高分辨率的 448*448 像素图像作为输入,但这样不一致的输入分辨率肯定会对模型性能有一定影响。

YOLOv2在采用 224*224 图像进行分类模型预训练后,再采用 448*448 高分辨率样本对分类模型进行微调(10个epoch),使网络特征逐渐适应 448*448 的分辨率。然后再使用 448*448 的检测样本进行训练,缓解了分辨率突然切换造成的影响,最终通过使用高分辨率,mAP提升了4%。

4.2.3 先验框(anchor boxes)

YOLOv1包含有全连接层,从而能直接预测Bounding Boxes的坐标值。Faster R-CNN算法只用卷积层与Region Proposal Network来预测Anchor Box的偏移值与置信度,而不是直接预测坐标值。

借鉴Faster RCNN的做法,YOLOv2也尝试采用先验框(anchor boxes)。在每个grid预先设定一组不同大小和宽高比的边框,来覆盖整个图像的不同位置和多种尺度,这些先验框作为预定义的候选区在神经网络中将检测其中是否存在对象,以及微调边框的位置。

YOLOv2如果每个grid采用9个先验框,总共有13*13*9=1521个先验框。所以最终YOLOv2去掉了全连接层,使用Anchor Boxes来预测 Bounding Boxes。作者去掉了网络中一个Pooling层,这让卷积层的输出能有更高的分辨率,同时对网络结构进行收缩让其运行在416*416而不是448*448。

图片中的物体都倾向于出现在图片的中心位置,特别是那种比较大的物体,所以有一个单独位于物体中心的位置用于预测这些物体。YOLOv2的卷积层采用32这个值来下采样图片,所以通过选择416*416用作输入尺寸最终能输出一个13*13的Feature Map。使用Anchor Box会让精确度稍微下降,但用了它能让YOLOv2能预测出大于一千个框

4.2.3 YOLOv2-聚类提取先验框

之前Anchor Box的尺寸是手动选择的 ,所以尺寸还有优化的余地。YOLOv2尝试统计出更符合样本中对象尺寸的先验框,这样就可以减少网络微调先验框到实际位置的难度。YOLOv2的做法是对训练集中标注的边框( w, h )进行K-means聚类分析,以寻找尽可能匹配样本的边框尺寸。因为我们的目的是提高IOU分数,这依赖于Box的大小,所以距离度量的使用:

其中,centroid是聚类时被选作中心的边框,box就是其它边框,d就是两者间的"距离",IOU越大,"距离"越近。YOLOv2给出的聚类分析结果如下图所示,通过分析实验结果(Figure 2),在model复杂性与high recall之间权衡之后,选择聚类分类数K=5。

流程:

在模型训练之前,提前把训练集的标签值提取出来,通过k-means聚类的方法,聚类出5个类别。结果当作是先验框。 最后在进行模型训练。

4.2.4 Directed Location Prediction

Directed Location Prediction是一种方法,其目的是进行位置微调,预测偏移量。它用于限制偏移量,以防止在训练时出现发散。这种方法预测的是相对位置,即相对于网格的偏移量。模型输出的值为tx、ty。

网络使用一个 Logistic Activation来对于网络预测结果进行限制,让结果介于0到1之间。 网络在每一个网格单元中预测出5个Bounding Boxes,每个Bounding Boxes有五个坐标值tx,ty,tw,th,t0,他们的关系见下图。假设一个网格单元对于图片左上角的偏移量是cx,cy,Bounding Boxes Prior的宽度和高度是pw,ph,那么预测的结果见下图右面的公式:

预测的偏移量包括tx、ty、tw、th(第一次为先验框及初始化的中心坐标在模型中输出的结果与真实框损失值得到的偏移量值)。调整后的预测值bx、by、bw、bh是通过计算得到的。

示例:

4.2.5 Fine-Grained Features

首先介绍感受野:

概述来说就是特征图上的点能看到原始图像多大区域。

思考这样一个问题:如果堆叠 3 个 3 * 3 *的卷积层,*并且保持滑动窗口步长为 1,其感受野就是 7 * 7 的了,这跟一个使用 7*7 卷积核的结果是一样的,那为什么非要堆叠 3 个小卷积呢?

目标检测面临的一个问题是图像中的需要检测的目标会有大有小,输入图像经过多层网络提取特征,最后输出的特征图中(比如YOLOv2中输入416*416经过卷积网络下采样最后输出是13*13),较小的对象可能特征已经不明显甚至被忽略掉了。为了更好的检测出一些比较小的对象,最后输出的特征图需要保留一些更细节的信息。于是YOLOv2引入一种称为passthrough层的方法在特征图中保留一些细节信息。具体来说,就是在最后一个pooling之前,特征图的大小是26*26*512,将其1拆4,直接传递(passthrough)到pooling后(并且又经过一组卷积)的特征图,两者叠加到一起作为输出的特征图。

4.2.6 Multi-Scale Training

YOLOv2能运行于不同尺寸的图片之上,将这一思路用于训练模型中。区别于之前的补全图片的尺寸的方法,YOLOv2每迭代几次都会改变网络参数。每10个Batch,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320,352.....608},最小320*320,最大608*608,网络会自动改变尺寸,并继续训练的过程。图片尺寸不是固定值的原因是:整个网络结构不包含全连接层,因此输入图片的大小可以任意

注意:输入的图片应该需要被32整除

4.3 YOLOv2的网络结构(DarkNet)

YOLOv2基于一个新的分类model,YOLOv2使用3*3filter,每次Pooling之后都增加一倍Channels的数量。YOLOv2使用Global Average Pooling,使用Batch Normilazation来让训练更稳定,加速收敛,使model规范化。最终的model--Darknet19,有19个卷积层和5个maxpooling层。

相关推荐
思绪无限2 小时前
YOLOv5至YOLOv12升级:体育赛事目标检测系统的设计与实现(完整代码+界面+数据集项目)
深度学习·yolo·目标检测·目标跟踪·体育赛事目标检测·yolov12·yolo全家桶
深度学习lover2 小时前
<数据集>yolo 柑橘识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·柑橘识别
存在的五月雨2 小时前
Python操作 调用yolov8n-pose
开发语言·python·yolo
思绪无限2 小时前
YOLOv5至YOLOv12升级:遥感目标检测系统的设计与实现(完整代码+界面+数据集项目)
人工智能·深度学习·yolo·目标检测·遥感目标检测·yolov12·yolo全家桶
穿过锁扣的风2 小时前
从零吃透 YOLO:从 v1 到 v2,实时目标检测的完整进化之路
人工智能·yolo·目标检测
思绪无限1 天前
YOLOv5至YOLOv12升级:条形码二维码检测系统的设计与实现(完整代码+界面+数据集项目)
深度学习·yolo·目标检测·条形码二维码检测·yolov12·yolo全家桶
格林威1 天前
如何用 eBPF 监控 GigE Vision 相机网络性能
网络·人工智能·数码相机·yolo·计算机视觉·视觉检测·工业相机
思绪无限1 天前
YOLOv5至YOLOv12升级:植物叶片病害识别系统的设计与实现(完整代码+界面+数据集项目)
深度学习·yolo·目标检测·yolov12·yolo全家桶·植物叶片病害检测
白羊by1 天前
YOLOv1~v11 全版本核心演进总览
深度学习·算法·yolo