YOLOv1学习笔记

news2024/9/20 14:40:15

来源:投稿 作者:ΔU
编辑:学姐

论文笔记

《You Only Look Once:Unifified, Real-Time Object Detection》

Joseph Redmon∗ , Santosh Divvala∗†, Ross Girshick¶ , Ali Farhadi∗†

University of Washington∗ , Allen Institute for AI† , Facebook AI Research¶

http://pjreddie.com/yolo/

发表时间及期刊:2016 CVPR

YOLO的全称是you only look once,指只需要浏览一次就可以识别出图中的物体的类别和位置。

因为只需要看一次,YOLO被称为Region-free方法,相比于Region-based方法,YOLO不需要提前找到可能存在目标的Region。

也就是说,一个典型的Region-base方法的流程是这样的:先通过计算机图形学(或者深度学习)的方法,对图片进行分析,找出若干个可能存在物体的区域,将这些区域裁剪下来, 放入一个图片分类器中,由分类器分类。

因为YOLO这样的Region-free方法只需要一次扫描,也被称为单阶段(1-stage)模型。

Region-based方法方法也被称为两阶段(2-stage)方法。

对于YOLO v1而言,它在PascalVOC 2007测试数据集上达到的mAP是63.4%,在输入图像 大小为448×448像素的图像上处理速度能够达到每秒45帧,该网络的一个小版本FastYOLO 每秒处理速度也达到了惊人的155帧。

虽然YOLO v1的精度不及RCNN系列,但奈何其速度非常快,所以在工业界应用还是很普遍的。但YOLO的论文读起来非常的难懂,本来是想直接从YOLO v3开始讲解的,但是看到v3论文后,我发现很多的知识点论文中都没有讲到,所以就不得不去看v2,但是v2论文中又有一些知识点没有提到,所以我只能从v1开始给大家讲解了。

我主要通过四方面进行分析:论文思想、网络结构、损失函数及不足。

首先来看论文中给出的一个整体流程

图1:论文截图-YOLO检测系统

整体流程:

1.缩放图像

2.将图像通过卷积神经网络

3.利用非极大值抑制(NMS)进行筛选

论文思想

1)图像划分

将一幅图片划分成S×S个网格(gird cell),如果某个object的中心落在这个网格中,则这个网格就负责预测这个object。

1号图中显示图片被分为 7 × 7 = 49个grid cell。

2号图中显示每个grid cell生成2个bounding box(预测框),一共98个bounding box,框的 粗细代表置信度大小,框越粗代表框住的是一个完整物体的概率越大。

3号图中用不同颜色表示每个grid cell所预测的物体最可能属于分类,如蓝色的grid cell生成的 最可能bounding box最可能框住的是狗、黄色的grid cell最可能预测自行车…

4号图为最终输出的显示效果。

2) Bounding boxes 预测

1.先看 bounding boxes+confidence。在这一步中,YOLO为每一个网格给出了两个预测框,这里有点像faster rcnn的anchor,但不完全相同。YOLO给出的预测框,是基于网格中心点的,大小自定义。每一个网格预测B个bounding boxes,每个bounding boxes有四个坐标和一个置信度(confidence),所以最终的预测结果是S × S × (B∗5 + C)个向量。

2.再看第二个class probablity map,这一路的工作其实是和上一步是同时进行的,负责的是 网格(gird cell)类别的分数,预测的结果一样是放在 最后的7×7×30的张量中。

概括的讲就是:

训练过程:

首先将图像分成 S × S 网格(gird cell)、然后将图像送入网络,生成S×S× (B∗5+C)个结果,根据结果求Loss并反向传播梯度下降。

预测过程:

首先将图像分成 S × S网格(gird cell)、然后将图像送入网络,生成S×S× (B∗5+C)个结果,用NMS选出合适的预选框。

为了评估YOLO在PASCAL VOC数据集上的水平,我们使用S=7,B=2。PASCAL VOC有20个标签类,所以C=20。我们最终的预测是一个7×7×30张量。

每个边界框由5个预测组成:x、y、w、h和confidence。(x、y)坐标表示相对于网格单元格边界的方框的中心。并将其宽度和高度相对于整个图像进行了预测。

