YOLO系列理论解读 v1 v2 v3

news2024/12/27 13:06:14

YOLO系列理论解读

YOLO v1(You Only Look Once:Unified, Real-Time Object Detection)

YOLO v1实现步骤

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

通常情况下将S取值为S=7划分为7x7的一个区域。

在这里插入图片描述

2)每个网格要预测B个bounding box,每个bounding box除了要预测位置之外,还要附带预测一个confidence值。每个网格还要预测c个类别的分数。

在这里插入图片描述
通常情况下的B=2使用PASCAL VOC进行训练类别数为20说明C=20

在这里插入图片描述
论文中提到了这么一段话。

For evaluating YOLO on PASCAL VOC, we use S = 7, B = 2. PASCAL VOC has 20 labelled classes so C = 20. Our final prediction is a 7 × 7 × 30 tensor.

说明了最后得到的预测参数的值是7x7x30个参数值,这和我们的网络结构之间有很大的关系。
在这里插入图片描述
我们将输入的448x448像素的三通道图片,经过设计的网络之后可以得到的是7x7x30的输出特征图。
在这里插入图片描述
因为论文中提到了B=2一个网格会给出两个边界框的预测值,共7x7=49个划分之后的网格

每一个1x1 x30个通道的网格的参数分布为 边界框1的4个坐标位置中心位置x,y与高度和宽度,边界框1的confidence 边界框2的4个坐标位置中心位置x,y与高度和宽度,边界框2的confidence C=20的每一个类别的预测分数,用通道长度30来进行表示。

在这里插入图片描述

Each bounding box consists of 5 predictions: x, y, w, h,
and confidence. The (x, y) coordinates represent the center
of the box relative to the bounds of the grid cell. The width
and height are predicted relative to the whole image. Finally
the confidence prediction represents the IOU between the
predicted box and any ground truth box.

其中给出的X Y的值是相对于中心点的相对值,而w和h是相对与图像大小的相对值。

在这里插入图片描述
下面给出了confidence的一个计算过程,若网格框中没有物体存在,将其定义为0(pr值)若有物体存在pr值定义为1 最后confidence = IOU X PR

we define confidence as Pr(Object) ∗ IOUtruthpred . If noobject exists in that cell, the confidence scores should bezero. Otherwise we want the confidence score to equal theintersection over union (IOU) between the predicted box and the ground truth

最后给出每一个类别概率的计算公式是怎样得到的:

在这里插入图片描述

再一次给出Yolo v1论文中的网络结构图。其中包括了与4096个神经元进行全连接的操作,之后在进行一个Reshape处理得到30x30 x7的输出结构

在这里插入图片描述

损失函数

yolo v1的损失函数个人感觉是及其复杂的,在论文中给出的函数表达形式为:

λ coord  ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj  [ ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 ] + λ coord  ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj  [ ( w i − w ^ i ) 2 + ( h i − h ^ i ) 2 ] + ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj  ( C i − C ^ i ) 2 + λ noobj  ∑ i = 0 S 2 ∑ j = 0 B 1 i j n o o b j ( C i − C ^ i ) 2 + ∑ i = 0 S 2 1 i obj  ∑ c ∈  classes  ( p i ( c ) − p ^ i ( c ) ) 2 \begin{array}{l} \lambda_{\text {coord }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj }}\left[\left(x_{i}-\hat{x}_{i}\right)^{2}+\left(y_{i}-\hat{y}_{i}\right)^{2}\right] \\ +\lambda_{\text {coord }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj }}\left[\left(\sqrt{w_{i}}-\sqrt{\hat{w}_{i}}\right)^{2}+\left(\sqrt{h_{i}}-\sqrt{\hat{h}_{i}}\right)^{2}\right] \\ +\sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\text {obj }}\left(C_{i}-\hat{C}_{i}\right)^{2} \\ +\lambda_{\text {noobj }} \sum_{i=0}^{S^{2}} \sum_{j=0}^{B} \mathbb{1}_{i j}^{\mathrm{noobj}}\left(C_{i}-\hat{C}_{i}\right)^{2} \\ +\sum_{i=0}^{S^{2}} \mathbb{1}_{i}^{\text {obj }} \sum_{c \in \text { classes }}\left(p_{i}(c)-\hat{p}_{i}(c)\right)^{2} \end{array} λcoord i=0S2j=0B1ijobj [(xix^i)2+(yiy^i)2]+λcoord i=0S2j=0B1ijobj [(wi w^i )2+(hi h^i )2]+i=0S2j=0B1ijobj (CiC^i)2+λnoobj i=0S2j=0B1ijnoobj(CiC^i)2+i=0S21iobj c classes (pi(c)p^i(c))2

