yolo9000:Better, Faster, Stronger的目标检测网络

在这里插入图片描述

目录

  • 一、回顾yolov1
  • 二、yolov2详细讲解
    • 2.1 Better部分创新点
      • (1)Batch Normalization(批量归一化)
      • (2)High Resolution Classifier---高分辨率分类器
      • (3)Anchor Boxes---锚框
      • (4)Dimension Clusters---数据集标准框的长宽进行聚类
      • (5)Direct location prediction---位置预测
      • (6)Fine-Grained Features---细粒度特征
      • (7)Multi-Scale Training---多尺度训练
    • 2.2 Faster快速训练创新
      • YOLOV2的输入与输出
    • 2.3 Stronger更强的网络改进

在这里插入图片描述
【yolov1:背景介绍与算法精讲】

一、回顾yolov1

为什么要提出yolov2呢,因为yolov1在目标检测过程中存在很多缺陷,并且在检测性能方面还需要有很大提升,yolov1算法缺点如下:

  • 1.定位性能较差:一方面是下采样太多会导致空间信息的缺失,所以信息是粗粒度的。另外一方面生成的bbox大小是不受限制的。
  • 2.recall召回率比较差:YOLOv1在预测过程中只预测一个边界框,而不是多个尺度或形状的边界框。这种设计使得YOLOv1对目标的位置相对敏感。如果目标物体的中心位置不在预测的网格单元中,模型可能会难以准确地检测到目标。
  • 3.检测小目标和密集目标性能比较差:v1中的图像被划分为7x7个grid cell,每个网格只能预测一个类别,所以一张图片最多预测48个类别,每个网格太大,无法精准预测小目标物体。
  • 4.虽然速度快,但是map准确度比较低:YOLOv1仅在一个尺度上进行目标检测,无法充分利用多尺度信息。多尺度特征融合可以帮助模型更好地捕捉不同尺度目标的特征,提高检测的准确性。因此,YOLOv1在处理不同尺度目标时可能表现较差,导致mAP值低下。

一个cell单元只能属于一个类,如果一个cell单元里面存在两个物体,只能预测一种类别,下面是以一个cell为中心点生成的红和绿bounding box框,红色框为狗类,绿色框中为一个鸟,如果已经预测该cell为狗了,则无法识别绿色框中的鸟。
在这里插入图片描述

二、yolov2详细讲解

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

YOLOv2的提出是尽可能的去解决v1中无法解决的难题。yolov2是在2016年提出来的,发布在CVPR2017上,主要创新点集中在原文中的Better章节里面,原文链接:yolo9000论文
在这里插入图片描述

2.1 Better部分创新点

YOLOv2的Better部分主要的创新点可以归纳为以下几项:

  1. Batch Normalization—批量归一化处理
  2. High Resolution Classifier—高分辨率分类器
  3. Anchor Boxes—锚框
  4. Dimension Clusters—数据集标准框的长宽进行聚类
  5. Direct location prediction—位置预测
  6. Fine-Grained Features—细粒度特征
  7. Multi-Scale Training—多尺度训练

下面这个表列出了从 YOLO 到 YOLOv2不同改进方法对mAP值的提升效果。
在这里插入图片描述

(1)Batch Normalization(批量归一化)

批量归一化可显着提高收敛性,同时消除对其他形式正则化的需要。通过在 YOLO 中的所有卷积层上添加批量归一化,我们的 mAP 提高了 2% 以上。批量归一化还有助于规范模型。通过批量归一化,我们可以从模型中删除 dropout,而不会过度拟合。

BN的提出最开始是要解决ICS现象,那么什么是ICS现象呢?从下面这幅图理解,我们神经网络是累乘的形式,当中间的乘积出现增加或者减少的情况,会导致梯度爆炸或者梯度消失的现象。

在这里插入图片描述

内部协变量偏移(Internal Covariate Shift)是深度学习中一个常见的问题。它指的是在神经网络的训练过程中,网络的每一层输入分布的变化导致模型难以训练的情况。这种现象通常在深度神经网络的训练中出现,尤其是在使用批量归一化(Batch Normalization)等技术之前。

