目标检测算法:YOLO v1论文解读

目标检测算法:YOLO v1论文解读

前言

​ 其实网上已经有很多很好的解读各种论文的文章了,但是我决定自己也写一写,当然,我的主要目的就是帮助自己梳理、深入理解论文,因为写文章,你必须把你所写的东西表达清楚而正确,我认为这是一种很好的锻炼,当然如果可以帮助到网友,也是很开心的事情。

说明

​ 如果有笔误或者写错误的地方请指出(勿喷),如果你有更好的见解也可以提出,我也会认真学习。

原始论文地址

​ 点击这里,或者复制链接

https://arxiv.org/abs/1506.02640

目录结构

文章目录

    • 目标检测算法:YOLO v1论文解读
      • 1. 文章内容概述:
      • 2. YOLO流程介绍:
      • 3. CNN架构:
      • 4. 损失函数:
      • 5. 注意点:
      • 6. 总结:

1. 文章内容概述:

​ 作者提出了一种新的目标检测方法,是一种单阶段检测方法,称其为YOLO,全称为You only look once。这个方法的主要特点是不再生成区域建议框,而是全部交给网络架构来实现,是真正的端到端结构(其实并不是严格意义上的端到端,因为还需要进行后处理操作)。

​ 正是因为没有了区域建议框的生成,其运行速度非常快,可以实现实时检测,但是同样的,其mAP和最先进的检测方法Faster-RCNN比还是较低。

2. YOLO流程介绍:

​ 如果你看了我之前的关于RCNN、Fast-RCNN、Faster-RCNN的解读,你马上就会感概,YOLO真的好简单。

​ 论文原图如下:

在这里插入图片描述

​ 对上图进行简单的说明:

  • 首先,将输入图片改变大小(一般是取大的分辨率,文中取得的是448*448)

问题:为什么要取大分辨率图像?

​ 因为检测问题需要更细致的信息,因此提高分辨率。

  • 然后,将该图片传输给CNN架构,然后产生输出(即预测框和类别预测信息)

3. CNN架构:

​ 这里作者自己设计了CNN架构,当然,对于读了这么多的CNN架构论文来说,小case(如果你是无基础直接看的话,当我没说,此时建议你可以先看看基础的)。

​ 论文原图如下:

在这里插入图片描述

​ 具体的网络架构就不谈了,只是要注意,其实网络架构中用到了激活函数,并且不是我们常规的ReLu激活函数,而是leaky relu(最后一层还是relu):

在这里插入图片描述

​ 另外,需要注意它的输出,**这是最重要的部分。**因为它的输出和我们平时的输出不一样,因为无论是图像分类的架构,还是之前的两阶段检测算法,输出就没有三维结构的。

​ 那么,7*7*30是什么意思?下面先分开解释,再结合一起解释。

解释:7*7含义

​ 作者将一张图像划分为S*S个网格,如下图(S=7):

在这里插入图片描述

​ 作者认为:

  • 如果某个物体对象中心落在某一网格中,那么该网格就负责该对象的检测
  • 每个单元格预测B个边界框和其对应的置信度分数,以及一组类概率(比如总共20个类别,则产生20个概率值)

​ 其中,置信度公式和概率公式分别如下,其中Pr(object)取{0,1},表示该网格有对象,则取值为1,否则取值为0。

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

解释:30含义

​ 30=(4+1)*2+20,其中4和1分别表示4个坐标值(x,y,w,h)和一个置信度分数;2表示每个单元格预测2个边界框,那么自然需要乘以2;20是因为数据集共20个类别。

解释:7*7*30怎么才能满足我们的要求?

​ 神经网络的神奇之处,就是在于我们可以让它去适应任意的任务。比如这里,我们需要它按照我们的想象输出7*7*30,并且这里的值必须为我们所想的(比如30里面为坐标值、概率值等)。想要让它输出和我们想得一样,就必须让它在训练的时候,告诉它,30里面的值我们要用来生成预测框和判断类别。而,这个控制它的过程,就是定义一个优秀的损失函数,让7*7*30的值各有所用。

4. 损失函数:

​ 原文中,给出的损失函数公式如下:

在这里插入图片描述

​ 下面进行一一解读:

1[上标:obj,下标:ij] 、 1[上标:noobj,下标:ij] 和 1[上标:obj,下标:i] 含义:

​ 1[上标:obj,下标:i],表示如果对象在单元格i中,则取值为1,否则取值为0。

​ 1[上标:obj,下标:ij],表示如果对象在单元格i的第j个边界框中,则取值为1,否则取值为0。

