目标检测算法 - YOLOv1
文章目录
- 1. 作者简介
- 2. 目标检测综述
- 3. YOLOv1算法
- 3.1 预测阶段
- 3.2 预测阶段后处理
- 3.3 训练阶段
YOLO的全称是you only look once,指只需要浏览一次就可以识别出图中的物体的类别和位置。
YOLO是目标检测模型。目标检测是计算机视觉中比较简单的任务,用来在一张图篇中找到某些 特定的物体,目标检测不仅要求我们识别这些物体的种类,同时要求我们标出这些物体的位置。
YOLO能实现图像或视频中物体的快速识别,在相同的识别类别范围和识别准确率条件下,YOLO识别速度最快。YOLO有多种模型,其中最新的为V5,V5的特点是速度更快,识别准确率更高,权重文件更小,可以搭载在配置更低的移动设备上。
1. 作者简介
作者:Joseph Redmon,华盛顿大学博士,YOLO目标检测算法主要作者,YOLO是Joseph Redmon和Ali Farhadi等人于2015年提出的第一个基于单个神经网络的目标检测系统。
作者个人网站:https://pjreddie.com/
2. 目标检测综述
YOLO就是解决目标检测问题的计算机视觉算法。
计算机视觉能够解决很多问题:分类、检测、分割、关键点检测。
图像分割分为两种:语义分割(Semantic Segmentation)、示例分割(Instance Segmentation)
目标检测,综述文章推荐:
目标检测领域著名数据集:PASCAL-VOC
、ILSVRC
、MS-COCO
、OID
。
yolo是在pascal voc
和ms-coco
数据集上进行评测的。
目标检测发展历程:
目标检测主要分为两个流派:one-stage detector和two-stage detector。
yolo属于one-stage detector。
two-stage(两阶段模型):先从图像中提取若干候选框,再逐一对这些候选框进行分类、甄别和调整坐标,最后得出结果。
one-stage(单阶段模型):不仅提取候选框,而且直接将全图输入到模型中,算法直接输出最终结果。是一个统一的端到端的系统。
one-stage代表模型:YOLO,SSD,Retina-Net。
two-stage代表模型:RCNN,SPPNet,Fast RCNN,Faster RCNN。
两阶段模型比较准确,但是比较耗时。而单阶段模型虽然较快,但是准确率不是太高,尤其是对于小目标,密集目标识别不太好。单目前yolo在识别率和速度上都已经非常好了。
3. YOLOv1算法
理解yolov1算法的关键在于,分开理解训练阶段和预测阶段。
3.1 预测阶段
预测阶段(测试阶段)就是,在模型已经训练成功后,输入未知图片,来对未知图片进行预测。此时不再需要反向传播,而是只需要前向推断。
这个模型训练出来之后是一个深度卷积神经网络。
YOLOv1网络结构:
输入为 448 × 448 × 3 448\times 448\times 3 448×448×3,输出为 7 × 7 × 30 7\times 7\times 30 7×7×30。
首先网络将图像划分为了 S × S S\times S S×S个网格(在YOLOv1中 S = 7 S=7 S=7),所以为 7 × 7 7\times 7 7×7个网格,即49个。
每个网格可以预测出 b b b个预测框(在YOLOv1中 b = 2 b=2 b=2),即每个网格生成2个预测框,即共98个预测框。预测框可能很大,也可能很小。每个预测框包含(x,y,w,h,c)四个定位坐标和置信度c,即中心点的坐标和框的宽高,以及包含它是不是一个目标的置信度c。在上图中,使用框的粗细来表示置信度,粗的就表示置信度较高。
每个网格还能生成所有类别的条件概率。假设在它已经包含物体的情况下,它是某一个物体的概率,即生成了下面彩色的图。
把每一个预测框的置信度乘以类别的条件概率,就可以获得每一个预测框各类别的概率。
结合预测框的信息和网格类别信息,就可以获得最后的预测结果。这些信息都是从 7 × 7 × 30 7\times 7\times 30 7×7×30的张量中获取的。
那么为什么输出是 7 × 7 × 30 7\times 7\times 30 7×7×30呢?
包含两个预测框,每个预测框有5个参数(x,y,w,h,c)。两个框便是10个参数。在pascal voc
中包含20个类别,那么5+5+20,那么就是30,这个30维的向量就是一个网格的信息,共有 7 × 7 7\times 7 7×7个网格,所以输出是 7 × 7 × 30 7\times 7\times 30 7×7×30。
3.2 预测阶段后处理
预测阶段后处理需要进行置信度过滤和非极大值抑制。
对于YOLO而言,后处理就是对纷繁复杂的预测出来的98个预测框进行筛选、过滤,把重复的预测框只保留一个,最终获得目标检测的结果。把低置信度的框过滤掉,把重复的预测框过滤掉。
下面参考deepsystems.io的slides,详细解读一下inference过程。
如上图,输出为 7 × 7 × 30 7\times 7\times 30 7×7×30。 7 × 7 7\times 7 7×7为 7 × 7 7\times 7 7×7个网格。对于每一个网格,对应30个数字,这30个数字是由5+5+20构成。两个5分别为:第一个和第二个预测框的四个位置坐标和一个置信度构成。20:是网格对20个类别的类别概率。
置信度:该预测框包含物体的概率。
将20个类别的条件概率与预测框的置信度相乘,即条件概率乘以条件本身发生的概率,则变成了它的全概率。
每个网格因为对应两个预测框,所以每个网格都可以获得两个全概率。 如下图。即每个网格预测两个bounding box,则共有 7 × 7 × 2 = 98 7\times 7\times 2 = 98 7×7×2=98个预测框。98个预测框的置信度分别乘以每个类别的条件概率,共有20个类别,所以最终得到98个20维的向量。
这98个20维的向量,可视化出来就是下图。
我们先只看狗这一个类别,假如狗是这20个类别中的第一个类别。我们设置一个阀值 k k k,假设 k = 0.2 k=0.2 k=0.2,那么我们将这98个向量中狗的概率小于0.2的值全部设置为0。我们再按照狗的概率的大小进行排序,将概率大的放置在前面,将概率小的放置在后面。再对排序后的值进行非极大值抑制操作(NMS)。
非极大值抑制(NMS)
仍然只看狗的概率。对于98个向量,我们只看狗的概率这一行。上面我们已经对狗的概率进行了从高到低的排序。
对于非极大值抑制,先把最大的概率拿出来,然后将每一个概率都与这个最大的概率进行比较。如果它们的IoU大于某个预值(假设为 p p p),那么我们则认为这两个预选框重复识别了同一个物体,那我们则把这个低置信度、第概率的过滤掉,将其狗的概率值这是为0 。如果IoU的值小于我们设置的阀值 p p p,那么则保留。重复以上过程,直到最低概率值与最大概率值进行比对完成。
然后,我们再选择第二大的概率值,让其他每一个比这个第二大概率低的概率都与这个第二大的概率进行比较。重复上述操作。
上述只是对狗这一个类别进行了操作,其他类别也按上述进行操作,最终就会得到检测结果。
将不为0的bounding box找出来,最后进行可视化。
注意:
- 后处理只是用于预测阶段,在训练阶段不需要进行NMS。
3.3 训练阶段
训练阶段,即反向传播阶段。
深度学习或监督学习的训练是通过梯度下降和反向传播方法迭代的去微调神经元中的权重,使得损失函数最小化。
目标检测是一个典型的监督学习问题。
在训练集上,一定有人已经用labelme或者labelimg这样的标注工具画出了ground-truth,如上图的绿色框,这是人工标注出来的。
我们的算法就是要让预测结果尽量的去拟合这个ground-truth,使得损失函数最小化。
这个绿色框的中心点落在哪个grid cell内就应该由哪个grid cell预测出的bounding box去负责拟合ground-truth。每个grid cell生成两个bounding box,那么就应该由这两个bounding box中的一个去负责拟合这个ground-truth。并且,这个grid cell输出的类别也应该是这个ground-truth的类别。所以每个grid cell只能预测出一个物体。49个grid cell最多只能预测49个物体,这也是yolov1检测密集目标和小目标性能比较差的原因。
每个网格都预测出两个预测框,那么该由哪一个预测框去负责拟合ground-truth呢?
应该由和ground-truth的IoU比较大的那个预测框去负责拟合。那么另外一个预测框则什么都不需要做。
如果没有预测框中心点落在这个网格中,则这个网格所预测的两个预测框都不再去拟合ground-truth,即不需要做什么事情。
YOLOv1损失函数
损失函数包含5项:
- 负责检测物体的bbox中心点定位误差
- 负责检测物体的bbox宽高定位误差
- 负责检测物体的bbox confidence误差
- 不负责检测物体的bbox confidence误差
- 负责检测物体的grid cell分类误差
相关文章:

