【Yolo系列目标检测模型】详细整理!更新中

news2024/11/18 17:44:33

文章目录

  • 1、YOLOv1
    • 1.1、概述
    • 1.2、实现方案
      • 1)整体思路
      • 2)网络结构
      • 3)损失函数
      • 4)推理/预测过程
      • 5)优缺点
  • 2、YOLOv2
    • 2.1、概述/改进整体思路
    • 2.2、YOLOv2的改进点/tricks
      • 1)Multi-Scale Training
      • 2)High resolution classifier
      • 3)backbone的改进
      • 4)passthrough layer
      • 5)Convolution with anchor boxes
      • 6)Dimension Clusters
      • 7)Direct location prediction
  • 3、Yolov3
    • 3.1、Backbone
    • 3.2、损失函数

1、YOLOv1

1.1、概述

1、YOLOv1的核心思想就是:网络将整张图像作为输入,并直接在输出层回归得到bounding box的位置和类别,即one-stage的思想;
2、而Faster RCNN的思想:先通过RPN网络提取proposals,再通过两个分支进行bbox回归和bbox分类,即two-stage的思想;

1.2、实现方案

1)整体思路

由于是one-stage的思想,但是又需要去预测出bbox和对应类别,因此使用了划分为S × \times ×S个网格grid的方式,每个grid负责预测B个bounding box,还要预测B个对应的置信度分数confidence,以及每个grid对应的C个类别概率。因此每个网格预测得到的向量维度为4 × \times ×B+B+C,最终得到的预测特征图应该为S × \times ×S × \times ×(5B+C)。
在这里插入图片描述

  • B个bounding box(使用[x, y, w, h]四个值表示即可):需要注意的是,[x, y, w, h]需要归一化到0-1之间,坐标的x,y用对应网格的offset归一化到0-1之间,w,h用图像的width和height归一化到0-1之间。例如,输入图像的宽和高为width和height,该网格grid cell的坐标为(x0, y0),则预测出的bbox的坐标应进行如下归一化:
    在这里插入图片描述

  • confidence可以用来表示grid cell / 预测出的bbox是否含有object,以及预测的object有多准确两个信息,Pr(object)表示的是grid cell是否包含object,如果包含为1,否则为0。因此,如果包含object,confidence的值就是预测的bbox和GT之间的IoU值
    Alt

  • 注意预测的C个类别信息是针对每个grid cell的,而confidence信息是针对每个bounding box的。

2)网络结构

在这里插入图片描述

  • 网络包含24个卷积层和2个全连接层,YOLOv1的最后一层采用了线性激活函数 ϕ ( x ) \phi(x) ϕ(x),其它层采用了Leaky ReLU。两个全连接层:第一个全连接层将输入特征图展平,输出通道数为4096;第二个全连接层输入通道数4096,输出通道数为7 × \times × 7 × \times × 30=1470。
    在这里插入图片描述

  • 网络的输入为448 × \times × 448(注意:由于该网络中全连接层已经固定,因此输入只能为448 × \times × 448)。

3)损失函数

损失函数由三部分组成:位置损失、置信度损失、分类损失,都采用sum-squared error计算
在这里插入图片描述

  • 位置损失/坐标预测损失

a)预测出的bbox由四个值就可以表示:(x, y, w, h),于是我们可以通过计算预测值与GT之间的误差平方和作为损失函数。
b)但是需要注意的是,不是所有的bbox都要参与loss的计算,只有第i个网格内包含object该网格中预测的B个bbox中与GT bbox具有最大的IoU的第j个bbox才会参与loss的计算。则其余的bbox不参与loss的计算。损失函数中 1 i j o b j 1_{ij}^{obj} 1ijobj就表示这个意思。
c)对不同大小的bbox预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。因此损失函数中的w和h的两项采用了 w \sqrt{w} w h \sqrt{h} h 来计算。可以看出,同样的偏移,小bbox对应的损失会更大,会使网络更关注于小bbox。
在这里插入图片描述

  • 置信度损失