图5:论文截图-原文

这里要说的就是confidence!

confidence是YOLO系列论文独有的一个参数,那什么是confidence呢?看图5,你可以理解为confidence有两种情况,分别是 “0”和“1”,当我们的网格中确实存在目标时,那我们图5中的Pr(Object)就是等于 “1” 的,所以我们预测的confidence就直接等于IOU,如果网格中没有目标落在里面,那么Pr(Object)就是等于“0”的,所以confidence就是等于零的。

其实我们完全可以把confidence理解为IOU,但是这里的IOU是我们预测的bounding box与 真实的bounding box的交并比。YOLO v1中并没有像Faster RCNN或SSD的Anchor概念的,所以这里预测的x,y,w,h是直接预测我们bounding box的坐标信息的,并不是像我们在Faster RCNN或SSD当中预测的四个值都是相对Anchor的回归参数。

在测试时,也就是我们最终预测时,我们对于每个目标的最终概率是将conditional class probabilities 乘上 confidence 的,对于每个grid cell而言,它有C个类别,那我们就会预测C个类别分数,那么这里的类别分数就是对应的conditional class probabilities,也就Pr(Classi|Object)

注意 Pr(Classi|Object)这里的写法涉及到概率学中的条件概率,懂得自动跳过就好。

用白话解释“条件概率”就是:“指事件A在另外一个事件B已经发生条件下的发生概率。条件 概率表示为:P(A|B),读作“在B的条件下A的概率”。

在我们这篇论文里就可以这样理解:类别i在它为目标的前提下的概率。

那么通过图6我们知道,这两项相乘之后,最终给出的目标概率就是

通过这个表达式我们也能够知道,论文给出的这个表达式既包含了:它为某个目标的概率;也包含了我们预测的目标边界框与我们真实目标框的重合程度,这里与Faster RCNN和SSD中直接预测的目标概率是不一样的。

网络结构分析

图8:论文截图-网络结构,这里我给出了论文中省略掉的两层

整个网络结构看似很简单,实则确实很简单!(“s-2”,意思就是步长为“2”,没写的就是默 认步长为“1”)

整个检测网络有24个卷积层,后面跟了2个全连接层。交替的1×1个卷积层目的是减少前一层 的特征。整个网络输入的是448 × 448的图片,最终得到的是7×7×30的张量。

所以说得到的7×7×30的张量到底是个啥?请看下面两幅图,这个7×7好理解,一共划分成 7×7的网格,那么这30是什么呢?实际上这个30包含了两个预测框的参数和Pascal VOC的类 别参数:

每个预测框有5个参数:x,y,w,h,confidence;Pascal VOC里面还有20个类别;这样 的话30 =(2 × 5)+ 20,也就是说这一个30维的向量就是一个gird cell的信息,那总共是7 × 7个gird cell一共就是7 × 7 ×(2 × 5+ 20)= 7 × 7 × 30 tensor = 1470 outputs,正好对应论文。

到这里就很清晰了,从图中我们可以看到每个gird cell还可以生成20个类别的条件概率,此 图就展示了条件概率最高的那些类别所占有的框,也就是说,每个gird cell只能有一个类别,它会从这20个类别概率中选取概率最高的那一个,进而也说明了每个gird cell只能预测 一个物体,那么7×7=49个gird cell最多只能预测49个物体,这也是YOLO v1对小密集物体识别差的原因,后面会谈到这一点。

损失函数详解

在损失函数这里作者每一项都用的平方和误差,将目标检测问题当作回归问题。

下面来看一下损失函数中每个参数的含义:

这里面有个值得注意的地方,就是宽高定位误差那里,这里作者取了一个根号,实际上这样 做的目的就是使小框对误差更敏感一点。我觉得作者这样做的目的和RCNN边框回归中使用相对坐标差的想法是一样的,实际上就是尺度归一化。

YOLO v1不足