在这里插入图片描述

整个公式损失的计算采用的是误差平方和的形式来进行实现的即:预测值减去真实的标签值,在取平方

符号含义的说明:
在这里插入图片描述

在之前的机器学习中该符号也有一定的应用。

对于损失函数的定义包括了以下的三个部分:边界框损失,confidence损失和最后的分类损失三部分损失共同构成

存在问题

在这里插入图片描述
Yolo v1对小的集群目标的预测效果差,例如之前论文值提到的对图片中的较小的鸟群有较差的预测效果。

YOLO V2 (YOLO9000)

因为yolo v2可以检测出9000个类别的物体,也称为yolo9000

在这里插入图片描述
在当时的论文中可以看出yolov2的map值和计算速度都达到了当时最高的水准。

v2的改进

  1. Batch Normalization(引入了BN层)

提高了map值2%替代正则化的操作,同时也去除了dropout操作

Batch normalization leads to significant improvements in convergence while eliminating the need for other forms of regularization [7]. By adding batch normalization on all of the convolutional layers in YOLO we get more than 2% improvement in mAP. Batch normalization also helps regularize the model. With batch normalization we can remove dropout from the model without overfitting

  1. High Resolution Classifier(更高分辨率的分类器)
  2. Convolutional With Anchor Boxes.(使用锚框来进行预测)

增加了召回率

  1. Fine-Grained Features(结合更底层的特征信息)

将高层信息与相对低层的信息之间进行融合的操作。通过passthrough layer来进行实现的

passthrough layer将高层将13x13的结果与高层的特征图26x26x512进行一个结合的操作。
在这里插入图片描述
在通过PassThrough Layer (W/2, H/2, Cx4)时如图所示,高度和宽度会变为原来的一半,即26—13而通道数变为原来的4倍
在这里插入图片描述
中间连接有一个1x1的卷积层来进行通道的压缩与降维操作。

  1. Multi-Scale Training(采用多尺度的训练方法)

在这里插入图片描述

following multiples of 32: {320, 352, …, 608}. Thus the
smallest option is 320 × 320 and the largest is 608 × 608.
We resize the network to that dimension and continue training.

采用的全部的输入都是32的整数倍。

BackBone骨干网络

Yolo v2使用的网络架构为:Darknet-19作为其骨干网络(224x224的输入共19个卷积层)模型结构图。

在这里插入图片描述
不同之处在于YOLO v2使用的输入是448x448或32整数倍的一个输入。

网络结构:
在去掉backbone的最后一层卷积层的基础上,我们添加了三个3x3卷积核大小为1024的三个卷积层。
最后在接一个1x1的卷积层,输出的个数即为我们要检测的物体的类别数量。

输出的125是20个类别 4个坐标 一个confidence 使用5个锚框最后在x5

125 =(20+5) x 5

YOLO V3( An Incremental Improvement)

主干网络

Darknet-53:53层网络的特点通过卷积层替换之前的下采样层,使得检测的效果得到了提升。

在这里插入图片描述

其网络结构为:
在这里插入图片描述

2 + ( 1 × 2 ) + 1 + ( 2 × 2 ) + 1 + ( 8 × 2 ) + 1 + ( 8 × 2 ) + 1 + ( 4 × 2 ) + 1 = 53 \begin{array}{l} 2+ \\ (1 \times 2)+1+ \\ (2 \times 2)+1+ \\ (8 \times 2)+1+ \\ (8 \times 2)+1+ \\ (4 \times 2)+1=53 \end{array} 2+(1×2)+1+(2×2)+1+(8×2)+1+(8×2)+1+(4×2)+1=53

其中在网络结构这里论文中给出了锚框的一些设定的尺寸,并对得到的参数进行了解释。

