开山之作 | YOLOv1算法超详细解析(包括诞生背景+论文解析+技术原理等)

前言:Hello大家好,我是小哥谈。目标检测是计算机视觉领域的一项重要研究方向,它在许多应用领域中都得到了广泛应用,如人脸识别、物体识别、自动驾驶、视频监控等。在过去,目标检测方法主要采用基于RCNN、Fast R-CNN等深度学习算法,这些方法虽然精度较高,但需要耗费很长时间进行计算,因此无法实现实时处理。而在2015年,Joseph Redmon等人设计了一种新的深度学习算法YOLO,这种算法具有处理速度快、准确性高的特点,被广泛应用于目标检测领域。本节课就给大家重点介绍下YOLO系列算法的开山之作—YOLOv1,希望大家学习之后能够有所收获!🌈 

      目录

🚀1.什么是目标检测?

🚀2.YOLOv1算法的诞生背景

🚀3.YOLOv1论文

🚀4.YOLOv1技术原理

💥💥4.1 网络结构

💥💥4.2 实现方法

💥💥4.3 训练策略

 🚀5.YOLOv1性能评价

🚀1.什么是目标检测?

目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。

如今,目标检测的研究方法主要包括两大类:

  1. 基于传统图像处理和机器学习算法的目标检测与识别方法
  2. 基于深度学习的目标检测与识别方法

针对这两种目标检测方法,下面进行详细介绍。

🍀(1)基于传统图像处理和机器学习算法的目标检测与识别方法

传统的目标检测与识别方法主要可以表示为:目标特征提取 -> 目标识别 -> 目标定位。这里所用到的特征都是人为设计的,主要包括:

  • SIFT (尺度不变特征变换匹配算法,Scale Invariant Feature Transform);
  • HOG(方向梯度直方图特征,Histogram of Oriented Gradient);
  • SURF( 加速稳健特征,Speeded Up Robust Features)。

通过这些特征对目标进行识别,然后再结合相应的策略对目标进行定位。

🍀(2)基于深度学习的目标检测与识别方法

如今,基于深度学习的目标检测与识别方法已经成为主流方法,主要可以表示为:图像的深度特征提取 -> 基于深度神经网络的目标识别与定位,其中主要用到的深度神经网络模型是卷积神经网络CNN。目前可以将现有的基于深度学习的目标检测与识别算法大致分为以下三大类:

  • 基于区域建议的目标检测与识别算法,如R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN等;
  • 基于回归的目标检测与识别算法,如YOLO、SSD;
  • 基于搜索的目标检测与识别算法,如基于视觉注意的AttentionNet,基于强化学习的算法等。

🚀2.YOLOv1算法的诞生背景

YOLOv1算法是在2016年发表的,由Joseph Redmon等人开发,其全称为You Only Look Once version 1。它的特点是将目标检测问题转化为一个回归问题,通过一个神经网络直接预测出目标的类别和位置信息。相比于传统的目标检测算法,YOLOv1具有速度快、精度高等优点。 YOLOv1算法的诞生背景是由于传统的目标检测算法在实时性和准确性上存在矛盾。传统的目标检测算法需要在图像中进行多次滑动窗口操作,计算量大,导致实时性较差。而YOLOv1算法采用了全卷积神经网络,将目标检测任务转化为一个回归问题,大大减少了计算量,提高了实时性。此外,YOLOv1算法还采用了多尺度训练多尺度预测等技术,进一步提高了检测准确率。

❓❓YOLOv1算法相比于传统目标检测算法有哪些优势和劣势?

YOLOv1相比于传统目标检测算法的优势主要有两点:

  1. YOLOv1的检测速度非常快,可以达到实时检测的要求,这是因为YOLOv1采用了单个神经网络同时预测多个物体的位置和类别,避免了传统算法中的候选区域生成和特征提取等耗时的步骤。
  2. YOLOv1的检测精度相对较高,尤其是在小目标检测方面表现优异,这是因为YOLOv1采用了整张图像的全局信息进行物体检测,避免了传统算法中因为局部信息不足而导致的漏检和误检。

