热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

yolo迭代次数_你一定从未看过如此通俗易懂的YOLO系列(从v1到v5)模型解读(中)

来自|知乎作者|科技猛兽链接|https:zhuanlan.zhihu.comp183781646编辑|深度学习这件小事公众号本文仅作学术交流,如有侵权,

415224352cde55f9964e8cd8d49058df.gif

来自 | 知乎  作者 | 科技猛兽链接 | https://zhuanlan.zhihu.com/p/183781646编辑 | 深度学习这件小事公众号本文仅作学术交流,如有侵权,请联系后台删除。上篇文章我们介绍了YOLO v1的设计和演变过程(你一定从未看过如此通俗易懂的YOLO系列(从v1到v5)模型解读 (上)),从本文开始我们继续介绍YOLO series接下来的工作,但是因为YOLO下面的工作内容太多,所以本文只介绍YOLO v2 v3 v4 v5对于检测头head和损失函数loss的优化,剩下的backbone方面的优化留到下一篇文章吧。

为了使本文尽量生动有趣,我仍然用葫芦娃作为例子展示YOLO的过程(真的是尽力了。。。)。

beb1fd106a54032a2ee0d7ef0b6a686b.png
葫芦娃

下面进入正题,首先回顾下YOLO v1的模型结构,忘记了的同学请看上面的文章并点赞,如下面2图所示:

8a02f7aa82caf466c5e0c6893e7da164.png
YOLO
60997efadf9e89ab99e706a6016fa908.png
YOLO

我们认为,检测模型=特征提取器+检测头

在YOLO v1的模型中检测头就是最后的2个全连接层(Linear in PyTorch),它们是参数量最大的2个层,也是最值得改进的2个层。后面的YOLO模型都对这里进行改进:

YOLO v1一共预测49个目标,一共98个框。

   5 YOLO v2

  • 检测头的改进:

YOLO v1虽然快,但是预测的框不准确,很多目标找不到:

  • 预测的框不准确:准确度不足。

  • 很多目标找不到:recall不足。

我们一个问题一个问题解决,首先第1个:

  • 问题1:预测的框不准确:

当时别人是怎么做的?

同时代的检测器有R-CNN,人家预测的是偏移量。

什么是偏移量?

c351095fb1b16d3cc525e4b188e26387.png
YOLO v2

之前YOLO v1直接预测x,y,w,h,范围比较大,现在我们想预测一个稍微小一点的值,来增加准确度。

不得不先介绍2个新概念:基于grid的偏移量和基于anchor的偏移量。什么意思呢?

基于anchor的偏移量的意思是,anchor的位置是固定的,偏移量=目标位置-anchor的位置。

基于grid的偏移量的意思是,grid的位置是固定的,偏移量=目标位置-grid的位置。

Anchor是什么玩意?

Anchor是R-CNN系列的一个概念,你可以把它理解为一个预先定义好的框,它的位置,宽高都是已知的,是一个参照物,供我们预测时参考。

上面的图就是YOLO v2给出的改进,你可能现在看得一脸懵逼,我先解释下各个字母的含义:

c8455bb49782dabb939038fec21225d3.png

通过这样的定义我们从直接预测位置改为预测一个偏移量,基于Anchor框的宽和高和grid的先验位置的偏移量,得到最终目标的位置,这种方法也叫作location prediction。

这里还涉及到一个尺寸问题:

刚才说到 92999b5056e5db25cf4ced00c941317c.png

图1:原始值

如图1所示,假设此图分为9个grid,GT如红色的框所示,Anchor如紫色的框所示。图中的数字为image的真实信息。

我们首先会对这些值归一化,结果如下图2所示:

5fa75baf90bead2e86e14857ee0c942c.png
图2:要预测的值

归一化之后你会发现,要预测的值就变为了:

5cefa82f348bf29795e720fbe9dcfe26.png

methods to get the 5 anchor

方法:对于任意一个数据集,就比如说COCO吧(紫色的anchor),先对训练集的GT bounding box进行聚类,聚成几类呢?作者进行了实验之后发现5类的recall vs. complexity比较好,现在聚成了5类,当然9类的mAP最好,预测的最全面,但是在复杂度上升很多的同时对模型的准确度提升不大,所以采用了一个比较折中的办法选取了5个聚类簇,即使用5个先验框。

所以到现在为止,有了anchor再结合刚才的 cc03dbe8d723eca4b95533d13719386e.png

YOLO v2损失函数
这里的W=13,H=13,A=5。
每个 f2d2ea354c32e7e8337421d1efa125d4.png

YOLO v1和v2的比较


   6 YOLO v3

  • 检测头的改进:

