目标检测系列(三)yolov2的全面讲解

news2024/11/18 13:31:58

YOLOv2(论文原名《YOLO9000: Better, Faster, Stronger》)作为该系列的第二个版本,对原始YOLO进行了显著的改进,进一步提高了检测速度和准确度。在精度上利用一些列训练技巧,在速度上应用了新的网络模型DarkNet19,在分类任务上采用联合训练方法,结合wordtree等方法,使YOLOv2的检测种类扩充到了上千种。作者在论文中称可以检测超过9000个目标类别,所以也称YOLO9000。分几个点来详细介绍:

1、网络结构

论文下载地址:
https://openaccess.thecvf.com/content_cvpr_2017/papers/Redmon_YOLO9000_Better_Faster_CVPR_2017_paper.pdf

GitHub源码地址:https://github.com/philipperemy/yolo-9000

项目地址:YOLO: Real-Time Object Detection

YOLOv2使用Darknet-19作为其基础网络结构。Darknet-19是一个深度卷积神经网络,它包含19个卷积层和5个最大池化层。Darknet-19的设计哲学是减少计算量,同时保持足够的特征表达能力。以下是Darknet-19的关键特点:

深度可分离卷积:减少参数数量和计算量。

跨层连接:允许从深层网络直接传递梯度,缓解梯度消失问题。

批量归一化:提高训练速度,稳定学习过程。

Darknet-19顾名思义,有19个卷积层,如下图:

YOLO-V2的主框架是基于Darknet-19搭建的,我们来看下YOLO-V2的结构,如下图:

2、检测原理

从整体上来看,其核心原理是将目标检测问题视为一个单个的回归问题,通过在图像上划分网格并在每个网格上预测边界框和类别概率来实现目标检测。相比于传统的目标检测方法,YOLOv2在速度和准确性方面取得了较大的改进。

可以分为以下几个步骤:

  1. 图像划分网格: 首先,将输入图像分成固定大小的网格。每个网格负责检测图像中的物体。
  2. 预测边界框: 对于每个网格,模型预测多个边界框(bounding boxes)。每个边界框由5个值组成:边界框的中心坐标、边界框的宽度和高度以及目标的置信度。置信度表示模型认为该边界框包含物体的概率。
  3. 类别预测: 同时,模型还会对每个边界框预测所属物体的类别。这些类别包括图像中可能出现的各种物体,如人、车、狗等。
  4. 输出处理: 最后,通过筛选置信度高的边界框,并采用非极大值抑制(Non-Maximum Suppression,NMS)来移除冗余的边界框,最终得到最终的检测结果。

3、模型性能

对于YOLO-V2的性能,直接看下YOLOV2和其他常见的框架在pascal voc2007数据集上测试结果性能比对表,如下表

首先可以看到随着训练尺寸的尺寸变大,YOLOv2算法的mAP是逐渐上升的,FPS相应的逐渐下降。在554x554尺寸上的训练mAP达到78.6。

4、损失函数

YOLOv2定义了一个复合损失函数,用于同时优化定位和分类误差。

YOLOv2的损失函数主要由三部分组成,分别是边界框坐标损失、目标置信度损失和分类损失。这些损失函数共同用于衡量模型的预测与真实标签之间的差异,并通过反向传播算法来优化模型参数。下面是对每个部分的详细介绍:

  • 边界框坐标损失(Bounding Box Coordinates Loss):(YOLOv2使用平方误差损失(Mean Squared Error,MSE)来衡量预测边界框的坐标与真实边界框坐标之间的差异。具体来说,对于每个网格,模型预测边界框的中心坐标和宽高的偏移量,然后计算这些预测值与真实标签之间的平方差,并求和。这部分损失函数主要负责调整边界框的位置和大小,使其更好地与目标对齐。)

坐标损失:(负责检测物体的bbox中心点定位误差):

宽高坐标损失:(负责检测物体的bbox宽高定位误差)