目标检测算法 - YOLOv1
文章目录 1. 作者简介2. 目标检测综述3. YOLOv1算法3.1 预测阶段3.2 预测阶段后处理3.3 训练阶段 YOLO的全称是you only look once,指只需要浏览一次就可以识别出图中的物体的类别和位置。 YOLO是目标检测模型。目标检测是计算机视觉中比较简单的任务,用…...

Mercury性能测试模板
xxxxxxxxxx 性能测试报告 2023年11月8日 目 录 1 前言 1 1第一章XXXXXXXX核心业务系统性能测试概述 1 1.1 被测系统定义 1 1.1.1 功能简介 1 1.1.2 性能测试指标 2 1.2 系统结构及流程 2 1.2.1 系统总体结构 2 1.2.2 功能模块描述 3 1.2.3 业务…...

ts面试题总结
文章目录 前言ts和js的区别?什么是Typescript的方法重载?Typescript中never 和 void 的区别?typescript 中的 is 关键字有什么用?TypeScript支持的访问修饰符有哪些?如何定义一个数组,它的元素可能是字符串…...

访问控制列表
目录 ACL ACL原理 ACL包过滤方式 ACL通用命令 查看ACL表命令 删除整张表命令 接口配置ACL ACL分类 标准ACL 标准ACL的动作与条件 通配符掩码 扩展ACL 扩展ACL的动作与条件 命名ACL 前言 书写方式 ACL 含义:访问控制列表,其是一种包过滤…...