使用BN之后有以下优点:

  • 可以用更大学习率,加速模型收敛,如果学习率过大,会导致梯度的递增,从而导致模型无法训练,使用BN之后可以使用较大的学习率,从而加速学习率的收敛;
  • 可以不用精心设计权值初始化:因为数据的尺度可能会逐渐的变大或者变小,从而导致梯度激增或者减小,使用BN可以规范我们的数据尺度;
  • 可以不用dropout或较小的dropout:在实验过程中得到的结果;
  • 可以不用L2或者较小的weight decay:实验所得;
  • 可以不用LRN(local response normalization):对数据尺度进行规范

BN层原理
说通俗点就是将我们的输入的批量数据给归一化到0均值,1标准差,首先计算mini-batch的平均值,再计算方差,然进行normalize(减均值除以标准差操作),完成0均值,1标准差,最后再进行affine transform缩放和位移;
关于批量归一化的详细解释和实验可以参考该博客:正则化(weight_decay、dropout、Batch Normalization)
在这里插入图片描述

在这里插入图片描述

注意:均值、方差采用指数加权平均计算得来,测试时候采用当前统计值;
γ、β是在模型训练过程中计算出来的,会发生变化;

(2)High Resolution Classifier—高分辨率分类器

所有最先进的检测方法都使用在 ImageNet上预训练的分类器。从 AlexNet 开始,大多数分类器对小于 256 × 256 的输入图像进行操作。最初的YOLOV1以224×224训练分类器网络,并将分辨率提高到448进行检测。这意味着网络必须同时切换到学习对象检测并适应新的输入分辨率。由于训练阶段和测试阶段输入图像的尺寸大小不一致,这会对模型产生一定的影响,所以在YOLOV2中,我们的训练阶段和测试阶段的图像大小尺寸保持了一致,都为448x448。

在这里插入图片描述
对于 YOLOv2,首先在 ImageNet 上以全 448×448 分辨率微调分类网络训练 10 个 epoch。这使得网络有时间调整其滤波器,让网络逐渐去适应448x448分辨率的图像,以便在更高分辨率的输入上更好地工作。然后我们在检测时使用同样分辨率的图像,这样就能减轻图像分辨率突然切换所带来的影响。这个高分辨率分类网络使mAP值 增加了近 4%。

(3)Anchor Boxes—锚框

借鉴Faster RCNN的做法,YOLO2也尝试采用先验框(anchor)。在每个grid预先设定一组不同大小和宽高比的边框,来覆盖整个图像的不同位置和多种尺度,这些先验框作为预定义的候选区在神经网络中将检测其中是否存在对象,以及微调边框的位置。这样的方法使得召回率大幅提升到88%,同时mAP轻微下降了0.2。

之前YOLO1并没有采用先验框,并且每个grid只预测两个bounding box,整个图像98个,yolov1生成的2个bounding box是随机尺度,不受限制,生成的bbox可能很大也可能很小,这样会导致很多bbox无法使用;如果bbox太大,预测的物体太小,需要经过多次调整才能达到合适的大小。
在这里插入图片描述


yolov1的bbox尺寸没有任何限制,完全就是野蛮生长,会导致很多bbox太大或者太小,YOLOv2使用anchor之后可以指定我们锚框的长宽大小。YOLO2每个grid采用5个先验框,总共有13135=845个先验框,在训练过程中,我们只使用与标注框IOU最大的anchor进行拟合
在这里插入图片描述

YOLOv2中移除了全连接层,并使用锚定框来预测边界框。首先,消除一个池化层,使网络的卷积层的输出具有更高的分辨率。还将网络缩小到416个输入图像,而不是448×448。这样做是因为想要在特征图中有奇数个位置所以只有一个中心单元格。物体,尤其是大的物体,往往占据图像的中心,所以最好在图像中心有一个位置来预测这些物体,而不是四个位置都在附近。YOLO的卷积层对图像进行了32倍的采样,所以通过使用416的输入图像,得到了13 × 13的输出特征图,所以在训练阶段改成了416x416尺寸的图像。
在这里插入图片描述