之前在说小目标检测仍然是YOLO v2的痛,YOLO v3是如何改进的呢?如下图所示。

90889f4cccac0cdf99078812a7a709b2.png
YOLO v3

我们知道,YOLO v2的检测头已经由YOLO v1的 48554e92d4573d45dac2d44456099868.png

YOLO v3

检测头是DBL,定义在图上,没有了FC。

还有一种画法,更加直观一点:

9de230a2388a8f77c0ff3b82c170058e.png

f740e831c835914aec06aacab197f3e9.png

YOLO v3 head

anchor和YOLO v2一样,依然是从数据集中统计得到的。

  • 损失函数为:

65db13ad85e015a42b75d75e5744e3a9.png
YOLO v3损失函数
第4行说明:loss分3部分组成:
第1行代表geo_loss,S代表13,26,52,就是grid是几乘几的。B=5。
第2行代表class_loss,和YOLO v2的区别是改成了交叉熵。
第3行代表confidence_loss,和YOLO v2一模一样。

最后我们做个比较:

7c828c12a8278601fd6ae7207b22bf56.png
YOLO v1 v2和v3的比较

   7 疫情都挡不住的YOLO v4

第一次看到YOLO v4公众号发文是在疫情期间,那时候还来不了学校。不得不说疫情也挡不住作者科研的动力。。。

  • 检测头的改进:

YOLO v4的作者换成了Alexey Bochkovskiy大神,检测头总的来说还是多尺度的,3个尺度,分别负责大中小目标。只不过多了一些细节的改进:

1.Using multi-anchors for single ground truth

之前的YOLO v3是1个anchor负责一个GT,YOLO v4中用多个anchor去负责一个GT。方法是:对于 1747f094904c2273845dff27664b942b.png图3:YOLO v2,YOLO v3要预测的值

这里其实还隐藏着一个问题:

模型预测的结果是: f57d65988159df04492610ea91c82a5b.png图4:IoU Loss不能反映两者的距离大小

  • 所以接下来的改进是:

9813cccb841199df25c6971ba672c7f8.png图4:GIoU Loss

GIoU Loss可以解决上面IoU Loss对距离不敏感的问题。但是GIoU Loss存在训练过程中发散等问题。

  • 接下来的改进是:

e64353c5532753e8a3ab72c6e4130ead.png

图5:DIoU Loss

DIoU loss可以直接最小化两个目标框的距离,因此比GIoU loss收敛快得多。

但是DIoU loss依然存在包含的问题,即:

e1b7123b3186187af43b209e56b1b8d5.png

这2种情况c53464b62fc9191f8e0e94e72ac4c852.png

anchor是怎么用的

有了anchor的 1a31f77f548e64b74b4f38e00cc99c8d.png

本文只介绍了YOLO v2 v3 v4 v5对于检测头head和损失函数loss的优化,剩下的backbone方面的优化实在是写不动了,放到下一篇吧。

为您推荐你一定从未看过如此通俗易懂的YOLO系列解读 (上)这21张深度学习速查表让你代码能力突飞猛进22课时、19大主题,CS 231n进阶版课程视频上线数据分析入门常用的23个牛逼Pandas代码如何在科研论文中画出漂亮的插图?80a614dc3c16561b041e320aba1a2a7b.gif534290d1e39a584eee572836de6d8bb7.png



推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文介绍了在Python张量流中使用make_merged_spec()方法合并设备规格对象的方法和语法,以及参数和返回值的说明,并提供了一个示例代码。 ... [详细]
  • 本文介绍了Python语言程序设计中文件和数据格式化的操作,包括使用np.savetext保存文本文件,对文本文件和二进制文件进行统一的操作步骤,以及使用Numpy模块进行数据可视化编程的指南。同时还提供了一些关于Python的测试题。 ... [详细]
  • 【论文】ICLR 2020 九篇满分论文!!!
    点击上方,选择星标或置顶,每天给你送干货!阅读大概需要11分钟跟随小博主,每天进步一丢丢来自:深度学习技术前沿 ... [详细]
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
  • 前端开发工程师必读书籍有哪些值得推荐?我们直接进入代码复杂版式设置,如下所示,先写些标签,源码在这个链接里面:https://codepen.io/Shadid ... [详细]
  • 3年半巨亏242亿!商汤高估了深度学习,下错了棋?
    转自:新智元三年半研发开支近70亿,累计亏损242亿。AI这门生意好像越来越不好做了。近日,商汤科技已向港交所递交IPO申请。招股书显示& ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • S3D算法详解
    S3D论文详解论文地址:RethinkingSpatiotemporalFeatureLearning:Speed-AccuracyTrade-offsinVide ... [详细]
author-avatar
你的美我chase
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有