作者说YOLO v1对一些群体性的小目标检测效果很差,比如天空中成群结队的鸟儿,如果这 群鸟每个目标都很小,那么YOLO就很难对他们进行预测,因为在我们YOLO v1的思想中,每个cell只预测两个bounding box,而且两个bounding box预测的还是属于同一个类别的。因为我们对每个grid cell都只预测一组classes参数,所以针对每个grid cell预测的是同一个类别的目标,所以说当一些小目标聚集在一起时YOLO v1的检测效果就非常的差。

第二个问题就是当我们的目标出现新的尺寸或者配置的时候,YOLO v1的预测效果也是非常的差。

最后一个问题就是作者发现主要的误差都是由于定位不准。这个问题主要是由于作者选择直 接预测目标的坐标信息,而不是像Faster RCNN或SSD那样预测Anchor的回归参数,所以后 续YOLO v2开始,作者就采用了Faster RCNN或SSD那样基于Anchor的回归预测。

检测效果展示

关注下方《学姐带你玩AI》🚀🚀🚀

YOLO系列干货持续更新,回复“yolo”免费领取论文资料+代码数据

码字不易,欢迎大家点赞评论收藏!

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

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

相关文章

【JavaGuide面试总结】计算机网络·上

【JavaGuide面试总结】计算机网络上1.OSI 七层模型是什么?每一层的作用是什么?2.TCP/IP 四层模型是什么?每一层的作用是什么?应用层传输层网络层网络接口层3.应用层有哪些常见的协议?4.为什么网络要分层?5.…

数据分析方法与模型

文章目录1 数据分析1.1 占比分析1.2 趋势分析1.3 对比分析1.4 象限分析1.5 排名分析1.6 维度分析2 分析模型2.1 费米问题-大致估算2.2 七问分析法-思考角度的拓展2.3 互联网通用模型AARRR、八角分析法2.3.1 AARRR2.3.2 游戏化用户增长策略-八角模型本文来源,为接地气…

基于RMI技术的数据库操作中间件设计 综合实践报告

前言 1.1 实践目的和要求 为了将理论用于实践,巩固所学知识,提高自己发现问题并用所学知识分析问题和解决问题的能力,锻炼自己的工作能力,适应社会能力,自我管理能力,了解目前软件的应用情况,需求情况,发展方向及前景。 要求: 要求在实习过程中认真学习技术知…

[疑难杂症2023-002]不就是Move一个文件吗,怎么会有这么多坑呢?

本文由Markdown语法编辑器编辑完成. 1. 前言: 近期在项目中遇到一个需求. 背景是,在一个QT封装的C/S架构的软件中,一个报告的预览页面,是由QT封装了QWebWidget, 里面放着一个网页.这个网页通过调用一定的…

论文解读 TOOD: Task-aligned One-stage Object Detection

github: https://github.com/fcjian/TOOD paper: https://arxiv.org/pdf/2108.07755.pdf 关键点 思考起点 指出传统one-stage算法在在优化目标分类和定位问题中的不足(DecoupledHead分离了分类任务和回归任务[yolox表示解耦这是优点,yolo1-5都是使用y…

[oeasy]python0054_三引号_原样显示字符串_triple_quoted

三引号 回忆上次内容 \ 首先是转义字符 可以 和别的字符 构成转义序列 \a是 ␇ (bell),\b 退回一格\t 水平制表符\v、\f LineFeed\\ 输出 \\" 输出 "\ 输出 \xhh 通过 16 进制数值转义\nnn 通过 8 进制数值转义\ 还是 续行字符 放在 行尾可以让 下一行和本行 连成一…

Linux2

4.Linux的文件系统4.1.linux中所有的一切都是文件万事万物皆文件windows是盘符,linux是树windows是\(翘)linux是/4.2.查找文件方式:1. 绝对路径 有/2. 相对路径 4.3.挂载:执行挂载命令:mount 设备文件名 挂…

CentOS 安装 MinIO Server

1) 下载 MinIO 服务 wget https://dl.min.io/server/minio/release/linux-amd64/minio chmod x minio sudo mv minio /usr/local/bin/ 2) 创建systemd服务文件 sudo vim /etc/systemd/system/minio.service [Unit] DescriptionMinIO Documentationhttps:…

C语言文件操作(2) “流”的拓展介绍