如果没有锚框,YOLOv1模型的 mAP 为 69.5,召回率为 81%。使用锚框,我们的模型获得了 69.2 mAP,召回率为 88%。尽管 mAP 下降,但召回率的增加意味着我们的模型还有更大的改进空间。recall增加了,导致precision降低了(因为预测框的个数大大增加了,无用的框太多了。)

(4)Dimension Clusters—数据集标准框的长宽进行聚类

在将锚框与 YOLO 一起使用时,遇到了两个问题。首先,bbox尺寸是手工挑选的。网络可以学习适当地调整框,但如果我们为网络选择更好的先验框,我们可以使网络更容易学习并且预测良好的结果。

之前先验框都是手工设定的,YOLO2尝试统计出更符合样本中对象尺寸的先验框,这样就可以减少网络微调先验框到实际位置的难度。YOLO2的做法是对训练集中标注的边框进行聚类分析,以寻找尽可能匹配样本的边框尺寸。

如果选取anchor的数量和尺寸使用的是k-means聚类方法,聚类算法最重要的是选择如何计算两个边框之间的“距离”,对于常用的欧式距离,大边框会产生更大的误差,但我们关心的是边框的IOU。所以,YOLO2在聚类时采用以下公式来计算两个边框之间的“距离”。
在这里插入图片描述

在这里插入图片描述
在 VOC 和 COCO 上对框尺寸进行聚类。在边界框的尺寸上运行 k 均值聚类,以获得模型的良好先验。左图显示了在 k 的各种选择下得到的平均 IOU。 k = 5 可以很好地权衡模型的召回率和复杂性。右图显示了 VOC 和 COCO 的相对质心。 COCO 的尺寸变化比 VOC 更大。

通过聚类图可以发现,虽然anchor越多 AVG IOU的值越高,但是这会增加网络训练过程中的负担,无用的框越多会导致模型精度的降低。

(5)Direct location prediction—位置预测

当将锚框与 YOLO 一起使用时,遇到第二个问题是:模型不稳定,尤其是在早期迭代期间。大多数不稳定性来自于预测盒子的 (x, y) 位置。在区域提议网络中,网络预测值 tx 和 ty,并且 (x, y) 中心坐标计算如下:
在这里插入图片描述

由于tx和ty的取值没有任何约束,因此预测边框的中心可能出现在任何位置,训练早期阶段不容易稳定。YOLOV2调整了预测公式,使用sigmoid激活函数将预测的偏移量规范在0 和 1 之间,将预测边框的中心约束在特定gird网格内,公式如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参考上图,由于σ函数将tx和ty约束在(0,1)范围内,所以根据上面的计算公式,预测边框的蓝色中心点被约束在黄色背景的网格内。约束边框位置使得模型更容易学习,且预测更为稳定。由于限制了位置预测,因此参数化更容易学习,从而使网络更加稳定。使用维度聚类并直接预测边界框中心位置,与使用锚框的版本相比,YOLO 提高了近 5%。

(6)Fine-Grained Features—细粒度特征

对于目标检测而言,一个常见问题是输入图像中的对象大小各异。在经过多层卷积网络提取特征后,最终输出的特征图(如YOLOv2中的13x13)可能已经无法准确捕捉较小对象的特征,甚至可能忽略它们。为了更好地检测小尺寸的对象,需要在最终输出的特征图中保留更丰富的细节信息。

为了解决这个问题,YOLOv2引入了一种称为"passthrough层"的方法,用于在特征图中保留细节信息。具体而言,在最后一个池化层之前,特征图的尺寸为26x26x512。通过将特征图进行1拆4的操作,将其直接传递(passthrough)到经过池化后(并经过一组卷积操作)的特征图上,然后将两者叠加在一起作为输出的特征图,拼接成为13x13x3072的特征图。

通过这种方式,YOLOv2可以将较低层级的特征信息与较高层级的特征信息相结合,使得输出的特征图能够同时包含更多的上下文信息和细节信息。这样一来,YOLOv2在检测小尺寸对象时会更加准确,因为细粒度的特征得到了保留和利用。这种passthrough层的引入提高了YOLOv2的目标检测性能,尤其是对于小尺寸对象的检测。
在这里插入图片描述
具体特征图是如何1拆4的呢,可以参考下面这张图片,假设下面是一个3通道的特征图,尺寸是4X4的,拆分之后变成12通道的2x2特征图,面积变为原来的1/4,通道数变为原来的4倍。
在这里插入图片描述

