[论文总结]YOLO v1、YOLO v2、YOLO v3、YOLO v4、YOLOv5

news2024/10/7 4:36:29

背景

在这里我们主要介绍YOLO 系列的相关目标检测算法,从最开始的YOLO v1 一直到 YOLO v5。本文也借鉴了其他文档和原始论文。总结下来这五个方法的演进线路如下表格所示。

对比维度YOLO v1YOLO v2YOLO v3YOLO v4YOLO v5
backboneVGGdarknet19darknet53darknet53darknet53
是否有anchor
anchor 个数0多个(5)多个(9)多个多个
是否multi-head
GT和anchor关系1对11对11对11对多1对多
GEO LossMSEMSEMSECIoUCIoU

接下来我们将完整的介绍YOLO v1的方法,然后我们将从上述表格的几个方面来介绍演进路线。

YOLO v1

一开始原始的YOLO v1主打的就是一个快,他基本的思想就是将图像分层若干个块,每个块负责预测一个物体。当我们输入一张图片的时候,经过一些列CNN的操作,他就会变成7X7的feature map,那么我们将feature map上的每一个点分别负责预测一个框,这就是最简单的YOLO v1的思想。YOLO V1结构图

整体结构

YOLO v1的整体结构如上图所示,他给整个系列的YOLO 定下了基调。针对得到的7X7的feature map,他将feature map最终映射成为了BX7 X7X30的维度。
那么如何理解这里的30呢?=5*2+20,这里的20代表我们最后预测物体类别已经有20个类别,5代表的是(c,x,y,w,h),c表示的是置信度分数,xywh分别表示的是中心点左边和宽高。2表示的是预测一个大物体,一个小物体。

Loss 函数设计

yolo v1的损失函数设计如下图所示。其中第一行和第二行代表的是geo loss。第三行代表的是有物体的置信度损失,第四行代表的是没有物体的置信度损失(三四相当于一个带权的损失函数)第五行代表的是具体物体类别的损失函数。
YOLO v1 loss

Backbone

backbone的演进思路基本上就是VGG->Darknet,我们具体来看Darknet为什么比VGG效果更好

  • 删除了7x7的卷积,整体替换为3x3的和1x1的卷积,这样子在相同感受野的前提下,网络结构可以做的更深,并且参数量更小
  • 引入量很多1x1的卷积
    • 可以增加深度,增加非线性
    • 降维/升维
    • 跨channel的信息融合
    • 减少卷积参数
  • 分辨率也有调整,从一开始的224调整为448(推理的时候416),推理的时候之所以要变为奇数是先验,因为大物体大部分是放在图像中心,奇数个刚好由一个grid来负责预测,否则会将物体拆分到四个grid。
  • pooling层替换成了stride=2的卷积层,增加模型的可学习性,减少模型的信息损失。
    对比backbone

Anchor

YOLO系列从v2开始引入了anchor的概念,v2的时候每个grid有五个anchor,v3的时候由于更改为multi-head的结构,每个head的每个grid有3个anchor。v4和v5基本遵从v3的设计。

  • Q1:v1的时候如何每个grid分工?

    • Answer:我们判断bbox的中心点落在哪个grid内,我们就让哪个grid来负责预测该bbox
  • Q2:v2/v3的多个anchor是怎么得到的?

    • Answer:根据数据集的bbox集合,通过聚类的方式产出,聚类得到的anchor集合如下图所示。
      bbox聚类结果
  • Q3:每个grid有多个anchor,那么gt和anchor的关系如何对应?

    • Answer:在v2和v3 这里是看grid和对应的哪个anchor的IoU最大,就将对应anchor的gt 设置为该bbox,也就是一个gt bbox只能由一个anchor来预测,在v4修改为可以由多个anchor来预测,只需要IoU大于指定的阈值就可以,这样子也改善了正负样本的比例。

Multi-Head

在v2中我们通过每个grid预测多个anchor来解决目标遗漏的问题,但是针对小目标的检测,v2仍然不是十分友好,因此,从yolov3开始引入了multi-head的概念,引入了不同分辨率的,13x13的预测大物体,26x26的负责预测中物体,52x52的负责预测小物体。每个分辨力对应的anchor大小也是不一样的。基本结构图如下图所示
在这里插入图片描述

GEO Loss