a)首先对于所有的grid cell的所有bbox都要计算预测的confidence与GT之间的损失
b)对于包含object的grid cell来说,置信度分数的ground truth为 C i = 1 × I O U p r e d t r u t h C_i = 1 \times {IOU}_{pred}^{truth} Ci=1×IOUpredtruth ,也就是说由于预测出的bbox是变化的,所以训练过程中GT是需要不断地进行计算的
c)对于没有object的grid cell来说,置信度分数 C i = 0 C_i=0 Ci=0,也需要进行损失函数的计算

  • 分类损失

分类损失是只针对包含object的grid cell进行计算,因此GT值就是该object的类别

4)推理/预测过程

推理和预测过程中,输入图像得到预测结果,进行后处理:

  • 首先计算每个bbox的class specific confidence score:预测得到的类别概率与每个bbox对应的confidence相乘
    在这里插入图片描述
  • 然后设置阈值,过滤掉低于阈值的bbox,再对其余的bbox进行排序,并进行NMS,得到最终的bbox
  • NMS:非极大值抑制,主要用于去除重叠的bbox,主要过程如下:

对于C个类别中的每个类别,进行如下操作:
a)计算该类别的每个bbox的class specific confidence score,低于设定的阈值的bbox,将其score设为0,即删除掉该bbox
b)对其余的bbox进行score的排序,从高到低选择bbox,进行如下操作:首先将该bbox添加到输出列表;然后遍历其余bbox(score为非0且不在输出列表的)并计算二者之间的IoU值;最后,根据IoU阈值,高于阈值的bbox的score设为0
c)执行b操作直到所有的bbox要么在输出列表,要么score为0时,该类别的NMS结束
遍历完C个类别,NMS最终的结果就是输出列表中的bbox

5)优缺点

优点:

  • pipeline简单且快速

缺点:

  • 预测/推理阶段的输入图像的分辨率受限制:由于全连接层固定,因此在检测时,YOLO训练模型只支持与训练图像相同分辨率的输入图片。
  • 群体检测困难:每个grid cell预测的B个bbox中,最终只选择IoU最大的一个bbox作为输出,即每个grid最多只预测出一个object。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。这是YOLO方法的一个缺陷。
  • 小目标检测困难 :损失函数中,大物体IOU误差和小物体IOU误差对网络训练中loss贡献值接近(虽然采用求平方根方式,但没有根本解决问题)。

2、YOLOv2

2.1、概述/改进整体思路

  • 分析YOLOv1显示,YOLOv1出现了大量定位错误,而且召回率相对较低
  • 因此,YOLOv2主要关注的是在保持分类精度的同时,提高召回率和定位准确度。此外,还希望保持快速的检测速度
  • 于是,YOLOv2并没有扩大网络,而是提出了许多tricks来改进网络,提高性能

2.2、YOLOv2的改进点/tricks

1)Multi-Scale Training

  • 引入多尺度训练的目的:可以使网络适应不同尺寸的输入图像
  • 实现过程:模型每训练一定的epoch,改变输入图像的尺寸,以使模型可以对不同输入尺寸的图像更鲁棒,提高模型在不同尺寸图像上的泛化性能
  • 论文中使用的尺寸是以32为倍数,包括320、352、384、416、448、480、512、544、576、608这10种尺寸。
  • 需要注意的是,YOLOv2可以引入多尺度输入的前提是:对backbone和head都做了网络结构的调整,移除了全连接层(参数量太大,容易过拟合,训练慢),因此可以输入不同分辨率的图像。

2)High resolution classifier

  • 简单来说,就是YOLOv1采用了在ImageNet上预训练的模型,但是其输入是224 × \times × 224,是很小的,而YOLO系列模型的输入是448 × \times × 448,不一致的分辨率输入可能会有一些影响。
  • 因此,在224 × \times × 224的输入图像上预训练以后,再采用448 × \times × 448的高分辨率图像做一些微调,最后再作为YOLO的backbone,这样可以使网络适应448 × \times × 448的高分辨率输入,缓解输入分辨率不一致造成的影响