(7)Multi-Scale Training—多尺度训练

我们先看一下原文是怎么说的:原始YOLO使用的输入分辨率为448×448。通过添加锚框,我们将分辨率更改为416×416。然而,由于我们的模型仅使用卷积层和池化层,因此可以动态调整大小。我们希望 YOLOv2 能够在不同大小的图像上运行,因此我们将其训练到模型中。我们不是固定输入图像的大小,而是每隔几次迭代就改变网络。

我们的网络每 10 个批次随机选择新的图像尺寸。由于我们的模型按 32 倍下采样,因此我们从以下 32 的倍数中提取:{320, 352, …, 608}。因此,最小的选项是 320×320,最大的选项是 608×608。我们将网络大小调整到该尺寸并继续训练。

使用这种方法在低分辨率下,YOLOv2 作为一种廉价且相当准确的检测器运行。在 288×288 分辨率下,它的运行速度超过 90 FPS,mAP 几乎与 Fast R-CNN 一样好。这使得它非常适合较小的 GPU、高帧率视频或多视频流。

注意:为什么yolov1没办法实现多尺度训练,这是由于网络结构导致的,因为yolov1网络中有两个全连接层,导致我们输入的尺寸必须固定为224x224,但是YOLOv2采用全卷积网络结构,没有全连接层。这使得网络能够接受不同尺寸的输入图片,因为卷积层不关心输入图像的维度,而是在整个图像上执行卷积操作。所以输入任何尺寸的图像都能进行训练。 Darknet-19网络结构图如下。
在这里插入图片描述

使用不同尺度训练得到的mAP和实时检测FPS如下,使用了多尺度训练YOLOV2mAP值最高,也达到了实时检测的FPS:
在这里插入图片描述

2.2 Faster快速训练创新

VGG-16
大多数检测框架依赖 VGG-16 作为基本特征提取器。 VGG-16 是一个强大、准确的分类网络,但它过于复杂。 VGG-16 的卷积层需要 306.9 亿次浮点运算才能以 224 × 224 分辨率处理单个图像,下图是VGG-16的网络参数图,光三个全连接层所占的参数都将近70M。YOLO 的自定义模型在 ImageNet 上的准确率达到 88.0%,而 VGG-16 的准确率为 90.0%。
在这里插入图片描述

Darknet-19
与 VGG 模型类似,我们主要使用 3 × 3 滤波器,并在每个池化步骤后将通道数量加倍 [17]。继 Network in Network (NIN) 的工作之后,我们使用全局平均池化进行预测,并使用 1 × 1 滤波器来压缩 3 × 3 卷积之间的特征表示,最终模型称为 Darknet-19,具有 19 个卷积层和 5 个最大池层。Darknet-19 仅需要 55.8 亿次操作来处理图像,却在 ImageNet 上实现了 72.9% 的 top-1 准确率和 91.2% 的 top-5 准确率。

YOLOV2的输入与输出

图像尺寸从4164163 变换到 13135*25,一共划分了13x13个grid cell,每个grid cell设置5个anchor,去掉了全连接层,采用了5个先验框,每个anchor有边框坐标(x,y,w,h)+1个边框置信度+20个类别。

在这里插入图片描述

2.3 Stronger更强的网络改进

该部分主要是提出了一种对分类和检测数据进行联合训练的机制。该方法使用标记为检测的图像来学习特定于检测的信息,例如边界框坐标预测和对象性以及如何对常见对象进行分类。它使用仅具有类标签的图像来扩展它可以检测的类别数量。

在训练期间,混合来自检测和分类数据集的图像。当网络看到标记为检测的图像时,可以基于完整的 YOLOv2 损失函数进行反向传播。当它看到分类图像时,仅从架构的分类特定部分反向传播损失。也就是不同的数据集用不同的损失函数。