上面在介绍v1的时候,我们介绍了v1的相关GEO loss,他是直接预测center x、y和对应的width和height。
但是这样子会导致整体预测的范围变大,变得较难收敛,因此从v2开始,预测的目标变成了偏移量tx,ty,th,tw,它的定义如下图所示,预测的目标是tx/y/h/w他表示的皈依化后的偏移量。在推理的时候我们根据下面的公式可以计算得到bx,by。

  • 红色的是真值计算
  • 蓝色的是推理时候的推算, c x , c y , p h , p w c_x,c_y,p_h,p_w cx,cy,ph,pw都是对应的anchor尺寸。
    GEO 预测目标图2
    v1、v2、v3整体上还是使用的是基于MSE的损失函数,从v4开始使用基于IoU的损失函数来优化位置距离,这里我们主要介绍三种IoU Loss,GIoU、DIoU和CIoU

IoU Loss

原始的IoU 损失函数定义如下所示,通过使用这种IoU 损失函数,可以将评估指标和优化函数对齐。不过原始的IoU损失函数问题在于

  • 当两个bbox没有overlap 的时候失去的优化的目标。
  • 不能范围两个之间的重合度(距离),如下图所示,三者的IoU是一样的 但是明显左边的优化更好一点。
    L I o U = 1 − B 交 B g t B 并 B g t L_{IoU}=1-\frac{B 交 B_{gt}}{B 并 B_{gt}} LIoU=1BBgtBBgt
    在这里插入图片描述

GIoU Loss

先说定义,定义如下所示,其中 C C C代表的含义是两个组成的最小外接矩阵。这样子可以确保两者没有相交的时候,也可以持续优化。
L g = 1 − I o U + ∣ C − B 并 B g t ∣ ∣ C ∣ L_g=1-IoU+\frac{|C-B 并 B_{gt}|}{|C|} Lg=1IoU+CCBBgt

DIoU Loss

上述GIoU loss的问题在于不好直接优化,当两者没有挨着的时候,我们知道沿着中心点的线进行优化是最快的,因此引入了DIoU,它的公式如下所示。
在这里插入图片描述
DIoU在下述的这个case中在第三项是没有区别的,因此引入了CIoU
在这里插入图片描述

CIoU Loss

惩罚项的定义如下所示
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Lua学习笔记:浅谈对垃圾回收的理解

前言 本篇在讲什么 Lua的垃圾回收 本篇适合什么 适合初学Lua的小白 本篇需要什么 对Lua语法有简单认知 依赖Sublime Text编辑器 本篇的特色 具有全流程的图文教学 重实践,轻理论,快速上手 提供全流程的源码内容 ★提高阅读体验★ &#x1f…

Unity:sentinel key not found (h0007)

SSD换电脑,unity 编辑器无法打开; 具体步骤: 删除这个路径下的文件 C:\ProgramData\SafeNet 下 Sentinel LDK 打开Windows 的Cmd 命令行,输入编辑器版本下Unity.exe的路径, CD E:\Dev_Env\Unity\Hub\Editor\2020.3.3…

如何将 arduino-esp32 库作为 ESP-IDF 组件使用?

相关文档 arduino-esp32 SDKESP-IDF SDKESP-IDF 软件环境搭建说明Arduino 软件环境使用说明Arduino as an ESP-IDF component (官方说明) 环境准备 目前,最新 Master 版本的 arduino-esp32 SDK 要求使用 v4.4 版本的 ESP-IDF SDK 软件编译环…

05、Nginx反向代理

一、网关、代理与反向代理: 在Nginx中,网关、代理和反向代理是三种常见的功能,用于转发和处理请求。下面是它们的简要介绍: 网关(Gateway): 网关在网络通信中起到中介的作用,将客户…

【视觉SLAM入门】1. 基础知识,运动观测,旋转(旋转矩阵,轴角,欧拉角,四元数)和eigen库基础

"山薮藏疾" 1. 运动与观测1.1 通用运动方程1.2 通用观测方程1.3 对SLAM的认识 2. 三维运动2.1 旋转与平移2.2 变换矩阵2.3 矩阵知识补充2.4 旋转向量2.5 欧拉角2.6 四元数2.7 其他变换 3. 编程基础3.1 链接库说明3.2 eigen库 注: 以后的方程中如未说明&am…

面试官:一千万的数据,要怎么查?

一个老生常谈的问题,SELECT *和SELECT具体字段那个快?在数据量少的时候可能没什么差别,但是数据量达到千万级,差距就显现出来。废话不多说,往下看 ↓。 SELECT * 和 SELECT 具体字段的区别 在 MySQL 中,SE…

批量规范化

✨✨✨ 感谢优秀的你打开了小白的文章 “希望在看文章的你今天又进步了一点点,生活更加美好!”🌈🌈🌈 目录 1.批量规范化基本原理 2.批量规范化的使用 2.1对于全连接层 2.2对于卷积层 3.代码实现 3.1方式一 …

