YOLO V1学习笔记

news/2024/7/10 22:48:47 标签: YOLO, 目标检测, 笔记, 学习

为什么要学YOLOV1_哔哩哔哩_bilibili

这个视频讲解的很好,建议在看这个之前看看卷积神经网络,会对卷积后的结果理解更加深刻一点。

一 背景

目标检测分为单阶段和两阶段模型。

之前的目标检测DPM、R-CNN、Fast-RCNN、Faster-RCNN都是双阶段模型,也就是说需要先提取候选框,然后对各个候选框进行分类、甄别。双阶段模型没有全图信息,容易丢失很多信息。识别精度高,但是识别速度始终是技术瓶颈。

YOLO V1开启了单阶段模型的大潮流。

最开始对密集的、小物体的检测不很友好,但是随着技术的发展,现在在密集和小物体的检测方面已经相当友好。

map指标:

machine learning - How to calculate mAP for detection task for the PASCAL VOC Challenge? - Data Science Stack Exchange

二 优点

实时识别,yolo的识别非常快;

端到端;

它输入是一张完整的图片,前后文联系会比较紧密。

三 原理

1 预测阶段网络结构:

 把它当成黑盒模型就可以啦,只要明确输入和输出。

也可以把这整个过程当作对图像全局信息的编码,从人眼可得到的各种信息转变为方便网络学习的各种特征。

1.1 编码:得到boungding box

输入:一张图片(448*448*3) 

输出:7*7*30的信息张量(其中包含所有预测框的坐标、置信度和类别结果),其实就是boundingbox的信息。

接下来的工作就是对7*7*30的信息张量进行解码。(获取其中的分类+回归的信息)

1.2 解码:表示boungding box的7*7*30

1.3 为什么是7*7?

首先要将输入图片划分为S*S个grid cell。

这里的S=7,所以是7*7,一共是49个grid cell。

1.4 为什么是30?

30=20+(2*5)

每个gridcell包含两个bounding box,通过bounding box来拟合图片中的已标注目标。(yolo将这个任务视为一个监督学习任务,图片中的目标(ground truth)已经人工标注好了。)

也就是一共会有49*2=96个bounding box。

每个bounding box的中心点都在它所属于的grid cell里面。

bounding box的信息表示为(x,y,h,w,c)

(x,y)表示其中心点位置

(h,w)表示其高度和宽度

这四个值唯一确定bounding box

(c)表示置信度

已经标注好的数据集中分类目标有20类,所以20指的是每个grid cell分别对20个类别的概率。

5是bounding box的信息,如上所述,每个grid cell有两个bounding box。

所以每一个grid cell需要30=20+(2*5)个数字来描述。

其实7*7*30最后的表示就是上图。

 2 对bounding box 进行后处理

低置信度过滤、非极大值抑制NMS、去掉重复框(IOU),得到以下预测结果。

3 训练阶段的反向传播

yolo的损失函数:

YOLO1是什么_SiMoNe10010的博客-CSDN博客 

当grid cell有物体的时候,计算损失函数第1,2,3,5项,当grid里没有物体的时候计算第4项。

损失函数一共有5项:

1.中心点定位误差   

2.宽高定位误差  

3.confidence误差

4.不负责检测Bbox confidence误差   

5.负责grid cell 检测误差

首先的是中心坐标的损失函数,用了我们最熟悉的均方误差MSE,这个很好理解。(中心点定位误差)

然后是高和宽,没有简单的用MSE,而是用平方根的MSE,这是为什么呢?(宽高定位误差)

第一个原因是更容易优化,但是还有更重要的原因:

看下面的表格:

首先,我们只考虑var1和var2在0和1之间。当var1和var2都很小的时候,也即是w和h都很小,意味着这个物体很小,那么我们应该尽量放大一些损失函数,让模型在识别小物体的时候准确一点。当var1和var2都很大,意味着这个物体也很大,甚至可能已经布满整张图片了,这时我么可以减小一些损失函数,毕竟很大的物体不需要很高的精度。

一句话,使用平方根的MSE而不是MSE其实就是像让模型对小尺度的物体更敏感。或者说,对大的和小的物体同样敏感。

接下来的三项都使用了MSE,其实用交叉熵可能会更好

其中第4项是用来判断一个bounding box中究竟有没有物体的。

 


http://www.niftyadmin.cn/n/5151104.html

相关文章

MySQL进阶之性能优化与调优技巧

数据库开发-MySQL 1. 多表查询1.1 概述1.1.2 介绍1.1.3 分类 1.2 内连接1.3 外连接1.4 子查询1.4.1 介绍1.4.2 标量子查询1.4.3 列子查询1.4.4 行子查询1.4.5 表子查询 2. 事务2.1 介绍2.2 操作2.3 四大特性 3. 索引3.1 介绍3.2 结构3.3 语法 1. 多表查询 1.1 概述 1.1.2 介绍…

如何当好一面面试官?

最近公司恢复了招聘,重新启动了校招流程,现在都已经 11 月了,刚好赶上校招黄金期,不过提前批的时间已经过了,也是有点神奇。 公司停止招聘好久了,突然重启,赶忙赶急地让我们推荐面试官&#xf…

【马蹄集】—— 百度之星 2023

百度之星 2023 目录 BD202301 公园⭐BD202302 蛋糕划分⭐⭐⭐BD202303 第五维度⭐⭐ BD202301 公园⭐ 难度:钻石    时间限制:1秒    占用内存:64M 题目描述 今天是六一节,小度去公园玩,公园一共 N N N 个景点&am…

炫云客户端信用额度如何修改?

现在炫云新注册用户信用额度是100元,但是有人觉得信用额度太高了,想修改信用额度,不知道炫云的信用额度如何修改,今天就教大家如何修改炫云的信用额度。炫云的信用额度在炫云官网和客户端都可以修改。 我们先来看炫云官网如何修改…

JavaScript执行上下文和调用栈

上节课我们已经说过了,JavaScript的代码执行是发生在js引擎中的调用堆栈的,但是具体是如何运行的,我们来详细剖析一下 如何执行上下文 执行上下文: 执行上下文是指在JavaScript中代码被执行时所创建的环境。它包含了变量、函数、…

33 mysql find_in_set 的实现

前言 这里我们主要是来探讨一下 mysql 中 in 的使用, find_in_set 的使用 这两者 在我们实际应用中应该也是 非常常用的了 测试数据表如下 CREATE TABLE tz_test (id int(11) unsigned NOT NULL AUTO_INCREMENT,field1 varchar(16) DEFAULT NULL,field2 varchar(16) DEFAU…

万宾科技管网水位监测助力智慧城市的排水系统

以往如果要了解城市地下排水管网的水位变化,需要依靠人工巡检或者排查的方式,这不仅加大了人员的工作量,而且也为市政府带来了更多的工作难题。比如人员监管监测不到位或无法远程监控等情况,都会降低市政府对排水管网的管理能力&a…

电商AI时代,云积万相帮助品牌实现有效增长

今年的“双11”如约而至,电商AI在淘宝天猫平台首次大规模应用。“双11”期间,淘宝除了上线AI智能助手淘宝问问之外,还给商家提供了多达10款免费AI工具,目前商家调用次数已经超过20万次。      由此可见,AI技术的发…