该方法的初衷是非常好的,但是存在以下局限性,所以后面也不使用该方法进行模型训练:

  • 类别不平衡: 联合训练可能导致分类和检测两个任务之间的类别不平衡。一些类别可能在分类任务中有大量的样本,而在检测任务中只有少数样本,或者反之。这可能导致模型在某些类别上过度拟合或欠拟合。
  • 标签噪声: 联合训练中的标签可能存在噪声。分类任务和检测任务通常涉及到不同的数据集和标注方式,这可能导致标签的不一致性和噪声,进而影响模型的性能。
  • 训练复杂性: 联合训练引入了两个不同任务的训练,增加了训练的复杂性。需要调整不同任务的损失函数权重,确保两者在训练过程中能够平衡地更新模型参数。
  • 资源需求: 联合训练通常需要更多的计算资源和时间,因为需要同时处理分类和检测任务。这可能对硬件和训练时间的要求提出了一定的挑战。
  • 不同尺度的任务结合: 分类和检测任务可能在不同的尺度上具有不同的难度。某些类别可能在小尺度上容易识别,而在大尺度上较难,反之亦然。联合训练要求模型在不同尺度上具有良好的泛化能力,这可能增加了训练的难度。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/632978.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s学习-Deployment

Kubernetes通过各种Controller来管理Pod的生命周期 。 为了满足不同业 务 景 , Kubernetes 开发了Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等多种Controller。我们⾸先学习最常用Deployment。 1.1 Kubectl命令直接创建 第一种是通过kubectl命令直接…

ROS第 9 课 编写简单的服务端 Server

文章目录 第 9 课 编写简单的服务端 Server1.创建服务器代码2.运行服务器节点 第 9 课 编写简单的服务端 Server 1.创建服务器代码 注意:在创建服务器代码之前,需要先创建工作空间和功能包,具体操作过程可前往目录“第4课 创建工作空间与功能…

蓝桥杯每日一题---基数排序

题目 分析 在实际的比赛过程中很少会自己手写排序,顶多是定义一下排序规则。之所以要练习一下基数排序,是因为在后续学习过程中学到后缀数组时需要自己手写基数排序,那么这里使用的方法也和后缀数组一致,理解这里也便于后缀数组的…

领域特定语言(Domain-Specific Language, DSL)在 Visual Studio 2022中的实验——建立领域模型

一、环境 dotnet --version 8.0.101 Microsoft Visual Studio Enterprise 2022 (64 位) - Current 版本 17.8.4 已安装组件 ComponentLinkVisual Studiohttp://go.microsoft.com/fwlink/?LinkId185579Visual Studio SDKhttps://go.microsoft.com/fwlink/?li…

RTC讲解

RTC(Real Time Clock)实时时钟 RTC实时时钟本质上是一个独立的定时器。RTC模块拥有一组连续计数的32位无符号计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配…

提升开发效率,Fiddler Everywhere for Mac助您解决网络调试难题

在现代软件开发中,网络调试是一个不可或缺的环节。无论是前端开发还是后端开发,我们经常需要对网络请求进行监控和调试,以便及时发现并解决问题。而Fiddler Everywhere for Mac作为一款强大的网络调试工具,能够帮助开发者提升工作…

Ubuntu重启后进入initramfs导致无法开机

今晚,我的电脑意外关机,重新开机后打开了虚拟机后出现initramfs,一直无法开机。该虚拟机使用的是 vm17,系统是ubuntu20, 解决方案 使用如下命令查看和识别磁盘、分区或文件系统的信息 在initramfs后面输入 fsck /dev/sdb4 ,即修复上面损坏的…

32 选择组件

效果演示 实现了一个复选框的动画效果,当复选框被选中时,复选框的前面会出现一个勾号,同时复选框的背景颜色会变成灰色,复选框旁边会出现一个火花效果。当复选框被取消选中时,复选框的勾号会消失,复选框的背…

线程同步--生产者消费者模型

文章目录 一.条件变量pthread线程库提供的条件变量操作 二.生产者消费者模型生产者消费者模型的高效性基于环形队列实现生产者消费者模型中的数据容器 一.条件变量 条件变量是线程间共享的全局变量,线程间可以通过条件变量进行同步控制条件变量的使用必须依赖于互斥锁以确保线…