但是,YOLOv1也存在一些劣势:

  1. YOLOv1对于小目标的检测效果不如传统算法,这是因为YOLOv1采用了较大的输入图像尺寸和较粗的特征图,导致小目标的特征难以被有效提取。
  2. YOLOv1在物体定位方面存在一定的误差,这是因为YOLOv1采用了较粗的特征图进行物体位置预测,导致物体位置的精度不高。

🚀3.YOLOv1论文

YOLOv1算法论文的题目是《 You Only Look Once: Unified, Real-Time Object Detection》,由 Joseph Redmon、Santosh Divvala、Ross Girshick和 Ali Farhadi 四位作者于2016年提出。该论文提出了一种基于单个神经网络的实时目标检测算法,可以在一张图片中同时检测出多个不同类别的物体,并且速度非常快。该算法的核心思想是将目标检测问题转化为一个回归问题,通过一个神经网络直接输出物体的类别、位置和大小等信息。

说明:♨️♨️♨️

论文题目:《You Only Look Once: Unified, Real-Time Object Detection》

论文地址:  https://arxiv.org/abs/1506.02640

说明:♨️♨️♨️

关于YOLOv1论文的详细解析,请参考文章:

开山之作 | YOLOv1论文介绍及翻译(纯中文版)


🚀4.YOLOv1技术原理

💥💥4.1 网络结构

YOLOv1网络借鉴了GoogLeNet分类网络结构,不同的是YOLOv1使用1x1卷积层3x3卷积层替代inception module。如下图所示,整个检测网络包括24个卷积层和2个全连接层。其中,卷积层用来提取图像特征,全连接层用来预测图像位置和类别概率值。👇

现在看来,YOLOv1的网路结构非常明晰,是一种传统的one-stage的卷积神经网络:

  • 网络输入:448×448×3的彩色图片。
  • 中间层:由若干卷积层和最大池化层组成,用于提取图片的抽象特征。
  • 全连接层:由两个全连接层组成,用来预测目标的位置和类别概率值。
  • 网络输出:7×7×30的预测结果。

💥💥4.2 实现方法

YOLOv1采用的是“分而治之”的策略,将一张图片平均分成7×7个网格,每个网格分别负责预测中心点落在该网格内的目标。回忆一下,在Faster R-CNN中,是通过一个RPN来获得目标的感兴趣区域,这种方法精度高,但是需要额外再训练一个RPN网络,这无疑增加了训练的负担。在YOLOv1中,通过划分得到了7×7个网格,这49个网格就相当于是目标的感兴趣区域。通过这种方式,我们就不需要再额外设计一个RPN网络,这正是YOLOv1作为单阶段网络的简单快捷之处!🔖

具体实现过程如下:👇

  • 将一幅图像分成 S×S个网格(grid cell),如果某个 object 的中心落在这个网格中,则这个网格就负责预测这个object。
  • 每个网格要预测 B 个bounding box,每个 bounding box 要预测 (x, y, w, h) 和 confidence 共5个值。
  • 每个网格还要预测一个类别信息,记为 C 个类。
  • 总的来说,S×S 个网格,每个网格要预测 B个bounding box ,还要预测 C 个类。网络输出就是一个 S × S × (5×B+C) 的张量。在实际过程中,YOLOv1把一张图片划分为了7×7个网格,并且每个网格预测2个Box(Box1和Box2),20个类别。所以实际上,S=7,B=2,C=20。那么网络输出的shape也就是:7×7×30。

说明:♨️♨️♨️

1. 由于输出层为全连接层,因此在检测时,YOLOv1训练模型只支持与训练图像相同的输入分辨率(可以通过reshape的方法把你的照片压缩或扩张成YOLO要求的尺寸)。

2. 虽然每个格子可以预测B个bounding box,但是最终只选择只选择IoU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。

💥💥4.3 训练策略

