YOLO(You Only Look Once)
参考
一、介绍
YOLO算法把物体检测问题处理成回归问题,用一个卷积神经网络结构就可以从输入图像直接预测bounding box和类别概率。YOLO具有如下优点:(1)YOLO的运行速度非常快;(2)YOLO是基于图像的全局信息预测的,因此在误检测的错误率下降挺多;(3)泛化能力强,准确率高。
二、YOLO算法过程示意图
三、损失函数分析
Yolo算法采用的是均方差损失函数,但是对不同的部分采用了不同的权重值。因为很多grid cell是不包含物体的 (对应的confidence score为0),如果定位误差和分类误差的权重值一样,则不包含物体的单元格将会盖过包含物体的单元格对损失函数的影响,容易导致模型不稳定,训练发散。对于定位误差,即边界框坐标预测误差,采用较大的权重\(λ_coord=5\)(误差越大,则促使边界框的定位更精确)。然后其区分不包含目标的边界框与含有目标的边界框的置信度,对于前者,采用较小的权重值\(λ_noobj=0.5\)(不包含目标时,对应的box bounding对结果的影响较小,因此给与小的权重),其它权重值均设为1。
均方误差同等对待大小不同的边界框,但是实际上较小的边界框的坐标误差应该要比较大的边界框要更敏感。因此将网络的边界框的宽与高预测改为对其平方根的预测,即预测值变为(x,y,w−−√,h−−√)(x,y,w,h)。
另外由于每个单元格预测多个边界框。但是其对应类别只有一个。那么在训练时,如果该单元格内确实存在目标,那么只选择与ground truth的IOU最大的那个边界框来负责预测该目标,而其它边界框认为不存在目标。这样设置的一个结果将会使一个单元格对应的边界框更加专业化,其可以分别适用不同大小,不同高宽比的目标,从而提升模型性能。如果一个单元格内存在多个目标怎么办,其实这时候Yolo算法就只能选择其中一个来训练,这也是Yolo算法的缺点之一。
其中第一项是边界框中心坐标的误差项,1objij1ijobj指的是第ii个单元格存在目标,且该单元格中的第jj个边界框负责预测该目标。第二项是边界框的高与宽的误差项。第三项是包含目标的边界框的置信度误差项。第四项是不包含目标的边界框的置信度误差项。而最后一项是包含目标的单元格的分类误差项,1obji1iobj指的是第ii个单元格存在目标。
四、相关知识点
1、intersection-over-union ( IOU )
在目标检测的评价体系中,有一个参数叫做 IoU ,简单来讲就是模型产生的目标窗口和原来标记窗口的交叠率。具体我们可以简单的理解为: 即检测结果(DetectionResult)与 Ground Truth 的交集比上它们的并集,即为检测的准确率 IoU :
\[
IOU = \frac{DetectionResult\cap GroundTruth}{DetectionResult\cup GroundTruth}
\]
2、极大值抑制算法(non maximum suppression, NMS)
NMS算法主要解决的是一个目标被多次检测的问题,如下图中人脸检测,可以看到人脸被多次检测,但是其实我们希望最后仅仅输出其中一个最好的预测框,比如对于美女,只想要红色那个检测结果。那么可以采用NMS算法来实现这样的效果:首先从所有的检测框中找到置信度最大的那个框,然后挨个计算其与剩余框的IOU,如果其值大于一定阈值(重合度过高),那么就将该剩余框剔除;然后对剩余的未处理检测框重复上述过程,直到处理完所有的检测框。
2、均值平均精度(mAP)
参考
步骤1
在模型对图像进行检测之后,我们可以得到一堆检测框,并利用IoU值是否大于0.5来区分正确或错误的检测。
公式为:给定一张图像,类别C的Precision = 图像的正确预测(True Positives)的数量 / 在图像上这一类的总的目标数量。
步骤2
对于给定的类C,我们能够为验证集中的每张图像计算此值。 假设我们在验证集中有100个图像,并且我们知道每个图像都有其中的所有类,则可以得到100个该类C的的精度值,取平均值后,即为该类的平均精度。
公式为:类C的平均精度= 在验证集上所有图像对于类C的精度值的和 / 有类C这个目标的所有图像的数量。
步骤3
假设整个集合拥有20各个类,分别计算这20个类平均精度,最后再对这20个平均精度取平均之后,即得到均值平均精度(mAP)。
要点
- MAP总是在固定数据集上计算。
- 它不作为量化模型输出的绝对度量,但它是一个相当好的相对度量。当我们在流行的公共数据集上计算这个度量时,这个度量可以很容易地用来比较不同目标检测方法。
- 根据训练数据中类的分布情况,平均精确度值可能会因某些类别(具有良好的训练数据)而非常高(对于具有较少/较差数据的类别)而言非常低。所以你的MAP可能是适中的,但是你的模型可能对某些类非常好,对某些类非常不好。因此,建议在分析模型结果的同时查看各个类的平均精度。这些值也可以作为我们是不是需要添加更多训练样本的一个依据。
五、疑问
Yolo算法将目标检测看成回归问题 ?(待理解)
YOLO之前的物体检测系统使用分类器来完成物体检测任务。为了检测一个物体,这些物体检测系统要在一张测试图的不同位置和不同尺寸的bounding box上使用该物体的分类器去评估是否有该物体。如DPM系统,要使用一个滑窗(sliding window)在整张图像上均匀滑动,用分类器评估是否有物体。
在DPM之后提出的其他方法,如R-CNN方法使用region proposal来生成整张图像中可能包含待检测物体的potential bounding boxes,然后用分类器来评估这些boxes,接着通过post-processing来改善bounding boxes,消除重复的检测目标,并基于整个场景中的其他物体重新对boxes进行打分。整个流程执行下来很慢,而且因为这些环节都是分开训练的,检测性能很难进行优化。
作者设计了YOLO(you only look once),将物体检测任务当做回归问题(regression problem)来处理,直接通过整张图片的所有像素得到bounding box的坐标、box中包含物体的置信度和class probabilities。通过YOLO,每张图像只需要看一眼就能得出图像中都有哪些物体和这些物体的位置。
Anchor box的形状是固定的吗?还是从训练中学习到的?box的边界可以超过cell的边界吗?可以的话,在训练中是如何实现的?(可能有误)
形状不是固定的。在训练数据中,包含了每一个物体所对应的边框信息和类别,训练时模型可以学习到这些边框信息,从而在预测的时候,自动某一物体进行标注。
box的边界可以超过cell的边界。当某一物体的中心点落在某一个cell中时,该cell就专门负责该物体的检测,即使该物体仍有其他部分位于其他cell中,其他cell也不能负责该物体的检测。
【个人理解】cell的边界以及数量与box的边界无关,当cell的粒度变小时,YOLO模型能够更好得对小目标进行检测,但同时也会造成更大的耗时和计算量;反之亦然。
在YOLO中,Anchor box的信息是事先设定的吗?还有是每个位置都拥有系列相同尺度和大小的anchor box?
主要的疑问是,如果YOLO没有实现设定Anchor box信息,那么在训练初始时,网络的输出中,box的4个值会变成奇形怪状的,基本上构不成一个矩形。(这种情况下,训练的收敛程度和快慢是否会受到影响?)
另外,如果YOLO的每个cell有用到事先设定好的Anchor box信息,那么不就和YOLO9000的方法一样吗?那么YOLO9000在这个方面相比于YOLO不就没有了什么改进?
为什么YOLO的localization error和recall变现比较差?
因为YOLO将图像分为k * k的格子,而格子的划分较为粗糙(以及bounding boxes的scale和aspect ratio),导致出现了较多的定位误差。
另外,由于每个cell只负责一个目标的预测,当同一个cell里出现多个物体(小目标)时,这些物体就不能够被检测到。这也就造成了recall率(查全率)的低下。
YOLO(You Only Look Once)的更多相关文章
- 论文 | YOLO(You Only Look Once)目标检测
论文:You Only Look Once: Unified, Real-Time Object Detection 原文链接:https://arxiv.org/abs/1506.02640 背景介 ...
- 非极大值抑制(Non-Maximum Suppression,NMS)
概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索.这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二 ...
- SSD(single shot multibox detector)
SSD,全称Single Shot MultiBox Detector,是Wei Liu在ECCV 2016上提出的一种目标检测算法,截至目前是主要的检测框架之一,相比Faster RCNN有明显的速 ...
- 项目总结三:目标检测项目(Car detection with YOLOv2)
1. the YOLO model (YOLO ,you only look once) (1)We will use 5 anchor boxes. So you can think of the ...
- SSD(single shot multibox detector)算法及Caffe代码详解[转]
转自:AI之路 这篇博客主要介绍SSD算法,该算法是最近一年比较优秀的object detection算法,主要特点在于采用了特征融合. 论文:SSD single shot multibox det ...
- 四、YOLO-V1原理与实现(you only look once)
可以看成图像分类与定位的结合,给定一张图片,目标检测系统要能够识别出图片的目标并给出其位置,由于图片中目标数是不定的,且要给出目标的精确位置,目标检测相比分类任务更复杂.目标检测的一个实际应用场景就是 ...
- 五、SSD原理(Single Shot MultiBox Detector)
主流的算法主要分为两个类型: (1)tow-stage R-CNN系列算法,其主要思路是先通过启发式方法(selective search)或者CNN网络(RPN)产生一些列稀疏的候选框,然后对这些候 ...
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part1:准备工作 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 1.实施前准备工作 1.1 服务器安装操 ...
随机推荐
- BZOJ5334:[TJOI2018]数学计算(线段树)
Description 小豆现在有一个数x,初始值为1. 小豆有Q次操作,操作有两种类型: 1 m: x = x * m ,输出 x%mod; 2 pos: x = x / 第pos次操作所乘 ...
- 安装 Autoconf, Automake & Libtool
今天在使用sudo apt-get install命令安装autoconf和automake时,出现了问题,说是不能sudo apt-get install安装这些软件似乎不是最新的.由此,我通过搜索 ...
- 开源仓库Harbor搭建及配置过程
1.Harbor介绍 Harbor是Vmvare中国团队开发的开源registry仓库,相比docker官方拥有更丰富的权限权利和完善的架构设计,适用大规模docker集群部署提供仓库服务. 2.安装 ...
- 数据同步canal服务端介绍
1.下载安装包 canal&github的地址,最权威的学习canal相关知识的地方 https://github.com/alibaba/canal 在下面的wiki列表中找到AdminGu ...
- [转]VS 2012环境下使用MFC进行OpenGL编程
我就不黏贴复制了,直接给出原文链接:VS 2012环境下使用MFC进行OpenGL编程 其它好文链接: 1.OpenGL系列教程之十二:OpenGL Windows图形界面应用程序
- Python2.7-random
random 模块,实现了各种分布下的伪随机数生成器.对于整数,可以从一个范围中随机挑选:对于序列,可以随机挑选其中的元素但不改变原序列,也可以对序列中的元素进行重新排列.此外,模块还封装了各种分布函 ...
- Docker学习4-Containers - 容器
用Docker方式构建应用程序,从这个应用程序层次结构的底层容器开始.高于此级别的是一项服务,它定义了容器在生产中的行为方式.在顶层是堆栈,它定义了所有服务的交互. Stack 堆栈 Service ...
- odoo 打印单
<td style="word-wrap:break-word;width:20%;font-size:16"> <t t-foreach="l.pro ...
- 1.2《想成为黑客,不知道这些命令行可不行》(Learn Enough Command Line to Be Dangerous)——开始第一条命令
现在开始准备运行我们的第一条命令了,在屏幕上打印'hello'.(字符打印的地方被称为'标准输出',通常指的是屏幕,很少指真的物理打印机设备).这条命令就是echo,这条命令的参数是想要输出的字符串或 ...
- Latex数学公式编写
小叙闲言 一直想用latex来编辑文档,但是没有需求,所以也没有去学习一下,但是最近由于要大量敲数学公式,有了latex数学公式的需求,所以来稍稍总结学习一下 1.在MathType中编写Latex数 ...