Docker(三)使用 Docker 镜像

作者主页: 正函数的个人主页 文章收录专栏: Docker 欢迎大家点赞 👍 收藏 ⭐ 加关注哦! 使用 Docker 镜像 在之前的介绍中,我们知道镜像是 Docker 的三大组件之一。 Docker 运行容器前需要本地存在对应的镜像&#x…

行驶证OCR识别应用领域有哪些?

随着科技的不断发展,OCR技术已经逐渐成熟,并在各个领域得到了广泛的应用。其中,OCR技术在行驶证识别领域的应用也日益受到关注。本文将重点介绍行驶证OCR识别的应用领域,以便更好地了解这一技术的应用前景。 首先,行驶…

尚硅谷Nginx高级配置笔记

写在前面:本笔记是学习尚硅谷nginx可成的时候的笔记,不是原创,如有需要,可以去官网看视频,以下是pdf文件 Nginx高级 第一部分:扩容 通过扩容提升整体吞吐量 1.单机垂直扩容:硬件资源增加 云…

计算机毕业设计----SSH会议室管理系统

项目介绍 本系统为基于jspsshmysql的会议室管理系统,包含普通用户和管理员,系统功能如下: 普通用户:会议室管理、会议管理、用户管理、个人资料。 管理员用户:会议室管理、会议管理、用户管理、部门管理、设备管理、个…

基于docker创建nginx容器

docker一键安装可以参考我这个博客:一键安装docker 1.创建基础容器 docker run -p280:280 --name nginx -d nginx创建挂载到容器的宿主机文件夹 mkdir -p /home/000nginx-ebrms-ftp/html mkdir -p /home/000nginx-ebrms-ftp/logs mkdir -p /home/000nginx-ebrms-f…

三坐标平台对环境的温度有要求吗——河北北重

三坐标铸铁平台对环境的温度有一定的要求。通常情况下,三坐标平台在使用过程中要求环境的温度保持在一定范围内,以确保测量数据的准确性和稳定性。 具体的温度要求可能会因不同的三坐标铸铁平台型号和制造商而有所不同,一般来说,常…

Unity Mirror VR联机开发 实战篇(二)

一、迁移示例中的联机物体 1、将MirrorExamplesVR工程中的部分文件夹复制到自己的工程中。 1、打开MirrorExamplesVR中的 SceneVR-Common场景。 2、将场景中没用的东西都删掉,只留下面这些,新建一个空物体XR Mirror,将所有剩下的物体拖成XR …

汽车连接器接线端子和多芯线束连接界面

冷压接的开式压接和闭式压接以及热压接的超声波焊接对汽车连接器接线端子和多芯线束连接界面 连接器接线端子和多芯线束的连接是电子线束行业,特别是汽车行业常用的导线连接方式。汽车整车线束又由许多分支线束组成,而分支线束必须通过连接器实现连接&am…

绝地求生【违规处罚工作公示】1月8日-1月14日

1月8日至1月14日期间,共计对174,636个违规账号进行了封禁,其中164,757个账号因使用外挂被永久封禁。 若您游戏中遇到违规行为,建议您优先在游戏内进行举报; 另外您也可以在官方微信公众号【PUBG国际版】中点击“ 服务中心 - 举报…

python统计分析——样本均值的分布(上)

参考资料:用python动手学统计学 1、导入库 import numpy as np import pandas as pd import scipy as sp from scipy import statsfrom matplotlib import pyplot as plt import seaborn as sns 2、设置总体 本次研究总体是均值为4、标准差为0.8的正态总体。 po…

使用 MinIO 和 PostgreSQL 简化数据事件

本教程将教您如何使用 Docker 和 Docker Compose 在 MinIO 和 PostgreSQL 之间设置和管理数据事件,也称为存储桶或对象事件。 您可能已经在利用 MinIO 事件与外部服务进行通信,现在您将通过使用 PostgreSQL 自动化和简化数据事件管理来增强数据处理能力…