YOLOv1的训练策略主要包括以下几个方面:👇

  1. 数据集准备:YOLOv1使用PASCAL VOC数据集进行训练,数据集中包含20个类别的物体,每个物体都有对应的边界框和标签信息。

  2. 模型设计:YOLOv1采用单个卷积神经网络同时预测物体类别和边界框信息,输出一个S*S(B*5+C)的张量,其中S表示特征图的大小,B表示每个格子预测的边界框数量,C表示物体类别数。

  3. 损失函数:YOLOv1使用均方误差作为损失函数,同时考虑物体类别预测误差和边界框预测误差。

  4. 训练过程:YOLOv1采用随机梯度下降算法进行训练,每次随机选择一张图片进行训练,采用多尺度训练和数据增强技术提高模型的泛化能力。


 🚀5.YOLOv1性能评价

YOLOv1是一种基于单阶段检测器的目标检测算法,其主要特点是速度快,但精度相对较低。下面是YOLOv1的性能评价:

  1. 精度:在PASCAL VOC 2012数据集上,YOLOv1的mAP为63.4%,相比于当时的其他目标检测算法,如Faster R-CNN和SSD,精度较低。
  2. 速度:YOLOv1的速度非常快,可以达到45帧/秒的实时检测速度。
  3. 目标类别数:YOLOv1最多支持20个目标类别的检测。

综上所述,YOLOv1适用于对实时性要求较高,但对精度要求相对较低的场景,如视频监控等。


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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

试过GPT-4V后,微软写了个166页的测评报告,业内人士:高级用户必读

一周之前,ChatGPT迎来重大更新,不管是 GPT-4 还是 GPT-3.5 模型,都可以基于图像进行分析和对话。与之对应的,多模态版GPT-4V模型相关文档也一并放出。当时 OpenAI 放出的文档只有18页,很多内容都无从得知,对…

【Redis】Redis性能优化:理解与使用Redis Pipeline

原创不易,注重版权。转载请注明原作者和原文链接 文章目录 Pipeline介绍原生批命令(MSET, MGET) VS PipelinePipeline的优缺点一些疑问Pipeline代码实现 当我们谈论Redis数据处理和存储的优化方法时,「 Redis Pipeline」无疑是一个不能忽视的重要技术。…

Kelper.js 笔记 python交互

1 加载Kepler 地图 KeplerGl() 1.1 主要参数 height 可选 默认值:400 地图显示的高度 data 数据集 字典,键是数据集的名称 config地图配置字典 1.2 举例 from keplergl import KeplerGlmap_KeplerGl() map_ 默认的位置 1.3 添加自己的图 1.3.1 读…

玩转Linux Shell Terminal Tmux

一、Shell编程☘️ 1. Shell指令快捷操作 1. echo # 系统指令 $ echo $(pwd) # 对于系统自带的pwd,此处不能写echo $pwd# 自定义变量 $ foo$(pwd) $ echo $foo # 不同于pwd,对于自定义的foo,不能用$(foo)2. !! # 假设你先执行了以下原本…

再一次整理一下spring框架步骤

1.pom.xml依赖 2.applicationbean.xml 3.类 小树叶可以跟bean联动起来 不写接口直接写类 实现类 4.测试 两种方法的实现

python结合excel数据轻松实现接口自动化测试

在刚刚进入测试行业的时候,最开始也是做功能测试,我想很多伙伴和我一样,觉得自动化测试都很高端,很神秘。迫不及待的想去学习作自动化测试。 以前比较常用数据库python做自动化,后面发现excel个人觉得更加适合&#x…

麒麟操作系统提示“默认密钥环已上锁”的解决办法

在国产麒麟操作系统上,有的时候不知道为啥,打开vscode或者其他应用软件时,总是提示“密钥环已上锁”,该怎么处理呢? 需要点击“开始”,在搜索框中输入“password” 点击打开“密码和密钥”,看到如下图。 然后点击左上角的箭头,回退,打开如下图:

java中对象的比较

文章目录 一、 PriorityQueue中插入对象二、元素的比较2.1 基本类型的比较2.2 引用类型比较 三、对象的比较3.1 覆写基类的equals3.2 基于Comparble接口类的比较3.3 基于比较器比较3.4 三种方式对比 四、 集合框架中PriorityQueue的比较方式五、使用PriorityQueue创建大小堆&am…