On the COCO dataset the 9 clusters were:
(10×13),(16×30),(33×23),(30×61),(62×45),(59×119),(116 × 90),(156 × 198),(373 × 326).

N × N × [3 ∗ (4 + 1 + 80)] for the 4 bounding box offsets,
1 objectness prediction, and 80 class predictions.

首先有80个类别信息,4个位置信息和yolo中特有的一个confidence参数。
在这里插入图片描述
一个锚框就包括了85个参数信息。

在这里插入图片描述

目标边界框的预测

在这里插入图片描述

σ ( x ) = Sigmoid ⁡ ( x ) \sigma(x)=\operatorname{Sigmoid}(x) σ(x)=Sigmoid(x)

将预测的边界框中心限制在当前cell中。

与之前的FasterRCNN不同的是边界框的回归并不是基于锚框的而是相对与当前网格的左上角点的。

其中的tx ty tw th是预测所给出的坐标的参数信息。

b x = σ ( t x ) + c x b y = σ ( t y ) + c y b w = p w e t w b h = p h e t n \begin{array}{l} b_{x}=\sigma\left(t_{x}\right)+c_{x} \\ b_{y}=\sigma\left(t_{y}\right)+c_{y} \\ b_{w}=p_{w} e^{t_{w}} \\ b_{h}=p_{h} \mathrm{e}^{t_{n}} \end{array} bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=phetn

从而得到最终预测的中心点的坐标和宽高值

损失函数

L ( o , c , O , C , l , g ) = λ 1 L conf  ( o , c ) + λ 2 L c l a ( O , C ) + λ 3 L l o c ( l , g ) L(o, c, O, C, l, g)=\lambda_{1} L_{\text {conf }}(o, c)+\lambda_{2} L_{c l a}(O, C)+\lambda_{3} L_{l o c}(l, g) L(o,c,O,C,l,g)=λ1Lconf (o,c)+λ2Lcla(O,C)+λ3Lloc(l,g)

λ 1 , λ 2 , λ 3 为平衡系数。 \lambda_{1}, \lambda_{2}, \lambda_{3}为平衡系数。 λ1,λ2,λ3为平衡系数。

损失函数同样包括了三个损失分别为:置信度损失,分类损失,定位损失。

  • 置信度损失使用的是二值交叉熵损失:

YOLOv3 predicts an objectness score for each bounding
box using logistic regression.This should be1if thebound-lng
g box prior overlaps a ground truth object by more than
any other bounding box prior. If the bounding box prior

Binary Cross Entropy

L conf  ( o , c ) = − ∑ i ( o i ln ⁡ ( c ^ i ) + ( 1 − o i ) ln ⁡ ( 1 − c ^ i ) ) N L_{\text {conf }}(o, c)=-\frac{\sum_{i}\left(o_{i} \ln \left(\hat{c}_{i}\right)+\left(1-o_{i}\right) \ln \left(1-\hat{c}_{i}\right)\right)}{N} Lconf (o,c)=Ni(oiln(c^i)+(1oi)ln(1c^i))

c ^ i = Sigmoid ⁡ ( c i ) \hat{c}_{i}=\operatorname{Sigmoid}\left(c_{i}\right) c^i=Sigmoid(ci)

其中oi,∈[0,1],表示预测目标边界框与真实目标边界框的IOU
c为预测值,ci,为c通过Sigmoid函数得到的预测置信度。N为正负样本个数。

  • 类别损失使用的是二值交叉熵损失:

L c l a ( O , C ) = − ∑ i ∈  posj  j  cla  ( O i j ln ⁡ ( C ^ i j ) + ( 1 − O i j ) ln ⁡ ( 1 − C ^ i j ) ) N pos  C ^ i j = Sigmoid ⁡ ( C i j ) \begin{array}{c} L_{c l a}(O, C)=-\frac{\sum_{i \in \text { posj } j \text { cla }}\left(O_{i j} \ln \left(\hat{C}_{i j}\right)+\left(1-O_{i j}\right) \ln \left(1-\hat{C}_{i j}\right)\right)}{N_{\text {pos }}} \\ \hat{C}_{i j}=\operatorname{Sigmoid}\left(C_{i j}\right) \end{array} Lcla(O,C)=Npos i posj j cla (Oijln(C^ij)+(1Oij)ln(1C^ij))C^ij=Sigmoid(Cij)