3)backbone的改进

  • YOLOv1的backbone采用的是GoogleNet,YOLOv2新引入了Darknet19,包含19个卷积层和5个max pooling层,因此计算量比YOLOv1要更少。
  • 此外,需要注意的是:与YOLOv1(类别的预测是针对每个grid cell)不同,最后预测出的结果中,类别的预测是针对每个bbox的(主要是因为YOLOv2采用了anchor box的方式),例如416 × \times × 416的输入,经过32的下采样(5个max pooling)以后,得到的特征图为13 × \times × 13,因此预测出B个bbox,C个类别,最后的维度应为13 × \times × 13 × \times × [(5 + C) × \times × B]
  • 以下网络为用于分类的网络,在检测时,YOLOv2对网络结构做了微调:移除最后一个卷积层、global avgpooling层和softmax;移除后增加了3个3x3x1024的卷积层和一个passthrough layer;增加一个1×1个卷积层作为网络输出层。输出的channel数为(5 + C) × \times × B
    在这里插入图片描述
  • 此外,在每个卷积层后面增加了BN层(Batch Normalization),回顾BN层:

BN层的作用:在训练过程中,网络每层输入的分布一直在改变, 会使训练难度加大,对网络的每一层的输入(每个卷积层后)都做了归一化,这样网络就不需要每层都去学数据的分布,收敛会更快。
在这里插入图片描述

4)passthrough layer

  • YOLOv1的其中一个缺点就是小目标检测较差,于是YOLOv2从另一个方面改进了这一点:将最后一个maxpooling层的输入特征图划分为四部分,再与maxpooling层之后的特征图连接到一起(沿通道维度)
  • 例如:416 × \times × 416的输入,经过5个max pooling层之后的输出为13 × \times × 13,那对于一些小目标来说,其特征有可能是不充足的,因此将26 × \times × 26的特征图通过passthrough layer保留一部分细节信息。
    在这里插入图片描述
  • 需要注意的是,划分的过程不是直接一分为四,而是需要按对应位置进行选择,例如下面4 × \times × 4的特征图划分为四个2 × \times × 2的特征图
    在这里插入图片描述

5)Convolution with anchor boxes

  • YOLOv1在预测bbox时,是直接回归出(x, y, w, h)的,x和y是相对于grid cell做归一化,w和h是相对于整个图像做归一化。但是,由于各个图片中存在不同尺度和长宽比的物体,YOLOv1在训练过程中学习适应不同物体的形状是比较困难的(学习比较困难可能是由于没有先验),这也导致YOLOv1在精确定位方面表现较差。
  • 基于此,YOLOv2采用了anchor box作为先验,预测(x, y, w, h)的偏移量的方式
  • 另外,论文中采用的输入为416 × \times × 416,是因为最终输出的特征图为13 × \times × 13,这样做的原因:特征图中有奇数个位置,所以只有一个中心单元格。物体往往占据图像的中心,所以最好在中心有一个单独的位置来预测这些物体,而不是在附近的四个位置。

6)Dimension Clusters

  • 使用anchor box作为先验,存在的第一个问题:anchor box的尺寸和长宽比是手动预先设定的,对于具体的数据和任务来说,不一定是最优的。
  • 因此,YOLOv2提出了Dimension Clusters,对训练集上的bbox做k-means聚类,以找到K个更好的先验anchor box。有了更好的先验anchor box,可以使网络更容易预测到更好的结果
  • 回顾k-means聚类算法:

1.选择K个样本作为初始聚类中心
2.对于数据集中每个样本,计算它到K个聚类中心的距离,并将其分到距离最小的聚类中心所对应的簇中
3.对于K个聚类后的簇,重新计算它的聚类中心
4.重复上面的步骤2和3,直到达到某个终止条件(迭代次数、最小误差变化)

  • 使用k-means聚类,其距离度量不采用欧氏距离,我们主要想获得先验anchor与GT是要有最大的IoU,因此采用如下距离度量:

d(box, centroid) = 1 − IOU(box, centroid)(box:其他框, centroid:聚类中心框)

  • YOLOv2给出的聚类分析结果如下图所示,最终在model复杂性(K越大,anchor越多,模型复杂度也就越大)与high recall之间权衡之后,选择聚类分类数K=5。
    在这里插入图片描述

7)Direct location prediction

  • 使用anchor box作为先验,预测box的位置时,会存在第二个问题:模型的不稳定性,特别是在早期迭代期间。大多数不稳定性来自于对边框(x, y)位置的预测。
  • 原因可能是:如果采用预测相对于anchor box的偏移,那么在随机初始化的情况下,模型需要很长时间才能稳定到预测合理的偏移量。
  • YOLOv2采用的计算方式:grid cell相对于图像左上角的偏移量是cx,cy。anchor box的宽度和高度分别是pw和ph,对于每个grid cell预测的B个bbox中,每个bbox预测5个值(tx, ty, tw, th, to),表示预测出的bbox相对于grid cell左上角的相对偏移值(使用sigmoid函数 σ(⋅)将值约束在 [0,1] 之间,这使得模型训练更稳定)。
  • 则预测的边界框相对于特征图的中心坐标(bx,by)和宽高(bw、bh)为
    在这里插入图片描述在这里插入图片描述

3、Yolov3

  • Yolov3的改变主要是在Backbone和损失函数上

3.1、Backbone

  • Yolov3的Backbone主要是采用了DarkNet53和多尺度特征融合的思想。
  • 网络结构如下:
    在这里插入图片描述
    在这里插入图片描述
  • Yolov3采用了DarkNet53的前52层,去除掉了全连接层和softmax层(损失函数中修改为了sigmoid,也就是说一个bbox不一定为一个类别,如果使用softmax层,概率和为1,类别之间互斥;使用sigmoid激活函数,类别之间互不影响)
  • 检测分支共有三个:分别在32倍、16倍、8倍下采样率的情况下进行检测,同时16倍和8倍下采样率的分支中进行了上采样并concat的操作以获取多尺度的信息。图中检测的三个分支的尺寸之比为1:2:4(13:26:52),通道数都是255,按照coco的80个类别,是这样计算的:(80+5) × \times × 3 = 255
  • Yolov3和v2一样都采用了kmenas聚类的方式计算得到了三个尺度下的anchor bbox的尺寸为:
    在这里插入图片描述
  • 32倍降采样的感受野最大,适合检测大的目标,所以在输入为416×416时,每个cell的三个anchor box为(116 ,90); (156 ,198); (373 ,326)。16倍适合一般大小的物体,anchor box为(30,61); (62,45); (59,119)。8倍的感受野最小,适合检测小目标,因此anchor box为(10,13); (16,30); (33,23)。所以当输入为416×416时,实际总共有(52×52+26×26+13×13)×3=10647个anchor box。

3.2、损失函数

  • Yolov3是将v1和v2使用的预测类别的softmax层更改为了sigmoid激活函数,并使用了交叉熵损失函数预测。
  • Yolov3将softmax变为sigmoid是基于这样一个事实:一个bbox内可能不止有一个类别。而softmax和sigmoid之间应用于多分类又有这样的区别:

softmax:1)用于单标签的多分类问题,即从多个分类中选取一个正确答案。 Softmax 综合了所有输出值的归一化,因此得到的是不同概率之间的相互关联 。2)各类别概率之和为1 ,也就是说我们加大某一类别的概率必然导致其他类别减小——各类别之间相互关联,是互斥的。
sigmoid:1)用于多标签的多分类问题,可以选取多个标签作为正确答案,它是将任意实数值归一化映射到[0-1]之间,2)各类别概率之和则不一定为1 ,各个输出值依次独立的经过激活函数的映射,某一个类别概率增大可能也伴随另一个类别概率增大——各类别之间相互独立,不互斥。