​ 1[上标:noobj,下标:ij],与上面恰好相反,即如果对象没有出现在单元格i的第j个边界框中,则取值为1,否则取值为0。

S和B 含义:

​ S就是一张图片划分为多少个单元格,文中为7*7。

​ B就是一个单元格有B个边界框预测,文中为2。

xi、yi、wi、hi、Ci、pi© 含义:

​ xi、yi、wi、hi就是中心点坐标值和预测框的宽高。

​ Ci是预测框的置信度分数,公式上面已经给过了。

​ pi© (小写c)是一个边框的一组概率值(向量)。

​ 在这些变量上加上*号,表示为真实值。

λcoord,λnoobj 含义:

​ 这两个值是超参数,主要是平衡值。因为,不包含对象的预测框肯定是多数,这会导致计算损失时,值失衡。因此一般会让λcoord值取得比较大,比如5,λnoobj取得比较小,比如0.5。

各行表达式的含义:

​ 第一行+第二行 = 预测框(有对象的预测框)的回归损失,可以看出采取的时类似于MSE的损失,准确来说,后面所有的损失都采取的类似MSE的损失(这是一个缺点,分类损失还是用交叉熵好一点)。

​ 第三行+第四行 = 分别为有无对象的预测框的置信度损失值。

​ 第五行 = 分类损失值。

5. 注意点:

​ 在上面写的时候,有一句”如果某对象的中心落在某单元格,则这个单元格负责该对象的检测“。而在后面中,经常会有”如果某对象落在第i个单元格中“,这里对象落在某单元格就是指的是对象中心落在单元格中。

​ 另外,一个单元格有多个框,是否所有框都负责对象?不是的,而是IOU最大的负责预测,这样可以让不同的框产生不同的作用,有利于提高召回率。

6. 总结:

​ YOLO的特殊之处在于损失函数的构建和网络输出的利用。不过YOLO v1仍然有许多的缺点,比如预测框太少(7*7*2=98个)、损失函数中分类没有交叉熵损失等等。

​ 不过,YOLO相比于两阶段检测方法,的确很简单,这也是它的一大优点。

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

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

相关文章

html加入谷歌地图,html页面插入百度谷歌地图

一、百度地图 1、打开“百度地图生成器”的网址:http://api.map.baidu.com/lbsapi/creatmap/index.html 2、在“1.定位中心点”中,查找具体位置 3、在“2.设置地图”中,按照自己的需求修改地图的外观: a、地图的宽和高 b、地图上显…

怎么在html插入谷歌地图,html页面插入百度or谷歌地图

一、百度地图 1、打开“百度地图生成器”的网址:http://api.map.baidu.com/lbsapi/creatmap/index.html 2、在“1.定位中心点”中,查找具体位置 3、在“2.设置地图”中,按照自己的需求修改地图的外观: a、地图的宽和高 b、地图上显…

安卓谷歌地图 Google Maps不显示地图

问题 一个用到 Google Maps API 的安卓项目,在A电脑上build后,正常运行,显示地图,而且可以正常定位,将项目拷贝到B电脑上后,重新build,不能正常运行:不显示地图,地图界面…

百度二级网页打不开_网页打不开,原因在这里!

不知道小伙伴们,有没有遇到这样的问题,网络明明没问题,QQ等工具也可以正常登陆,就是有一部分网页打不开! 打不开一般就俩原因: 1.网站服务器出问题了,网页访问不了! 2.DNS问题&#…

基本农田卫星地图查询_谷歌地图打不开?试试这个替代网站,街景功能很好用!...

现在,谷歌地图在国内无法访问。大家如果想要查询国外的地理位置等信息,就必须要靠谷歌地图来解决。像百度、高德这些地图查询国内的信息还不错,但是要查国外的内容就没办法实现了。 全球地图/图:allinprior.com 谷歌地图有很多强大的功能,比如去国外旅游,首先得查询国外的…

谷歌地图开发使用记录 Google Maps

谷歌地图开发文档 申请谷歌地图密钥 可参考此链接https://blog.csdn.net/edsoki/article/details/123391685 https://www.wppop.com/get-google-api-key.html 引入 <script src"https://maps.googleapis.com/maps/api/js?key密钥&languageen"></script…

谷歌地图打不开怎么办?

谷歌地图打不开怎么办&#xff1f; 方法一&#xff1a;使用在线版google地图,点击下方链接进入 天天看地图 https://www.tiantianditu.com/3d.html 方法二&#xff0c;使用奥维地图&#xff0c;打开google图层 打开google图层需要3个步骤&#xff0c;1&#xff0c;下载奥…