java入坑之类加载器
一、类加载机制 1.1类加载过程 类加载是Java虚拟机将类的字节码数据从磁盘或网络中读入内存,并转换成在JVM中可以被执行的Java类型的过程。类加载器是Java虚拟机的重要组成部分,负责加载和解析类的字节码,将其转换成Java虚拟机中的类对象&am…...

登录Tomcat控制台,账号密码输入正确但点击登录没反应不跳转到控制台页面
在tomcat-users.xml里面可以查看登录tomcat控制台的账号密码,如果账号密码输入正确还是登录不进去,则很有可能是tomcat的账号被锁了(可在catalina.xxx.log里面查看)。tomcat账号被锁定后默认情况是不访问控制台后5分钟自动解锁&am…...

[黑马程序员Pandas教程]——Pandas缺失值处理
目录: 学习目标空值和缺失值查看缺失值 加载数据并通过info函数初步查看缺失值情况df.isnull().sum()空值数量统计Missingno库对缺失值的情况进行可视化探查 安装missingno库missingno.bar(df)缺失值数量可视化missingno.matrix(df)缺失值位置的可视化missingno.he…...

Mysql进阶-视图篇
介绍 视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。 通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。…...

一种libuv实现websockets服务的解决方案
方法是libuv用多事件循环来驱动。说起来容易,做起来还是比下面的方法更容易: 上图是某位网友的方法代表子大部分网络资料。此方法对部署不友好,因为软件仓库提供的libwebsockets是不能用了。如何简化部署,利用好现有的软件仓库呢&…...

MobaXterm配置SSHTunnel
本地与远程服务器之间存在防火墙,防火墙只允许SSH端口通过,为访问远程服务器,我们可以借助MobaXterm来与SSH服务器建立隧道,使得防火墙外的用户能够访问远程服务器 配置 打开SSHTunnel 新建SSH tunnel 点击开启就生效了&…...

MySQL中的datetime和timestamp有什么区别
相同点: 存储格式相同 datetime和timestamp两者的时间格式都是YYYY-MM-DD HH:MM:SS 不同点: 存储范围不同. datetime的范围是1000-01-01到9999-12-31. 而timestamp是从1970-01-01到2038-01-19, 即后者的时间范围很小. 与时区关系. datetime是存储服务器当前的时区. 而timesta…...

如何开发一个求职招聘小程序?详细步骤解析与教程
一、确定需求和功能 在开发求职招聘小程序之前,需要明确需求和功能。通过对市场和用户需求的调研和分析,确定小程序需要具备哪些功能,如职位发布、简历投递、在线沟通、面试安排等。 二、选择开发方式 求职招聘小程序的开发方式有多种选择…...

安克创新音频算法工程师(应届生)招聘
职位描述: 负责音频处理算法的研发和优化,包括但不限于噪声抑制、回声消除、声反馈抑制、音效、声纹、唤醒、指令词识别等。 持续跟进国际前沿技术方向,预研端侧可落地的音频技术,打造技术影响力。 对音频处理系统进行模拟和实验…...

Ubuntu 22.04.3 LTS中安装singularity
文章目录 概要背景知识什么是singularity ? 安装流程1. 安装Go2. 下载Singularity3. 编译Singularity源代码 4. 验证安装是否成功singularity的使用安装open structure 小结 概要 这里主要记录singularity的安装和使用,安装过程中会出现相关的错误,所以…...

NVM安装node后提示没有对应npm包(即:无法将“npm”项识别为 cmdlet、函数、脚本文件)
背景 windows11 node版本降低到v12.22.12后,执行:nvm -v npm -v npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果 包括路径,请确保路径正确,然后再试一次。 所在位置 …...

路由器基础(十一):ACL 配置
访问控制列表 (Access Control List,ACL) 是目前使用最多的访问控制实现技术。访问控制列表是路由器接口的指令列表,用来控制端口进出的数据包。ACL适用于所有的被路由协议,如IP、IPX、AppleTalk 等。访问控制列表可以分为基本访问控制列表和高级访问控制…...