其中Oij∈{0,1},表示预测目标边界框i中是否存在第j类目标存在则为1

Cij为预测值,Cij(hat)为Cij通过Sigmoid函数得到的目标概率

Npos为正样本个数

  • 定位损失

L loc  ( t , g ) = ∑ i ∈  pos  ( σ ( t x i ) − g ^ x i ) 2 + ( σ ( t y i ) − g ^ y i ) 2 + ( t w i − g ^ w i ) 2 + ( t h i − g ^ h i ) 2 N pos  L_{\text {loc }}(t, g)=\frac{\sum_{i \in \text { pos }}\left(\sigma\left(t_{x}^{i}\right)-\hat{g}_{x}^{i}\right)^{2}+\left(\sigma\left(t_{y}^{i}\right)-\hat{g}_{y}^{i}\right)^{2}+\left(t_{w}^{i}-\hat{g}_{w}^{i}\right)^{2}+\left(t_{h}^{i}-\hat{g}_{h}^{i}\right)^{2}}{N_{\text {pos }}} Lloc (t,g)=Npos i pos (σ(txi)g^xi)2+(σ(tyi)g^yi)2+(twig^wi)2+(thig^hi)2

g ^ x i = g x i − c x i g ^ y i = g y i − c y i g ^ w i = ln ⁡ ( g w i / p w i ) g ^ h i = ln ⁡ ( g h i / p h i ) \begin{array}{l} \hat{g}_{x}^{i}=g_{x}^{i}-c_{x}^{i} \\ \hat{g}_{y}^{i}=g_{y}^{i}-c_{y}^{i} \\ \hat{g}_{w}^{i}=\ln \left(g_{w}^{i} / p_{w}^{i}\right) \\ \hat{g}_{h}^{i}=\ln \left(g_{h}^{i} / p_{h}^{i}\right) \end{array} g^xi=gxicxig^yi=gyicyig^wi=ln(gwi/pwi)g^hi=ln(ghi/phi)
在这里插入图片描述

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

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

相关文章

如何理解 Java 的垃圾回收机制及其工作原理

Java的垃圾回收机制(Garbage Collection,GC)是Java虚拟机(JVM)内存管理的重要组成部分,其主要目的是自动管理内存,释放不再使用的对象所占的内存空间,防止内存泄漏,确保应…

C#——析构函数详情

析构函数 C# 中的析构函数(也被称作“终结器”)同样是类中的一个特殊成员函数,主要用于在垃圾回收器回收类实例时执行一些必要的清理操作。 析构函数: 当一个对象被释放的时候执行 C# 中的析构函数具有以下特点: * 析构函数只…

助力OTT大屏营销,酷开科技引领产业变革与创新

随着大屏电视产品的迭代,越来越多家庭以增换购等多种形式获得超高清、超大屏的智能电视,大屏的人均拥有量和渗透率进一步增加。在这种情况下,通过OTT应用为载体,将大量内容持续输送到大屏终端,从而形成了电视硬件普及与…

消费盲返新风尚:让消费者与商家共享繁荣

在当今的消费市场中,消费盲返模式作为一种创新型的消费返利机制,正在逐步改变消费者的购物体验。这种模式不仅为消费者提供了额外的返利机会,同时也为商家带来了诸多益处,实现了消费者与商家的共赢。 消费盲返模式解读 消费盲返模…

Postman batch post requests import 双引号问题

初次使用工具中注意事项: 1 定义json参数变量value由于没有注意双引号问题导致run 报400 错误 测试结果总是报400 bad request错误

不会开发的你也能管理好企业漏洞,开源免费工具:洞察(insight II)

公司刚开始建设安全管理时,都是从一片混沌开始的,资源总是不够的,我们每个做安全的人员,又要会渗透,又要抓制度,还得管理各种漏洞。在管理楼栋是,我相信大家都遇到过以下几个问题: …

Modbus协议转Profinet协议网关与气体监测系统配置案例