实现UDP通信(socket接口函数扩展)

一、write/read到send/recv 函数原型&#xff1a; ussize_t send(int sockfd, const void *buf, size_t len, int flags);//发送 ussize_t recv(int sockfd, void *buf, size_t len, int flags);//接收 前三个参数同read/write一样&#xff1b; ussize_t read(int fd, voi…

预制菜进击万亿市场,谁能更快上桌“吃菜”?

文 | 螳螂观察 作者 | 图霖 消费行业很少有可持续的风口&#xff0c;这两年的预制菜算其中一个。 艾媒咨询发布的行业预测显示&#xff0c;2026年我国预制菜市场规模有望达到10720亿元。 过去这一年&#xff0c;武汉、大同等地已相继召开了预制菜相关的产业峰会。峰会规模有…

玩转ChatGPT:制作AI播报视频

一、写在前面 羊了几天&#xff0c;上线就发现&#xff0c;GPT的第三方插件的数量越来越多&#xff0c;使得官方推出了搜索功能&#xff1a; 我逛了一圈&#xff0c;发现这个插件挺有意思&#xff0c;用来生成AI语音播报视频的。 下面给大家尝尝鲜。 二、实战过程 &#xff0…

halcon入门之_提取遥控器字符并且写入txt文本

*老生常谈 read_image (Image, a) rgb1_to_gray (Image, GrayImage) dev_display (GrayImage) * 首先要把它转化为灰度图,在机器视觉中,大部分的图像处理算子都是建立在灰度图上的,所以gray(灰度图)是标志性存在的*转化为灰度图后,就要进入正式的图像处理了,先来一波阈值分割au…

ts泛型 不能将类型“string”分配给类型“U”。 “U”可以使用与“string”无关的任意类型进行实例化。

function cyc<T,U>(msg:T):U{let str:string"你输入了:";strmsg;return str; } var logcyc<string,string>("1"); console.log(log) var log1cyc<number,string>(2); console.log(log1) 报错如下 不能将类型“string”分配给类型“U”…

富文本编辑器 wangeditor 的使用

富文本编辑器 wangeditor 的使用 为什么选择使用 wangeditor a. 轻量、简洁、界面美观、文档齐全、易用、开源免费、开源团队维护、有专业Q群答疑、持续更新、无需使用其他库。插件功能基本符合我们目前的业务需求 b. 相比较于TinyMCE一类的编辑器&#xff0c;中文文档入门简单…

tinymce富文本编辑器的使用

tinymce富文本编辑器的使用 1、基本介绍 tinymce富文本官网&#xff1a;https://www.tiny.cloud/ 中文文档&#xff1a;http://tinymce.ax-z.cn/ tinymce-npm地址&#xff1a;https://www.npmjs.com/package/tinymce tinymce英文文档-示例地址&#xff1a;https://www.tin…

vim 文本编辑器

4.2 vim文本编辑器 4.2.1 简介 vim是vi的升级版,最常见的区别是能用多种颜色显示显示系统文件的一些特殊信息。 vi: Visual Interface 文本编辑器,可视化接口vim&#xff1a;vi iMproved的缩写&#xff0c;即vi的增强版 vim编辑器分为三种主要模式&#xff1a; 命令模式&am…

超级好用的TXT分本分割工具

百度网盘&#xff1a;https://pan.baidu.com/s/1ry-LCLpgwTghXWbL8q7bnQ

python分割文本_python分割文本

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! break f.write(data) print(fid,#,end=.) fid+=1... 我有一个文本文件。 我需要得到一个句子列表。 这如何实现? 有很多微妙的东西,比如点用在缩写中。 我的…

java手写-txt大文本分割

一、txt文本切割代码 场景&#xff1a;公司项目txt日志文件太大&#xff0c;用notepad看起来太卡了&#xff0c;公司禁用网盘也没法下载&#xff0c;自己空闲了写一个吧&#xff0c;复习一下输入出入流。 先给代码成品吧&#xff1a; 就是这么简单&#xff0c;几行代码就可以…

C#版TXT文本分割器

哈&#xff01;老师实验要求要做文件分割器的&#xff0c;这里先做个demo出来和大家分享下。 这是实验要求&#xff1a;1. 能进行文件分割 2. 分割块大小由用户输入决定 3. 能进行文件合并 …

C#txt文本分割器

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;//openfiledialog using System.IO;//文本处理namespace CutTxt {public parti…