【今日文章】:如何用css 实现星空效果
【今日文章】:如何用css 实现星空效果 需求实现tips: 需求 用CSS 实现星空效果的需求: 屏幕上有“星星”,且向上移动。移动的时候,动画效果要连贯,不能出现闪一下的样子。 实现 这里我们需要知道,“星星”是…...

HackTheBox-Starting Point--Tier 1---Three
文章目录 一 题目二 实验过程 一 题目 Tags Web、Cloud、Custom Applications、AWS、AWS、Reconnaissance、Web Site Structure Discovery、Bucket Enumeration、Arbitrary File Upload、Anonymous/Guest Access译文:Web、云、定制应用程序、AWS、AWS、侦察、网站…...

Linux Alsa声卡驱动(2):Machine驱动
一:Simple Card Simple Card是ASoC通用的machine driver,可支持大部分标准声卡。 驱动:kernel/sound/soc/generic/simple-card.c compatible = "simple-audio-card"; 1、设备树属性 (1)协议 属性协议格式描述simple-audio-card,format i2si2s标准格式right_j…...

某综合性能源集团绩效考核设计项目纪实
——设置分层分类的考核指标、建立多维度评价体系,增加考核结果信服力 【客户行业】能源行业 【问题类型】薪酬管理 【客户背景】 某综合性能源跨国集团是一家专注于能源加工行业的民营跨国企业,业务覆盖能源工程建设、高端装备制造、能源勘探开发、专…...

ubuntu18.04 通过创建服务实现开机自启, 启动指定脚本
下面是具体的操作过程 切换目录到root cd /root/ 新建一个脚本 vi myscript.sh 添加内容:设置指定网卡的ip地址 (这里根据自己需要修改) #!/bin/bash ifconfig enp0s3 10.20.60.113 赋予执行权限 chmod x myscript.sh 新建一个服务 vi /etc/systemd/system/myscr…...

Tomcat 9.0.x 源码编译
文章目录 一、克隆源码二、构建 Maven1)在项目根目录中新建 pom.xml 文件2)然后 Add Maven Projects 三、在目录中增加 home 目录四、增加启动配置五、其它问题1)控制台乱码解决 2)启动后访问 localhost:8080 报错解决 一、克隆源…...

基于SSM的旅游管理系统的设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...

多目标优化中的“latent action”是什么?
2020 NeurIPS 中的“latent action”: Our model defines latent action as a boundary that splits the region represented by a node into a high-performing and a low performing region. 这里的latent action代表一个边界(分类器)&…...

上海亚商投顾:三大指数小幅下跌 CPO、算力板块集体爆发
上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指早间低开后震荡,午后一度拉升翻红,创业板指盘中跌近1%,随后探底回升跌…...

【C语法学习】19 -关闭和刷新文件
文章目录 1 关闭文件1.1 fclose()函数1.1.1 函数原型1.1.2 参数1.1.3 返回值 1.2 fcloseall()函数1.2.1 函数原型1.2.2 参数1.2.3 返回值 2 刷新文件2.1 缓冲区的概念2.2 缓冲区的刷新2.2.1 fflush()函数2.2.1.1 函数原型2.2.1.2 参数2.2.1.3 返回值 2.2.2 flushall()函数2.2.2…...

制作吉他谱软件Guitar Pro8中文版本
前面提到了使用Guitar Pro制作吉他谱的步骤,除此以外,在最新的Guitar Pro 8版本中,还新增了制作简谱的功能。 在窗口右侧的乐谱中,选择简谱按钮,可以打开乐谱的简谱编辑模式。 Guitar Pro-Guitar Pro 8 win-安装包ht…...

SpringBoot整合JUnit
1.创建新项目 说明:创建springboot_04_junit项目,选择对应的版本。 2.接口类 说明:新建BookDao接口。 package com.forever.dao;public interface BookDao {public void save(); }3.实现类 说明: 新建BookDaoImpl实现类。 pa…...

华为取消6000万订单影响在扩大,高通嘴硬强调不受影响
高通公布了2023年第三季度的业绩,业绩显示营收下滑24%,净利润下滑36%,不过高通强调预计今年四季度业绩将回升,意思是说华为取消订单带来的影响较小。 一、高通处境不利已延续4年时间 2019年美国对华为采取措施,众多中国…...

培训心得怎么写?CHAT帮你解决问题
问CHAT:请写一篇入职教师的培训心得 CHAT回复:作为一名新入职的教师,我非常感谢学校给予的这次培训机会。此次培训让我收获颇丰,无论是在教学理念、教学技巧上,还是在如何与学生、家长建立良好关系方面,都有…...