一、背景;Modbus协议和Profinet协议作为工业领域常见的两种通讯协议,各自具有一定的特点和应用范围。Modbus转Profinet网关(XD-MDPN100/300)在工业自动化控制系统中,可以将Modbus协议转换为Profinet协议,以…

SurfaceView->SurfaceView基本概念

绘制过程 View和SurfaceView绘制过程 PhoneWindow:Window的具体实现,在Activity中调用setContentView()方法时,一个PhoneWindow实例会对应一个ViewRootImpl实例,绘制,事件分发传递给ViewRootImpl进行ViewRootImpl&…

李宏毅深度学习01——基本概念简介

视频链接 基本概念 Regression(回归): 类似于填空 Classification(分类): 类似于选择 Structure Learning(机器学习): ?? 机器学习找对应函数…

媲美Sora,免费使用!带物理模拟的,文生视频模型

6月13日,知名3D建模平台Luma AI发布最新文生视频模型Dream Machine,向所有用户免费开放使用。 Dream Machine除了支持文本之外,还可使用图片作为引导来生成视频,其生成的视频质量、动作一致性、色彩、光影、饱和度、运镜等方面&a…

CentOS系统自带Python2无法使用pip命令

Linux运维工具-ywtool 目录 一. 系统环境二.解决三.验证四.备注(1)输入"yum install -y python-pip",提示没有可用 python-pip包(2)安装完pip后进行升级 一. 系统环境 centos7系统自带的python2.7无法使用pip命令 二.解决 yum install python-pip -y三.验证 pip…

【QT5】<知识点> QT串口编程

目录 前言 一、串口编程步骤 0. 添加串口模块 1. 自动搜索已连接的串口 2. 创建串口对象 3. 初始化串口 4. 打开串口 5. 关闭串口 6. 发送数据 7. 接收数据 二、简易串口助手 1. 实现效果 2. 程序源码 3. 实现效果二 前言 本篇记录QT串口编程相关内容&#xff0…

Yolo-World训练过程中使用wandb进行可视化

训练过程可视化有两种方式:wandb和tensorboard,这里我采用的是wandb,想要在训练过程中调用wandb只需要在要训练的配置文件(如yolo_world_v2_l_vlpan_bn_sgd_1e-3_40e_8gpus_finetune_coco.py)中加上一行代码即可&#…

k8s+springboot+redis部署配置连接

1 springboot 配置k8s中的redis服务名 #tomcat访问端口 # 应用名称 spring.application.namedemo # 应用服务Web访问端口 server.port8089 server.envtest #缓存关闭 spring.thymeleaf.cachefalse #可选配置 management.endpoints.enabled-by-defaulttrue management.endpoint…

SpringBoot接入RS-232串口通讯实现数据交互

目录 一、什么是RS-232? 先看看硬件通讯接口长啥样 RS-232 二、方案一 1.前期准备 a.配置 RXTX 1)下载 RXTX 包并解压 2)拷贝动态库到对应的jdk目录下 Windows平台 Linux平台 3)在工程根目录下创建 lib 文件夹&#x…

提升网络安全韧性:从基础防护开始

随着信息技术的迅猛发展,互联网已深刻融入社会的各个层面,从日常生活到企业运营,再到国家基础设施。与此同时,网络威胁和攻击也呈现出多样化和复杂化的趋势,给网络安全带来了严峻挑战。 一、背景 随着信息技术的迅猛发…

力扣每日一题 6/13 反悔贪心算法

博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 2813.子序列最大优雅度【困难】 题目: 给你一个长度为 n 的二…

使用pyqt对yolov5进行简答部署

YOLOv5是一种高效的实时目标检测算法,广泛应用于各类计算机视觉任务中。为了实现便捷的图形用户界面(GUI),我们采用了PyQt框架。PyQt是一个Python绑定的Qt库,用于创建跨平台的应用程序。 在本研究中,我们首…

LINUX网络FTP服务

一、FTP服务 FTP服务:file transfer protocol :文件传输协议。在网络上进行双向传输,也是一个应用程序。不同的操作系统有不同的FTP软件,但使用的协议是一样的。 FTP协议基于TCP协议,有两个端口,即20和21。 20端口&…