例如:
多标签问题:一部电影即是剧情片又是爱情片,各类别之间不互斥——sigmoid;
多分类问题:一个动物图谱只能是一类动物,各类别之间互斥——softmax;

  • 因此,Yolov3将用于单标签分类的Softmax分类器改成多个独立的用于多标签分类的Logistic分类器(sigmoid),取消了类别之间的互斥,可以使网络更加灵活。
  • 因此损失函数做了一些修改,置信度分数和分类损失都为交叉熵损失,并在坐标损失中乘以 ( 2 − b w b h ) (2-b_wb_h) (2bwbh),使得小目标的权重大,大目标的权重小。如下:
    在这里插入图片描述

参考链接:
YOLO学习笔记——第一篇YOLOv1
【YOLO系列】YOLOv2论文超详细解读(翻译 +学习笔记)
YOLO系列详解:YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5、YOLOv6、YOLOv7

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

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

相关文章

智安网络|常见的网络安全陷阱:你是否掉入了其中?

在数字化时代,网络安全成为了一个重要的议题。随着我们越来越多地在互联网上进行各种活动,诸如在线银行交易、社交媒体分享和在线购物等,我们的个人信息也更容易受到攻击和滥用。虽然有许多关于网络安全的指导和建议,但仍然有许多…

代码扫描平台SonarQube搭建保姆级教程

代码扫描工具SonarQube,想必大家也有了解,就是那种不明觉厉的存在,最近刚好有需求,需要自己搭建,下面就给大家记录下搭建的过程。 不了解的,可以先看看 https://github.com/SonarSource/sonarqube 有一个初…

【浩鲸科技】济南Java后端面经

本文目录 写在前面试题总览题目解析1.说一下SpringBoot中常用的注解2.Redis中的基本数据类型3.TCP的网络协议4.java中常见的锁5.Hashmap的底层数据结构、底层源码、扩容机制源码6.java面向对象的特点 写在前面 关于这个专栏: 本专栏记录一些互联网大厂、小厂的面试实…

短视频矩阵系统源码开发流程​

一、视频矩阵系统源码开发流程分为以下几个步骤: 四、技术开发说明: 产品原型PRD需求文档产品交互流程图部署方式说明完整源代码源码编译方式说明三方框架和SDK使用情况说明和代码位置平台操作文档程序架构文档 一、抖音SEO矩阵系统源码开发流程分为以…

什么是 MyBatis?

经过前几篇博客的学习 Spring 系列的基本操作已经实现的差不多了,接下来,我们来学习更重要的知识,将前端传递的数据存储起来,或者查询数据库里面的数据。 一、MyBatis 是什么? MyBatis 是一款优秀的持久层框架&…

Vue中$route和$router的区别

$router:用来操作路由,$route:用来获取路由信息 $router其实就是VueRouer的实例,对象包括了vue-router使用的实例方法,还有实例属性,我们可以理解为$router有一个设置的含义,比如设置当前的跳转…

二叉树的基本操作函数(先、中、后、层次遍历)

//链式二叉树数据结构 typedef struct Node { TElemType data;//数据域 struct Node* lchild, * rchild;//左右孩子 }Node, * Tree; #include <queue> #define TElemType int //方便 应用的时候 改//链式二叉树数据结构 typedef struct Node {TElemType data;//数据域s…

ceph集群---使用RBD块存储

文章目录 创建和删除池RBD设备的配置及使用RBD 块设备数据的导出和导入 块存储接口是一种主流的存储访问接口&#xff0c;也是常见的存储形态&#xff0c;比如服务器下的/dev/sdx都是块存储设备。你可以像使用磁盘一样来使用Ceph提供的块存储设备。 在创建块存储设备之前&#…

Python缔造超级马里奥世界,带你畅游冒险与创造的奇境!

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 马里奥大叔这次发现了一个很大的宝藏&#xff0c;这次他终于可以不当马里奥大叔&#xff01; 可以当一次有钱的富人喽&#xff0c;让我们一起来玩一玩吧&#xff01; 帮马里奥大叔闯关并收集到金币。只有所有的金币都收集完…

删除(取消)亚马逊的云服务器Amazon EC2的操作方法、教程

