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

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.xdnf.cn/news/1544575.html

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

相关文章

小阿轩yx-Ansible部署与应用基础

小阿轩yx-Ansible部署与应用基础 前言 由于互联网的快速发展导致产品更新换代速度逐步增长,运维人员每天都要进行大量的维护操作,按照传统方式进行维护使得工作效率低下。这时部署自动化运维就可以尽可能安全、高效的完成这些工作。 Ansible 概述 什…

自闭症寄宿学校陕西:提供综合发展的教育环境

星贝育园:自闭症儿童的综合发展摇篮 在自闭症儿童教育的广阔领域里,寄宿制学校以其独特的康复环境和全方位的支持体系,为这些特殊的孩子点亮了希望之灯。广州的星贝育园自闭症儿童寄宿制学校,正是这样一所充满爱心与专业的机构&a…

探索自闭症寄宿学校:为孩子的未来铺设坚实基石

探索自闭症寄宿学校:星贝育园——为孩子的未来铺设坚实基石 在自闭症儿童成长的道路上,选择一所合适的学校,无疑是为他们铺设坚实基石的关键一步。广州的星贝育园自闭症儿童寄宿制学校,以其专业的教育理念、全面的支持体系和温馨…

使用PLSQL Developer快速连接数据库

文章目录 前言一、定义设置方式二、固定用户设置方式三、连接设置方式总结前言 PLSQL Developer是一个集成开发环境,由Allround Automations公司开发,专门面向Oracle数据库存储的程序单元的开发。该工具提供了多种设置方式,便于使用者在不需要输入用户名称、密码的情况下,…

鸿蒙 如何退出 APP

terminateSelf() 停止Ability自身 在EntryAbility中这么使用 this.context.terminateSelf()在Pages页面中这么使用 import { common } from kit.AbilityKit (getContext(this) as common.UIAbilityContext)?.terminateSelf() 也可以直接封装: import common f…

查了好几天的问题终于画上了句号

问题背景: 产品接到前方实施反馈9月02日有些订单查不到签名值,对于医院验签查不到签名值,就无法完成验签数据归档。 问题追踪过程: 1 首先查数据库,发现订单id确实查不到对应的detail数据; 第一直觉是否是…

如何使用ssm实现基于Java web的高校学生课堂考勤系统的设计与实现+vue

TOC ssm686基于Java web的高校学生课堂考勤系统的设计与实现vue 第一章 课题背景及研究内容 1.1 课题背景 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性&#x…

SpringBoot集成微信小程序Demo

一、前言 小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验。 微信小程序官方文档:https://developers.weixin.qq.com/miniprogram/dev/framework/ 二、技术栈 SpringBoot 2.0MyBatis-P…

不同类型的企业该如何挑选适合的供应商管理系统?

供应商管理对企业降低成本、维持稳定的货品来源起着重要的作用,在选择供应商管理系统时,需要考虑多重因素,正所谓没有最好只有最合适,需要结合企业自身需求进行多方面考量才能做出明智的决策。 本文将对国内外制造业都在使用的供…

找最小数 - 华为OD统一考试(E卷)

2024华为OD机试(E卷D卷C卷)最新题库【超值优惠】Java/Python/C合集 题目描述 给一个正整数NUM1,计算出新正整数NUM2,NUM2为NUM1中移除N位数字后的结果需要使得NUM2的值最小。 输入描述 输入的第一行为一个字符串,字…

一款前后端分离设计的企业级快速开发平台,支持单体服务与微服务之间灵活切换(附源码)

前言 当前软件开发面临诸多挑战,诸如开发效率低下、重复工作多、维护成-本高等问题,这些问题在一定程度上阻碍了项目的进展。针对这些痛点,我们迫切需要一款既能提升开发效率又能降低维护成-本的处理方案。由此,一款基于前后端分…

【Day20240924】联邦学习中的方法 改进

文章目录 前言一、FedAvg二、FedProx三、MOON四、FedDyn五、FedAsync六、PORT七、ASO-Fed八、FedBuff九、FedSA 前言 几种异步的方法: FedAsync PORT ASO-Fed FedBuff FedSA 几种同步的方法: FedAvg FedProx MOON FedDyn 一、FedAvg FedAvg基本步骤&a…

大模型开发应用实战:真实项目实战对标各类大厂大模型算法岗技术

一、引言 在人工智能领域,大模型已经成为推动技术进步和应用创新的重要力量。随着技术的不断发展,各大厂商纷纷投入大量资源研发大模型,并尝试将其应用于各种实际场景中。为了培养具备大模型开发与应用能力的高级技术人才,我们组织…

cuda算子优化-transpose

transpose 参考链接 方法一:每个线程负责一个元素的转置 cuda代码实现 ncu分析(矩阵维度采用m1024,n512;grid和block维度见下图最上方) 这种方法对读global mem比较友好,可以做到合并访存,但…

知识产权 ABS 企业融资新渠道

在当今知识经济时代,知识产权作为企业的核心资产,其价值日益凸显。知识产权资产证券化(Intellectual Property Asset-Backed Securitization,简称知识产权ABS)作为一种创新的金融工具,为企业盘活知识产权资…

Cpp类和对象(下)(6)

文章目录 前言一、初始化列表概念使用注意实际运用explicit关键字初始化列表的总结 二、static成员static成员的概念static成员的特性static的一个实用场景 三、友元友元函数友元类 四、内部类概念特性 五、匿名对象六、再次理解封装和面向对象总结 前言 Hello,本篇…

【Oauth2整合gateway网关实现微服务单点登录】

文章目录 一.什么是单点登录?二.Oauth2整合网关实现微服务单点登录三.时序图四.代码实现思路1.基于OAuth2独立一个认证中心服务出来2.网关微服务3产品微服务4.订单微服务5.开始测试单点登录 一.什么是单点登录? 单点登录(Single Sign On&…

权威期刊Cell Discovery新成果!上海交大洪亮团队提出CPDiffusion模型,超低成本、全自动设计功能型蛋白质

蛋白质是生命活动的主要执行者,其结构与功能之间的关系一直是生命科学领域研究的核心议题。近年来,随着深度学习的兴起,借助其强大的数据处理能力,让模型学习蛋白质序列、结构及其功能之间的映射关系,设计出具备更高稳…

prithvi WxC气象模型

NASA发布了prithvi WxC气象模型发布 Prithvi是NASA开源的模型,被誉为全球最大的开源地理空间大模型。昨天晚上逛X平台,我看到Prithvi模型又来了新成员:prithvi WxC。 NASA和IBM创建了一个基于MERRA-2数据的天气和气候AI基础模型—Prithvi Wx…

数据库事务索引视图、存储过程

目录 文章目录 一、数据库事务 事务概述: 事务特征: 提交回滚 隔离级别 二、索引 索引创建原则: 存储引擎 单列索引 组合索引 全文索引 空间索引 三、视图 四、函数和存储过程 1.函数的创建 2.存储过程 3.调用格式 4.两者…