26488-24-4,Cyclo(D-Phe-L-Pro),具有良好的生物相容性

资料编辑|陕西新研博美生物科技有限公司小编MISSwu​ 【产品描述】 Cyclo(D-Phe-L-Pro)环(D-苯丙氨酸-L-脯氨酸),环二肽是由两个氨基酸通过肽键环合形成,是自然界中小的环状肽。由于其存在两个酰胺键即四个可以形成氢键的位点,环二肽可以在氢…

商业海外社交媒体营销10步指南 [2023]

如今,社交媒体是任何成功商业战略的重要组成部分。这不是奢侈品,而是必需品。全球有超过 36 亿人使用社交媒体,它是企业展示其产品和服务、建立品牌知名度以及与客户联系的数字游乐场。 但这不仅仅是娱乐和游戏。要在社交媒体上取得成功&…

Golang每日一练(leetDay0114) 矩阵中的最长递增路径、按要求补齐数组

目录 329. 矩阵中的最长递增路径 Longest Increasing Path In A Matrix 🌟🌟 330. 按要求补齐数组 Patching Array 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang每日一练 专栏 Python每日…

数据结构--二叉树的性质

数据结构–二叉树的性质 二叉树常考性质 常见考点1: 设非空二叉树中度为0、1和2的结点个数分别为 n 0 、 n 1 和 n 2 ,则 n 0 n 2 1 n_0、n_1和n_2,则n_0 n_2 1 n0​、n1​和n2​,则n0​n2​1 n 0 n 2 1 \color{red}n_0 n_2 1 n0​n2​…

图层中大型数据集的分块处理思路

图层中大型数据集的分块处理思路 为改善要素叠加工具(如联合和相交)的性能和可伸缩性,软件采用了称为自适应细分处理的运算逻辑。当可用的物理内存不足以对数据进行处理时,就会触发系统使用此逻辑。由于保持在物理内存的可用范围…

助力企业完成等保2.0的重要工具

在当今数字化时代,企业面临着越来越多的网络安全威胁和数据泄露风险。为了保护敏感信息和维护业务的连续性,许多企业正在积极采取措施来实施等保2.0标准。在这一过程中,EventLog Analyzer作为一种全面的安全信息与事件管理解决方案&#xff0…

swagger2word使用(将swagger2转化为word)

开源项目地址 https://github.com/JMCuixy/swagger2word 项目使用 1、项目拉下来以后先修改application.xml配置文件红框内容,将其修改为要换为自己swagger文档的地址 2、运行项目后输入地址http://127.0.0.1:8080/toWord 即可下载word文档

结构体和数据结构--共用体

共用体,也称联合(Union),是将不同类型的数据组织在一起共同占用同一段内存的一种构造数据类型。共用体与结构体的类型声明方法类似,只是关键字变为了Union。 例题:演示共用体所占内存字节数的计算方法 #i…

如何用手机制作3D人物模型素材

3D人物模型素材是现代3D游戏和电影制作中必不可少的一部分。它们是数字艺术家和设计师们用来创造逼真世界的关键。3D人物模型素材是用计算机程序制作的虚拟人物,可以被用于电影、电视、游戏和虚拟现实应用中。它们可以被用来代替实际演员,也可以被用来创…

小程序蓝牙通信

蓝牙通信能力封装 一开始是根据uniapp提供的蓝牙api写的蓝牙方法,之后发现复用性,以及一些状态的监听存在缺陷,之后整理成了类。这样复用性以及状态监听的问题就解决了。 蓝牙组件 创建蓝牙组件的类 单例模式是为了保证蓝牙长连接&#xff0…

前端(一)——前端开发遇到的普遍问题以及解决策略

😄博主:小猫娃来啦 😄文章核心:前端开发遇到的普遍问题以及解决策略 前端十万个为什么? 有人说vue框架是基于mvvm实现的?这种说法对吗? mvc和mvvm的区别是什么? mvvm是否是mvc的升…

内容文本生成二维码用excel表格导出(java)

内容文本生成二维码用excel表格导出(java) //若有问题可留言 效果如下: import java.io.ByteArrayOutputStream; import java.io.FileOutputStream; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map;import org.apache.po…

大厂股权就是这么“坑”,150万股票到账前被优化,损失惨重

某网友发文称:“自己还有47天就可以解锁股权,到时就有150万的股票到账,结果接到公司裁员通知,实在是淌血,我能反抗吗?” 对这我只能说,公司卡的就是这个点。所以大家在找工作的时候,…