损失计算中加上平方根的目的是拉大不同预测位置的得到的损失预测值差距,使小框对误差更敏感一点。这样做是为了更加重视较大的边界框的位置误差,可以使算法更加关注边界框的位置准确性,从而更好地优化它们的预测结果。

  • 目标置信度损失(Object Confidence Loss):(YOLOv2使用逻辑回归损失(Binary Cross-Entropy Loss)来衡量模型对于每个边界框是否包含目标的置信度预测与真实标签之间的差异。对于每个网格,模型会预测一个置信度分数,表示该边界框中是否包含目标。如果该网格中存在目标,则置信度损失计算预测置信度与1之间的差异;如果该网格中不存在目标,则置信度损失计算预测置信度与0之间的差异。)

通过对置信度进行损失计算,可以鼓励模型在包含目标的网格中预测高置信度。

  • 分类损失(Class Loss):(对于每个边界框,YOLOv2还会预测物体类别的概率分布。分类损失采用交叉熵损失(Cross-Entropy Loss)来衡量模型对于每个类别预测的概率分布与真实标签之间的差异。具体来说,对于每个网格,模型会预测一个包含所有类别的概率分布,然后计算预测概率分布与真实标签之间的交叉熵损失。)

5、模型改进(better、faster、stronger)

更好(better):

通过使用批归一化(Batch Normalization, BN)、基于卷积的锚点机制等一系列技术手段,使得目标检测精度较YOLO-V1有了大幅度提高。

更快(faster):

通过改进网络结构,在小幅降低精度的情况下,大幅减少浮点运算次数以提高模型速度(针对224×224尺寸图像输入的单趟前向传播,由VGG16网络的300亿次浮点运算降低至80亿次)。

更强(stronger):

基于YOLO-V2构建YOLO-9000模型,通过采用联合训练(jointly training)机制,综合发挥目标检测任务数据集和图像分类任务数据集的综合优势(目标检测数据集图像数量少、目标类别少但提供精确的目标位置信息,而分类数据集无目标位置信息,但类别数多且图像数量庞大),使得支持的检测目标类别数从原来的20类大幅扩展至9000类,大大提高了模型的适用性。

改进之处:

(1)批规范化(Batch Normalization):

Batch Normalization的作用是提高了网络模型的鲁棒性,缓解了Covariant Shift问题,有一定的正则化(regularization)作用,在这里也不例外。通过在YOLO所有的卷积层中加入Batch Normalization,可以使得mAP提高2%,并且dropout的部分也可以丢掉.

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

从AlexNet开始,大多数的分类器都在分辨率小于的图像上执行分类。YOLO一代在训练分类网络的时候用的是分辨率,检测网络的时候用的是分辨率,这就意味着网络需要同时切换到目标检测并且适应新的分辨率。在YOLO二代中,直接使用的分辨率微调(fine tune)了网络,训练了10个epoch。可以使得mAP提高大概4%。

(3)使用全卷积网络结构并引入锚点(Anchor Boxes):

为了预测不同尺寸的目标,YOLOv2引入了锚点(Anchor Boxes)的概念。每个网格单元不再只预测一个边界框,而是预测多个与锚点尺寸相关的边界框。这些锚点是预先定义的,基于训练数据集中目标尺寸的分布。使用多个锚点可以提高对不同尺寸目标的检测能力。

原来的YOLO算法将输入图像分成的网格,每个网格预测两个bounding box,因此一共只有98个box,但是在YOLOv2通过引入anchor boxes,预测的box数量超过了1千(以输出feature map大小为为例,每个grid cell有9个anchor box的话,一共就是个,最终每个grid cell选择5个anchor box)。在Faster RCNN在输入大小为时的boxes数量大概是6000,在SSD300中boxes数量是8732。显然增加box数量是为了提高object的定位准确率。实验证明:虽然加入anchor使得MAP值下降了一点(69.5降到69.2),但是提高了recall(81%提高到88%)。

(4)维度聚类:

通过K-means来学习出anchor box。在Faster R-CNN中anchor box的大小和比例是按经验设定的,然后网络会在训练过程中调整anchor box的尺寸。但是如果一开始就能选择到合适尺寸的anchor box,那肯定可以帮助网络越好地预测detection。所以作者采用k-means的方式对训练集的bounding boxes做聚类,试图找到合适的anchor box。如果采用标准的k-means(即用欧式距离来衡量差异),在box的尺寸比较大的时候其误差也更大,而我们希望的是误差和box的尺寸没有太大关系。所以通过IOU定义了如下的距离函数,使得误差和box的大小无关,K-means主要用与预测anchor box的长跟宽。:

聚类结果如图,左图代表Avg IOU与聚类数目K的关系,在权衡Avg IOU和模型复杂度以后,作者选择了K=5。右图代表了VOC和COCO数据集的box的聚类结果。可以看出聚类所得到的anchor box与手动选择相比,更倾向于选择高瘦的anchor box。

(5)细分类特征(Fine-Grained Features):

Faster F-CNN、SSD都使用不同尺寸的Feature Map来取得不同范围的分辨率,而YOLOv2采取了不同的方法,YOLOv2加上了一个跳跃层(Passthrough Layer)来获取之前的26*26分辨率的层的特征。这个Passthrough layer能够把高分辨率特征与低分辨率特征连结(concatenate)起来,这种方式看起来与ResNet很像,但是略有不同,因为ResNet采用的是summation,而YOLOv2的Fine-Grained Features采用的是concatenate。

(6)多尺度训练(Multi-ScaleTraining):

作者希望YOLO v2能鲁棒地运行于不同尺寸的图片之上,所以把这一想法用于训练model中。 区别于之前的补全图片尺寸的方法,YOLO v2每迭代几次都会改变网络参数。每10个Batch,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320,352…..608},最小,最大,网络会自动改变尺寸,并继续训练的过程。 这一方法使得网络在输入图片尺寸比较小的时候跑的比较快,输入图片尺寸比较大的时候精度高,下图为YOLOv2和其他的目标检测网络的对比。

特征金字塔网络(FPN)

YOLOv2通过特征金字塔网络(FPN)来捕捉不同尺度的特征,从而提高对小目标的检测能力。FPN的核心思想是将深层网络中的高语义信息和浅层网络中的高分辨率信息结合起来。这样,YOLOv2能够在不同尺度的特征图上进行检测,从而检测到不同大小的目标。

其主要步骤如下:

  1. 自底向上构建: 首先,通过一个通用的深度卷积神经网络(如ResNet、VGG等)从输入图像中提取特征。这些特征具有不同的分辨率,随着网络的深度逐渐减小。FPN利用这些特征构建一个自底向上的特征金字塔,即从底层到顶层逐步上采样特征图。
  2. 自顶向下融合: 接下来,FPN从高级语义层次(低分辨率)开始,通过上采样(如双线性插值)将低分辨率的特征图上采样到更高的分辨率。然后,将相邻层次的特征图进行融合,以获得更丰富的语义信息。这种自顶向下的融合过程可以帮助模型在不同尺度上更好地理解图像。
  3. 特征融合: 在自顶向下的过程中,FPN还会进行特征融合,将来自不同层次的特征图进行逐元素相加,以获得更加丰富和细致的特征表示。这样可以使得最终的特征金字塔更具有表征能力。

通过自底向上和自顶向下的特征提取和融合过程,FPN能够生成具有多尺度信息的特征金字塔,从而有效地应对不同尺度目标的检测需求。这使得FPN成为了许多目标检测器(如Faster R-CNN、RetinaNet等)的核心组件,极大地提升了检测模型在多尺度场景下的性能。

(6)passthrough层的引入:

YOLOv1仅在网络输出的最后一个feature map上去检查输入图像中的所有目标:

①最后一张feature map的低分辨率就意味着网格划分的很粗糙,不够精细,这不仅对于密集物体检测的效果会较差,小物体的检测效果也不够理想。

②特征图的分辨率越高,所划分的网格也就越精细,能够更好地捕捉目标的细节信息。相较于YOLOv1只在一张7×7的过于粗糙的网格上做检测,2016年的SSD使用多种不同分辨率的特征图自然会更好。