删除&#xff08;取消&#xff09;亚马逊的云服务器Amazon EC2的操作方法、教程 关于Amazon EC2服务器 1.亚马逊的服务器只能终止&#xff0c;不能删除&#xff0c;终止后卷&#xff08;存储、硬盘会自动关闭&#xff0c;如果没有快照不可恢复&#xff09; 2.终止的服务器会存…

简单工厂模式VS策略模式

简单工厂模式VS策略模式 今天复习设计模式&#xff0c;由于简单工厂模式和策略模式太像了&#xff0c;重新整理梳理一下 简单工厂模式MUL图&#xff1a; 策略模式UML图&#xff1a; 1、简单工厂模式中只管创建实例&#xff0c;具体怎么使用工厂实例由调用方决定&#xff0c…

TSINGSEE青犀视频监控管理平台EasyNVR如何配置鉴权?

视频监控汇聚平台EasyNVR是基于RTSP/Onvif协议的视频平台&#xff0c;可支持将接入的视频流进行全平台、全终端的分发&#xff0c;分发的视频流包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等格式。为了满足用户的集成与二次开发需求&#xff0c;我们也提供了丰富的API接口供…

基于Java+SpringBoot+vue前后端分离古典舞在线交流平台设计实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

DP83867IS SGMII eye diagram问题调试记录

1. 前言 使用的是带CPU的DP83867IS,通过SGMII接口 从PHY到CPU的眼图看起来很好 而从CPU到PHY的眼图很差 2. 问题梳理 (1)能证实SGMII道有100欧姆的阻抗吗? (2)能不能做一个误码率测试来看看眼图是否仍然是可以接受的? (3)因为从PHY到CPU的眼睛是好的,可能有一个…

【初中数学竞赛题】已知m,n为正整数,且m^2+n^2=2009,求m+n的值。

已知 m m m, n n n为正整数&#xff0c;且 m 2 n 2 2009 m^2n^22009 m2n22009,求 m n mn mn的值。 一、使用因式分解加枚举 ① 对2009进行短除 7 | 2009 ‾ 7 | 287 ‾ 41 7 \underbar{|\enspace\enspace2009\enspace} \\ \enspace\enspace 7 \underbar{|\enspace287\enspa…

android首页申请android.permission.READ_PHONE_STATE权限合规处理办法?

1、像闲鱼一样&#xff0c;申请的时候在顶部弹个解释说明对话框&#xff1f;

如何解决使用Elsivier默认latex模板,显示多位作者名字而不是et.al形式

问题描述&#xff1a; 使用Elsivier默认模板&#xff0c;编辑论文的时候,使用\citep{论文缩写}命令&#xff0c;发现在编译之后的.pdf文件中&#xff0c;会显示出该论文所有作者的姓&#xff08;红色部分&#xff09;&#xff0c;而不是使用et.al的形式&#xff08;绿色部分&a…

线程阻塞和线程中断

本专栏学习内容又是来自尚硅谷周阳老师的视频 有兴趣的小伙伴可以点击视频地址观看 中断机制 简介 Java线程中断机制是一种用于协作式线程终止的机制。它通过将一个特殊的中断标志设置为线程的状态来实现。当线程被中断时&#xff0c;它可以检查这个中断标志并采取相应的措施…

TSINGSEE青犀视频安防监控管理平台EasyNVR如何配置鉴权?

视频监控汇聚平台EasyNVR是基于RTSP/Onvif协议的视频平台&#xff0c;可支持将接入的视频流进行全平台、全终端的分发&#xff0c;分发的视频流包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等格式。为了满足用户的集成与二次开发需求&#xff0c;我们也提供了丰富的API接口供…

无涯教程-jQuery - show( speed, callback )方法函数

show(speed&#xff0c;[callback])方法使用优美的动画显示所有匹配的元素&#xff0c;并在完成后触发可选的回调。 show( speed, [callback] ) - 语法 selector.show( speed, [callback] ); 这是此方法使用的所有参数的描述- speed - 代表三个预定义速度("slow&q…