更新 | 持续开源迅为RK3568驱动指南第十二篇-GPIO子系统

《iTOP-RK3568开发板驱动开发指南》更新,本次更新内容对应的是驱动(第十二期_GPIO子系统-全新升级)视频,后续资料会不断更新,不断完善,帮助用户快速入门,大大提升研发速度。 文档教程更新至第十…

【C++初阶(一)】学习前言 命名空间与IO流

本专栏内容为:C学习专栏,分为初阶和进阶两部分。 通过本专栏的深入学习,你可以了解并掌握C。 💓博主csdn个人主页:小小unicorn ⏩专栏分类:C 🚚代码仓库:小小unicorn的代码仓库&…

pyqt 划线标注工具,可用于车道线标注

目录 效果图: pyqt代码: opencv划线: 效果图: pyqt代码: import osfrom PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QPushButton, QLabel from PyQt5.QtGui import QPainter, QPen, QColor, QImage, QPixmap from PyQt5.QtCore import Qt, QPoint i…

使用Python进行食品配送时间预测

一般的食品配送服务需要显示交付订单所需的准确时间,以保持与客户的透明度。这些公司使用机器学习算法来预测食品配送时间,基于配送合作伙伴过去在相同距离上花费的时间。 食品配送时间预测 为了实时预测食物的交付时间,我们需要计算食物准…

【MySQL】数据库排查慢查询、死锁进程排查、预防以及解决方法

MySQL数据库排查慢查询、死锁进程及解决方法 一、排查慢查询 1.1检查慢查询日志是否开启 1.1.1使用命令检查是否开启慢查询日志: SHOW VARIABLES LIKE slow_query_log;如果是 Value 为 off 则并未开启 1.1.2开启并且查看慢查询日志: MySQL提供了慢查询日志功能,可以记录所…

北邮22级信通院数电:Verilog-FPGA(5)第四第五周实验 密码保险箱的设计

北邮22信通一枚~ 跟随课程进度更新北邮信通院数字系统设计的笔记、代码和文章 持续关注作者 迎接数电实验学习~ 获取更多文章,请访问专栏: 北邮22级信通院数电实验_青山如墨雨如画的博客-CSDN博客 目录 一.密码箱的功能和安全性 显示:…

通过动态IP解决网络数据采集问题

前言 网络数据采集是目前互联网上非常重要且广泛应用的技术之一,它可以帮助我们获取互联网上各种类型的数据,并将其转化为可用的信息。然而,一些网站为了保护其数据被滥用,采取了一系列的限制措施,其中包括对访问者的…

远控项目02:项目的创建以及git的配置

💂 个人主页:pp不会算法v 🤟 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 c/MFC远程控制项目系列文章 1、在github创建仓库 2、在本地创建一个空文…

C#(Csharp)我的基础教程(二)(我的菜鸟教程笔记)-属性和字段的探究与学习

目录 1、字段字段特点:2、属性属性的特点 1、字段 字段是定义在方法外面的变量,是成员变量,主要是为了类的内部数据交换使用,字段一般是用private修饰,也可以用readonly修饰,表示只读字段,其它…

袖口收缩包装机包装效果如何调整

袖口收缩包装机是一种使用非常广泛的包装设备,老百姓最常见的啤酒瓶和可乐瓶的包装就是袖口包装,我们看到的成品效果都是非常好的,那是因为厂商在出厂时已经对设备进行了非常好的调试,那么对于初次使用或者已经使用了,…

C++ (Chapter 1)

C (一) 1.C的命名空间 先来看一个C语言的例子: 下面这段代码是可以正常运行的. #include<stdio.h> int rand 0; int main() {printf("%d \n", rand);return 0; }但是,包含了一个头文件之后,甚至无法通过编译. #include<stdio.h> #include<stdli…

CSS 之 table 表格布局

一、简介 ​ 除了使用HTML的<table>元素外&#xff0c;我们还可以通过display: table/inline-table; 设置元素内部的布局类型为表格布局。并结合table-cell、table-row等相关CSS属性值可以实现HTML中<table>系列元素的效果&#xff0c;具有表头、表尾、行、单元格…