人工智能学习07--pytorch21--目标检测:YOLO系列理论合集(YOLOv1~v3)

news2024/12/23 13:37:18

如果直接看yolov3论文的话,会发现有好多知识点没见过,所以跟着视频从头学一下。

学习up主霹雳吧啦Wz大佬的学习方法:
想学某个网络的代码时:到网上搜这个网络的讲解对这个网络大概有了印象读论文原文
很多细节都要依照原论文来实现,自己看原论文十分重要,发现更多原来没有发现的知识点)
读代码
在github上找大牛实现了的源代码,挑选自己喜欢的框架、作者经常更新的代码仓库、标star比较多的,来克隆代码 进行学习

克隆第一步:根据作者的readme将作者代码跑通;
克隆第二步:分析作者代码(可以先看:
①网络搭建部分,结合原论文比较好理解;
②数据预处理、损失计算(损失函数);
看完以上基本上就掌握了网络的核心知识点

看代码时需要结合原论文进行参考。有时在读原论文时,有些地方不太好理解,但如果结合别人的代码,也可以更好地理解。

yolo v1

在这里插入图片描述
慢于SSD,但是比Faster RCNN快(精度比Faster RCNN低)
在这里插入图片描述
一般S取7(每行每列分成7等份)
如果某个object的中心落在这个网格,那么这个网格就负责预测这个object。
在这里插入图片描述
黄框就负责预测狗这个目标
在这里插入图片描述

  1. B一般取2,S一般取7。
    confidence:在YOLO系列中独有的参数。
    数据集PASCAL VOC,共20个类别 C=20,
    grid cell是7*7大小的 S=7,
    Bounding box取B=2,
    预测的参数个数 7 * 7 * 30:
    30 = 2个框 * 每个框5个参数(4个位置+1个confidence) +20类
    在这里插入图片描述
    通过YOLOV1网络传播,最终得到7 * 7,深度为30的矩阵。
    对于沿着深度方向的每一行:
    2组bounding box 的参数,该网格预测的c个类别分数。
  2. 每个bounding box由5个值组成:x,y(预测框中心坐标,数值在0 ~ 1之间(相对于grid cell而言)),w,h(数值在0 ~ 1之间,也是相对值,是相对于整个图像而言的),confidence。
    相对值比实际值,相对值更方便运算(0 ~ 1之间的数字对训练有好处,收敛快,且不容易出现极端值)。
  3. confidence 预测bounding box与真实bounding box之间的交并比。在这里插入图片描述
    与Faster RCNN和SSD预测的目标概率是不一样的。
网络结构:

在这里插入图片描述

  1. 7 * 7卷积层,步距为2,通过一个maxpooling最大池化下采样(步距为2)
  2. 3 * 3卷积层,步距1(没有标s,那么步距就是默认为1),通过一个maxpooling最大池化下采样
  3. 通过1 * 1的卷积层、3 * 3的卷积层、1 * 1的卷积层、3 * 3的卷积层、……
  4. 将1 * 1的卷积层、3 * 3的卷积层重复四遍,……
  5. 将……重复两遍,再……
  6. 再通过两个3 * 3的卷积层,得到 7* 7,深度为1024的特征矩阵。
  7. Conn.Layer ①transpose不一定有,主要根据tensor通道排列顺序决定的。②展平处理。③通过节点个数为4096的全连接层连接。
    →得到一个4096的向量。
  8. Conn.Layer ①通过一个节点个数为1470(7x7x30)的全连接层②通过reshape处理,得到7 * 7,深度为30的特征矩阵。
    在这里插入图片描述
损失函数

在这里插入图片描述
三部分计算。使用误差平方和求解。
在这里插入图片描述
对宽和高开根号处理:
绿色:真实目标边界框。蓝色:预测得到的目标边界框。
假设对于大目标和小目标,预测边界框相对真实边界框都有偏移(假设一样)。
可以发现对小目标的预测结果很差,而对大目标的预测结果还行。(不同尺度IOU不一样)所以不能用真实宽度-预测宽度。

虽然是xy的偏移,但这种大小box不同的偏移差异却是wh带来的。

在这里插入图片描述
偏移相同的距离,小目标的差值要更大一些才行,这样会关注更多的小目标定位损失。
在这里插入图片描述

正样本置信度损失的回归值,论文里好像是IoU?

在这里插入图片描述

存在问题

对群体性的小目标检测很差。
因为在yolov1的思想中,对于每个cell,只预测两个bounding box,而且这两个bounding box属于同一类别。
主要错误原因来自于定位不准确。直接预测坐标信息,而不是像FasterRCNN或SSD那样,预测相对anchor的回归参数(但是从yolov2开始就改成这样预测相对anchor的回归参数了。)

yolo v2

在这里插入图片描述
在这里插入图片描述

七种尝试及其所带来的效果

在这里插入图片描述

Batch Normalization

Yolo v1没有使用BN层,而Yolo v2在每个卷积层后面都加上了BN层。
添加BN层后,对训练和收敛都有很大帮助,同时也减少了一系列的正则化处理。
对模型起到正则化作用。
可以移除掉dropout操作(减轻过拟合)。
在这里插入图片描述

High Resolution Classifier

采用更高分辨率的分类器。
Yolo v1 224x224的输入,Yolo v2 448x448。
在这里插入图片描述

Convolutional With Anchor Boxes

使用基于Anchor的目标边界框预测。
Yolo v1预测目标边界框:直接预测目标高度宽度以及中心坐标。定位效果差。
Yolo v2采用基于Anchor偏移的预测效果相比直接预测坐标,可以简化目标边界框预测问题,也可以使网络更加容易去学习和收敛。
使用后mAP有微小下降,但是召回率(预测正确的样本在总样本占的比例)大大提升(模型拥有更多提升空间)。
在这里插入图片描述

Dimension Clusters

anchor的聚类
使用Faster RCNN和SSD时作者没有明确给出为什么要采用作者给定的那些预设Anchor(Faster RCNN)或者defult box(SSD)。SSD中有给公式,但是用处不大。反正都没说怎么得到那个尺寸的,只说是根据工程经验确定的。
拿到新的网络该如何选择预设anchor或者default box?
Yolo v2采用k-means聚类方法获得anchor,称为prior。(Yolo v3中所有的priors也是通过聚类的方法获得的)

Direct location prediction

目标边界框预测(直接预测边界框中心坐标)
大部分不稳定因素在于预测边界框的中心坐标(x,y)。
论文中给出了Faster RCNN边界框预测公式:由于公式没有受到限制,所以基于anchor预测出的目标可能会出现在图片的任何一个地方。
yolo对图片划分了区域,而Faster RCNN中并没有。所以如果用Faster RCNN的预测方法会有很大问题。
在这里插入图片描述
在这里插入图片描述
yolov2对此改进:
如果将anchor设置在grid cell 的左上角,坐标(cx,cy)。预测的bounding box 的prior的宽度高度为pw、ph。
tx:关于anchor的偏移量,通过一个函数对它进行限制:
σ:logistic activation → sigmoid函数(将输入映射到0~1之间)。

如此一来,预测框的中心点只会出现在grid cell之间。
在这里插入图片描述
在这里插入图片描述
区域外的目标就不去管了。
由于限制了坐标信息,所以网络更容易进行学习,也更加稳定。
在这里插入图片描述

Fine-Grained Features

预测特征图结合一些更底层的信息。
**底层信息包含更多的图像细节,而这些细节就是在检测小目标时所需要的。**直接用高层的信息检测小目标的结果很差。
结合方式:通过passthrough layer来实现。
大佬太牛了:

passthrough layer如何将两个大小不同的特征图进行融合?举例:
对4x4的特征矩阵进行分割,分割成4个小方格(相同的位置用相同的颜色标注)。将同样颜色的数值放在同一个特征图中。
在这里插入图片描述
1个4x4的特征图 → 4个2x2的特征图,深度x4。

融合过程:
在这里插入图片描述
1*1卷积核可以用来缩减通道数减少参数量。

通过1x1的卷积层后,特征图的深度变为64。
26x26x512 → 26x26x64
通过passthrough layer:26x26x64 → 13(26➗2)x13x256(64x4)
将两个矩阵(13x13x256、13x13x1024)在深度方向进行拼接(在深度上相加) → 13x13x1280。
在这里插入图片描述

Multi-Scale Training

多尺度训练
在训练过程中,替换掉固定的输入尺寸(每个网络输入图像的尺寸都是固定的,要么是416x416,要么是480x480,要么是544
x544)
在这里插入图片描述
为了提升yolov2的鲁棒性,作者把图片缩放到不同的尺度来训练模型。
如何调整图像尺寸:每经过10个batch,就对输入尺寸进行随机选择。由于yolov2网络的缩放因子是32(32:
在这里插入图片描述
)所以采用的一系列的输入网络的尺寸都是32的整数倍。从这些中随机选取几个尺寸作为输入尺寸。

弹幕:yolov2网络是全卷积结构,输入大小不受限,不会改变网络结构

Backbone骨干网络 Darknet-19

Darknet-19:19个卷积层
表里224,实际输入时采用448x448作为高分辨率分类器进行训练。此处224x224是与之前别的网络进行对比。
在这里插入图片描述

top1:输出的所有类别准确率排序后第一名是正确的概率;
top5:输出的所有类别准确率排序后前五名包含正确类别的概率(5个有1个就算数);

top1指取最大概率模型预测判断正确才算正确,top5指概率前五只要有判断正确的就视为正确

框架

对于检测网络,移除了最后一个卷积层。保留了卷积核大小3x3,个数1024的卷积层(下图蓝色框上面那个)。
在这里插入图片描述
对应这个:
在这里插入图片描述
在后面添加3个3x3的卷积层,卷积核个数都为1024的卷积层。在后面接上一个1x1的卷积层,它输出的个数就是所需检测的目标参数。
在这里插入图片描述
对应VOC数据集,预测5个bounding box,每个bounding box会有5个参数(同yolov1中,偏移信息:xywh,+confidence(预测目标与真实目标的iou值))。由于采用的是VOC数据集,所以要预测20个类别对于每个bounding box而言的分数,所以最后一个卷积层采用125个卷积核

x 5(采用5个anchor)
5(5个参数)+20(每个anchor分别对应20个类别的概率分数)=25
5 x 25 = 125
在这里插入图片描述
在这里插入图片描述

之前是直接预测,这里是基于anchor的偏移预测

在这里插入图片描述
在这里插入图片描述

yolo v3

https://blog.csdn.net/qq_37541097/article/details/81214953?ops_request_misc=&request_id=117f5f0e641e4e41a7963ed4a8c1e0a7&biz_id=&utm_medium=distribute.pc_search_result.none-task-blog-2blogkoosearch~default-1-81214953-null-null.268v1control&utm_term=yolov3&spm=1018.2226.3001.4450
在这里插入图片描述
主要是整合了当前比较主流的网络的优点
在这里插入图片描述
在这里插入图片描述

backbone的修改

FPS 每秒钟推理多少张。
Top1:最大概率的就是预测目标
Top5:预测概率前5里面有正确的标签
在这里插入图片描述
框:残差结构。
为什么DarkNet-53比ResNet一些深层网络效果更好?
都是通过堆叠一系列残差结构来得到最终网络。但是DarkNet-53中没有最大池化层,所有的下采样几乎都是通过卷积层实现。
如:步距为2,通过之后所有的高和宽都缩减为原来的一半。
通过卷积层替换原来的最大池化下采样 → 检测效果提升。
在这里插入图片描述
在这里插入图片描述
yolov3在3个预测特征层上进行预测(使用3种尺度)
在这里插入图片描述
yolo中称预设的目标边界框:bounding box prior,与之前讲的anchor、SSD的default box性质都差不多。
N:预测特征层大小,13或者26或者52.
3:每个特征层上预测3个尺度
每种尺度上预测4+1+80个参数
80:COCO数据集80个类别
4:对于每个anchor而言,预测4个偏移参数
1:yolo中独有的confidence score

在这里插入图片描述
在这里插入图片描述

目标边界框的预测

采用与yolov2中一样的机制,与ssd与faster rcnn中的不一样。
ssd与faster rcnn中的:
网络预测的关于目标中心点的回归参数是相对于anchor而言的。
在yolov3中:关于目标中心点的回归参数是相对于当前cell左上角点的。
在这里插入图片描述
最后通过一个1 * 1的卷积层在最终的预测特征层上预测所有的相关信息。
yolov3:3个预测特征层,每个特征曾采用了3个不同的模板。
在这里插入图片描述
假设上面这个图是针对某一预测特征层而言,1 * 1的卷积层滑动到红框这个窗口时,针对每一个anchor模板都会预测4个回归参数(tx ty tw th)+1个objectness参数+对应每个类别的分数score。
虚线框:anchor。pw:anchor宽度。ph:anchor高度。
蓝框:网络预测的最终位置以及大小。
计算得到的bx和by范围都是在grid cell之间的(一个grid cell边长是1),σ函数将范围限制在0~1.
在这里插入图片描述

正负样本匹配

原文中,针对每一个ground truth,都会分配一个bounding box prior(正样本)。
→ 一个图片中有几个gt目标就有几个正样本。
分配原则:将与gt重合程度最大的bounding box prior作为正样本。
当bounding box与gt重合超过了某一个阈值,但是重合程度不是最大,则直接丢弃这个预测结果。
如果bounding box prior没有被分配给某个gt(该bounding box prior不是正样本),则没有定位损失,也没有类别损失,则只有confidence score(objectness)。

按照论文中写的这样去分配正样本,则发现正样本数量特别少。对照U版(ultralytics公司?)YOLOV3网络看一下源码发现:
在这里插入图片描述
如果左边这三个IOU都大于阈值,是否是把GT同时分配给三个anchor?
是的,则在当前grid cell中对应的三个anchor模板都被是做正样本。正因如此,才可以扩充正样本的数量。

损失的计算

yolov3论文中没有给出具体公式
在这里插入图片描述

  1. 置信度损失
    针对预测得到的confidence score
    针对每个bounding box所预测的objectness使用的是逻辑回归。一般使用的逻辑回归就是二值交叉熵损失(binary cross entropy),yolov3源码也是使用的这个。
    在这里插入图片描述
    原文中:oi取0或者1.

  2. 类别损失
    也是用的二值交叉熵损失
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    对于这个Binary Cross Entropy公式,每个人上网查到的可能都不一样。这里up主通过实践检验来检验公式是否正确。
    pytorch官方的:
    在这里插入图片描述
    自己定义的:
    在这里插入图片描述
    运行后结果:
    在这里插入图片描述
    注意:
    在这里插入图片描述

  3. 定位损失
    在这里插入图片描述
    gx gy gw gh将gt映射在grid网格中得到的
    gx hat:用gx减去对应grid cell左上角的x坐标cx后得到
    gwhat ghhat:gw gh是真实的宽度和高度,要反向计算它们所对应的回归参数:除以pw ph,两边取ln
    了解即可,后面的yolov3 spp和yolov4v5采用的定位损失都不是这种(是CIOU loss)。

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

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

相关文章

Django实现接口自动化平台(五)httprunner(4.x)介绍【持续更新中】

上一章: Django实现接口自动化平台(四)解决跨域问题【持续更新中】_做测试的喵酱的博客-CSDN博客 下一章: 一、httpruner介绍 1.1 背景: 之所以学习httpruner的用法,是要把httpruner嵌入我们的自动化平…

全网最全、最新MyBatis框架核心知识

MyBatis框架 1. 软件开发常用结构 MyBatis是操作数据库的,相当于是一个增强的JDBC 1.1 三层架构 三层架构包括: 界面层(User Interface layer)业务逻辑层(Business Logic Layer)数据访问层(Dat…

Window搭建IOS App自动化测试环境

平台搭建:tidevice(Windows逆向通信iOS工具)WebDriverAgent(iOS通信服务)facebook-wda(iOS测试框架) macOSXcode:在手机上安装WebDriverAgent的时候需要用到,必须要Xcod…

HDFS概述及其优缺点

什么是HDFS? HDFS的全称是hadoop distributed file system,即hadoop的分布式文件系统。 见名知意,它就是用来进行文件存储的。毕竟它是大数据的一个组件,用来存储这种海量的数据。 它是基于03年10月份,谷歌发表的GFS…

Hadoop 怎么委任和解除节点?

前言 本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢! 本专栏目录结构和参考文献请见大数据技术体系 正文 Hadoop 集群的管理员经常需要向集群中添加节点…

Android Studio引用第三方库的方式

title: 大小端详解 date: 2023-06-06 21:01:24 comments: true #是否可评论 toc: true #是否显示文章目录 categories: #分类 - gradle - android studio tags: #标签 - gradle - android studio summary: android stduio 导入第三方库方式 Android Studio引用第三方库的方式 …

NCUTer 我的创作纪念日(2023-06-06)

前言 大家好,我是NCUTer,今天收到私信,突然发现,我来到CSDN已经2年多了,距离发布第一篇博客已经2年整了。正式规划性的写博客,是在2021年6月底开始的,当时啥也不懂,不知道该怎么去做…

10万字XX市开发区智慧综治中心平台建设一期工程招标文件word

(一)智慧综治中心信息化平台 需基于“一个平台,多级用户”的原则,利用移动互联网、物联网、大数据、人工智能和地理信息等新一代信息技术,整合辖区多方社会治理数据,建立一个覆盖全区三级综治中心用户的统一…

2个原因解答:为什么网络安全缺口大,招聘却很少?

2023年我国网络空间安全人才数量缺口超过了140万,就业人数却只有10多万,缺口高达了93%。这里就有人会问了: 1、网络安全行业为什么这么缺人? 2、明明人才那么稀缺,为什么招聘时招安全的人员却没有那么多呢?…

【博客639】Life of a label in prometheus

prometheus中label的生命周期 前言 Prometheus labels allow you to model your application deployment in the manner best suited to your organisation. As directly supporting every potential configurations would be impossible, we offer relabelling to give you t…

Paxos算法

组成 Paxos算法有proposer, accepter, leaner三种角色节点,其中proposer有点像客户端,而accepter是存储节点。 持久化需要 basic-Paxos是二阶段进行的 第一阶段 propose发起prepare请求,带上rnd accpeter如果发现rnd,比如自己…

图论在数学建模中的应用及MATLAB实现

2023年9月数学建模国赛期间提供ABCDE题思路加Matlab代码,专栏链接(赛前一个月恢复源码199,欢迎大家订阅):http://t.csdn.cn/Um9Zd 目录 图论基本概念 图论原理 1. 最短路径问题 2. 最小生成树问题 MATLAB实现 1. 创建图 2. 最短路径算法 3. 最小生成树算法 数学建模案…

第一章 小程序入门

文章目录 前言一、❎ 环境搭建1、AppID2、设置外观和代理3、小程序项目构成小程序的基本结构小程序的页面组成部分 4、JSON 配置文件JSON 配置文件的作用app.json 配置文件project.config.json 配置文件sitemap.json 配置文件页面 .json 配置文件 5、WXML 模板什么是 wxmlwxml …

Java --- springboot3之web静态资源配置

目录 一、静态资源规则 二、欢迎页规则 三、favicon.ioc规则 四、HTTP缓存机制 五、自定义静态资源规则 5.1、配置方式 5.2、代码方式 一、静态资源规则 Override public void addResourceHandlers(ResourceHandlerRegistry registry) {if (!this.resourceProperties.is…

UA-ModelCompiler 的编译和使用

UA-ModelCompiler 是OPCFoundation的开源程序,它实现将NodeSet 的xml 文件编译成C# 的类,以便结合到UA Server 中。同时,它也能够将一种简便的模型xml 文档(ModelDesgin.xml) 转换成为NodeSet2.xml 。 最近的项目中要使用UA-ModelCompiler &…

【C++】C++ 右值 相关常见问题

【C】C 右值 相关常见问题 文章目录 【C】C 右值 相关常见问题1.介绍一下左值引用和右值引用1.1左值和左值引用1.2右值和右值引用 2.左值引用与右值引用比较3.左值引用的使用场景4. move语义5.完美转发 C 11 关于右值相关概念: 在 C 中,右值是指仅作为表…

【3DsMAX】从零开始建房(3)

目录 步骤 1. 统一材质 2. 制作椅子 3. 制作货物盒 步骤 1. 统一材质 选中所有的模型,按下M键打开材质编辑器 选择精简材质编辑器 选择64示例窗 可以随便选中一个材质球,然后将材质指定给选定对象 然后可以修改线框颜色为黑色 2. 制作椅子 激活…

【力扣周赛】第348场周赛

【力扣周赛】第348场周赛 2716. 最小化字符串长度题目描述解题思路 2717. 半有序排列题目描述解题思路 2718. 查询后矩阵的和题目描述解题思路 2719. 统计整数数目题目描述解题思路 2716. 最小化字符串长度 题目描述 描述:给你一个下标从 0 开始的字符串 s &#…

30个接口自动化测试面试题,看过的已经在上班了

1. 什么是接口自动化测试? 答:接口自动化测试是指使用自动化工具对接口进行测试,验证接口的正确性、稳定性和性能等方面的指标。2. 为什么要进行接口自动化测试? 答:接口自动化测试可以提高测试效率,减少人…

STM32 实现简单定时任务调度器,动态创建任务,两种思路实现跑马灯

代码实现和硬件没关系,所以并不限于STM32,Arduino 之类的其他地方也能用,只要有一个能获取时间的函数就行,或者说,只要有一个会随着时间自动增加的变量就行,时间单位无所谓,所以确实想的话&…