YOLO作者借鉴了SSD的这一思想。将Backbone的第17层卷积输出的26×26×512特征图拿出来,做一次特殊的降采样操作,得到一个13×13×2048特征图。然后将二者在通道的维度上进行拼接,得到更厚的13×13×3072的特征图。最后在这张融合了更多信息的特征图上去做检测。

这里需要注意的是,实际上在作者代码中,在特殊的降采样之前先做了降维由26×26×512降维至26×26×64,然后做特殊的降采样变为13×13×256,然后拼接得到13×13×1280的特征图。特殊的降采样操作(reorg)如下图所示:

特征图在经过reorg操作的处理后,特征图的宽高会减半,而通道则扩充至4倍

这种特殊降采样操作的好处就在于降低分辨率的同时,没丢掉任何细节信息,信息总量保持不变。

加上该操作后,在VOC 2007测试集上的mAP从74.4%再次涨到了75.4%。

以今天的眼光看,最终的检测还是在13×13的网格中进行检测,并不是真正的类似SSD的多级检测。

6、模型缺限

  1. 小目标检测:YOLOv2在检测小目标方面的表现不如一些其他先进的目标检测算法,如RetinaNet和YOLOv3。
  2. 类别不平衡:在处理类别不平衡的数据集时,YOLOv2的性能可能会受到影响。

参考文章:

https://blog.csdn.net/festaw/article/details/138125259

https://cloud.tencent.com/developer/article/1670582

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

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

相关文章

个性化大语言模型:PPlug——让AI更懂你

在当今数字化转型的时代,大型语言模型(LLMs)已经成为了不可或缺的工具,它们在自然语言理解、生成和推理方面展现了非凡的能力。然而,这些模型普遍采用的是“一刀切”的方式,即对于相同的输入给予所有用户相…

828华为云征文|部署多功能集成的协作知识库 AFFiNE

828华为云征文|部署多功能集成的协作知识库 AFFiNE 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 AFFiNE3.1 AFFiNE 介绍3.2 AFFiNE 部署3.3 AFFiNE 使用 四、…

【深度学习】(10)--ResNet残差网络

文章目录 ResNet残差网络1. 传统卷积神经网络的问题1.1 梯度消失和梯度爆炸1.2 退化问题 2. 解决问题2.1 梯度消失与爆炸2.2 退化问题 3. 残差结构结构归纳 4. BN(Batch Normalization) 总结 ResNet残差网络 ResNet 网络是在 2015年 由微软实验室中的何…

ComfyUI 完全入门:必备插件

前言 大家好,我是每天分享AI应用的月月! ComfyUI 是一个基于 Stable Diffusion 的AI绘画创作工具,最近发展势头特别迅猛,但是 ComfyUI 的上手门槛有点高,用户需要对 Stable Diffusion 以及各种数字技术的原理有一定的…

小麦生长状态检测系统源码分享

小麦生长状态检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer…

基于SpringBoot的新冠检测信息管理系统的设计与实现

文未可获取一份本项目的java源码和数据库参考。 国内外在该方向的研究现状及分析 新型冠状病毒肺炎疫情发生以来,中国政府采取积极的防控策略和措施,经过两个多月的不懈努力,有效控制了新发病例的増长,本地传播已经趋于完全控制…

万字面试题大模型面试,最全八股和答案

自ChatGPT开启大模型时代以来,大模型正迎来飞速发展,现在从事大模型开发相关工作可谓是处在时代的风口。那么大模型面试需要哪些技能和技巧呢,本文详细整理了全套的面试问题及答案,希望对大家有所帮助! 目录 大模型&a…

如何让 Android 的前端页面像 iOS 一样“优雅”?

作者:方英杰(崇之) 最近在调研前端页面适配 Android 端异形屏的方案,调研过程中发现了一些比较有意思的点,本文主要是做一个总结。 一、提出问题 首先,我们需要知道 Android 上的前端适配面临着什么问题。 问题其实很…