tips 1. 打开一个文件 -> 内存里面就会创建一个对应关联的文件信息区 -> 文件信息区其实就是一个FILE类型的结构体 -> 各个结构体成员记录了该文件的种种信息 -> 结构体(文件信息区)由FILE* 结构体指针来维护 -> 有了指针,一切都好说了 2. 使用文…

文献阅读(45)——使用自监督学习对AMD分类

使用自监督学习对AMD分类 文章目录使用自监督学习对AMD分类一、简介二、先验知识三、文章核心内容四、使用方法1. 非参数化实例歧视(中文翻译过来总是奇奇怪怪,其实就是NPID)a 挑战b 解决方案c 转化!2. 数据集3. 数据预处理五、结…

Python之拉盖尔多项式

文章目录拉盖尔多项式简介微分与积分求根和反演采样和拟合拉盖尔多项式简介 拉盖尔多项式是拉盖尔方程的标准解,但其更著名的应用是薛定谔方程在解氢原子的时候,其径向函数最后要乘上一个Ln−l−12l1(2rnaμ)L^{2l1}_{n-l-1}(\frac{2r}{na_\mu})Ln−l−…

TCP/IP应用层常见协议总结

TCP/IP应用层常见协议总结1.HTTP:超文本传输协议2.SMTP:简单邮件传输(发送)协议3.POP3/IMAP:邮件接收的协议4.FTP:文件传输协议5.Telnet:远程登陆协议6.SSH:安全的网络传输协议1.HTTP:超文本传输协议 超文本传输协议 主要是为 Web 浏览器与 Web 服务器之间的通信而设计的。当我…

浏览器的通信能力

用户代理 浏览器可以代替用户完成http请求,代替用户解析响应结果,所以我们称之为:用户代理 user agent 在网络层面,对于前端开发者,必须要知道浏览器拥有的两大核心能力 自动发出请求的能力自动解析响应的能力 自动…

『51单片机』串口通信配置

🚩write in front🚩 🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021年度博客之星物联网与嵌入式开发TOP5&#xff5…

技术分享 | 黑盒测试方法论—因果图

因果图法是一种利用图解法分析输入与输出的各种组合情况,从而设计测试用例的方法,它适合于检查程序输入条件的各种组合情况。 因果图法比较适合输入条件比较多的情况,可以测试所有的输入条件的排列组合。因果图的 “ 因 ” 就是输入条件&…

Flutter滚动悬浮效果

有以下几种效果 1、tabBar透明度随偏移0-1渐变过度 2、app上下滚动触发tabBar同步滚动 3、tabBar切换触发app上下同步滚动 1、计算每个区块的高度 用keyList保存声明的key&#xff0c;用heightList保存每个key对应的组件高度 // key列表 List<GlobalKey> keyList [Gl…

lower_bound与upper_bound的应用

<1>lower_bound (1). . 上述代码返回在升序排序的序列a中第一个大于等于 t 的元素的地址. 示例: (2) 上述代码返回在升序排序的序列a中第一个大于等于 t 的元素的下标. 示例: 例题: P2249 【深基13.例1】查找 P2249 【深基13.例1】查找 - 洛谷 | 计算机科学教育新生…

JavaSE(多态、abstract、接口)

1.多态 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同 的状态。 向上转型 向上转型&#xff1a;实际就是创建一个子类对象&#xff0c;将其当成父类对象来使用。 语法格式&…

(牛客)小杜跑酷

链接&#xff1a;https://ac.nowcoder.com/acm/contest/49244/F?&headNavacm 来源&#xff1a;牛客网 题目描述 小杜又在玩游戏了&#xff01;这回他玩的是跑酷游戏&#xff01; 已知该跑酷地图长为n&#xff0c;有3层&#xff0c;可以理解为一张3n的地图。令人新奇的是&…

Shiro学习看这一篇文章就够了

第一章 Shiro简介 第1节 shiro介绍 1官网地址: http://shiro.apache.org/Apache Shiro 是一个功能强大,易于使用的Java安全框架,他执行认证、授权、加密、会话管理等功能,使用Shiro易于理解的API,使你能够轻松的保护任何应用,如移动端应用,大型web应用以及企业级应用. Shiro可…