视频怎么加字幕?视频加字幕的5种方法,小白进阶高手!

视频怎么加字幕?视频加字幕不仅可以添加内容的可读性,也避免很多语言错误,可以更-好地帮助观看者理解创作者的制作理念。对于视频创作的初学者而言,掌握几种简单易用的加字幕方法尤为重要。本文将详细介绍五种视频加字幕的方法&am…

一文速读 LLaMA3.2-Vision 模型的结构

随着 Meta 放出了 LLaMA3.2 系列模型,LLaMA 系列也是正式迎来了官方版本的多模态大模型 LLaMA3.2-Vision [1]。那我们就在本期内容中聊一聊 LLaMA3.2-Vision 模型的结构,希望对大家有所帮助。 相关代码位于 [2] 结论 先说结论,LLaMA3.2 的…

6.Javaweb-过滤器与监听器

Javaweb-过滤器与监听器 文章目录 Javaweb-过滤器与监听器一、过滤器**Filter接口API:** 过滤器生命周期1.创建(Creation):2.初始化(Initialization):3.执行(Execution)&…

【设计模式-状态模式】

定义 状态模式(State Pattern)是一种行为型设计模式,允许对象在其内部状态改变时改变其行为。该模式将状态的变化封装在状态对象中,从而使得对象的行为随着状态的变化而变化。 UML图 角色 Context(上下文&#xff0…

使用scroll-behavior属性实现页面平滑滚动的几个问题

在较长的页面中,为了便于用户浏览,开发人员经常会使用锚点链接,锚点链接默认的效果是瞬间跳转,为了让用户体验更好,往往会添加滚动效果。我记得要实现滚动效果,以前一般是结合一段JavaScript代码来实现。 后…

CSS04-Chrome调试工具

Chrome 浏览器提供了一个非常好用的调试工具,可以用来调试我们的 HTML结构和 CSS 样式。

万户OA-ezOFFICE fileUpload.controller 任意文件上传漏洞复现

0x01 产品描述: 万户OA(Office Automation)是一款企业级协同办公管理软件,旨在为企业提供全面的办公自动化解决方案。万户ezOFFICE存在任意文件上传漏洞。攻击者可以通过该远程下载任意文件到目标服务器,导致攻击者可获…

生信初学者教程(十四):差异结果的火山图

文章目录 介绍加载R包导入数据画图函数火山图输出结果总结介绍 火山图(Volcano Plot)是一种用于展示基因差异表达分析结果的二维散点图。它通过同时展示统计显著性和变化幅度,帮助研究者识别出在不同条件下显著差异表达的基因。火山图的横轴通常表示基因表达变化的倍数对数(…

第 18 章 从猫爷借钱说起——事务简介

18.1 事务的起源 CREATE TABLE account ( id INT NOT NULL AUTO_INCREMENT COMMENT 自增id, name VARCHAR(100) COMMENT 客户名称, balance INT COMMENT 余额, PRIMARY KEY (id) ) EngineInnoDB CHARSETutf8;insert into account (name, balance) values (狗哥, 11), (猫爷, 2…

VS开发C++项目常用基础属性配置

这篇文件简单讨论一下visual studio中项目属性的常用基础配置。 1.输出目录:项目目标文件生成位置。 2.中间目录:项目生成的中间文件所在的位置。 3.目标文件名:项目生成目标文件名称。 4.附加包含目录:三方库等头文件所在的位…

图新说 注册机使用 功能介绍

图新说简介 1. 什么是图新说? 图新说是一款技术自主可控的国产三维BIMGIS数字化方案汇报、成果交付平台。主要解决汇报方案的精准还原、方案展示、方案汇报及成果交付问题。 将影像、实景三维等周边现状数据与设计成果完美融合将设计方案二三维一体化表达流畅讲解设…

用Promise实现前端并发请求

/** * 构造假请求 */ async function request(url) {return new Promise((resolve) > {setTimeout(() > {resolve(url);},// Math.random() * 500 800,1000,);}); }请求一次,查看耗时,预计应该是1s: async function requestOnce() {c…