热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【目标检测】YOLOv1onestage

YOLO由24层ConvNet和2层FCs组成。其核心思想是将图片均匀划分为多个gridcell,每个gridcell产生两个bbox和gridcell中如果存在对象,对象是各类的

YOLO由24层ConvNet和2层FCs组成。其核心思想是将图片均匀划分为多个grid cell,每个grid cell产生两个bbox和grid cell中如果存在对象,对象是各类的概率,每个bbox由5个参数组成,xywh和confidence,confidence是bbox中存在对象的概率,将两概率相乘即可表示grid cell存在某类对象的概率。

YOLO的损失函数是全文重点。通过损失函数,使得模型更关注包含对象的bbox。

但也因为网络本身的设置,使得YOLO无法对多个相邻小物体进行识别,并且对定位和大小物体偏差的错误也没能通过微调损失函数解决。

目录

Introduction

Unified Detection

Network Design

Limitations of YOLO


Introduction

目前大多数检测系统是将图像分类任务转换为图像检测任务。YOLO将目标检测问题转换为回归问题。使用一个网络从完整图片中预测bounding boxes和class probabilities。因为整个检测流程是一个单一网络,所以它能够被端到端的优化。相较于最有目标检测算法,yolo存在更多的定位错误

 

Unified Detection

将输入图片分割为S x S网格。如果一个目标的中心在某个网格中,这个网格就负责检测这个目标。每个网格预测B个bounding boxes和对应的confidence scores。Confidence scores反应了模型对box包含目标的confident以及预测目标的accurate。定义confidence:

【目标检测】YOLO v1 one-stage

       如果没有目标存在,则confidence scores应该为0。另外,我们希望confidence scores等于predicted box和ground truth的IoU。每一个bounding box包含5个值:x, y, w, h, confidence。(x, y)表示box中心相对于网格单元的坐标;w, h是相对于整个图片的宽高;因此x, y, w, h的值都在[0, 1]之间。confidence prediction代表predicted box和ground truth box间的IoU。

       每个网格也预测C个类条件概率:

【目标检测】YOLO v1 one-stage

       这个概率是网格包含目标情况下的。每个网格只预测一组类条件概率,与bbox数量B无关。测试时:

【目标检测】YOLO v1 one-stage

这样我们就获得了每个box的class-specific confidence score。

【目标检测】YOLO v1 one-stage

参数设置:对于VOC数据集,S = 7,B = 2,C = 20。

 

Network Design

【目标检测】YOLO v1 one-stage

24卷积层+2全连接层。卷积层从图片中提取特征,全连接层预测概率和坐标。Fast YOLO使用9个卷积层以及更少的卷积核。使用前20层卷积层在ImageNet上训练。之后增加了4层卷积层和2层全连接层,并加大了图片的分辨率,以满足检测对图片细纹理的要求。最后一层使用linear**函数,其余使用leaky rectified linear**函数:

【目标检测】YOLO v1 one-stage

损失函数原型是模型输出的sum-squared error,但存在两个问题:

  1. 它平均的考虑了定位error和分类error,这不太理想。
  2. 许多网格并不包含任何目标,这使得这些网格的confidence scores向着0,导致模型不稳定,出现偏差。

为解决这些问题,我们增加了bounding box坐标预测损失的影响,并且减少不包含目标box的confidence造成的损失。我们使用λcoord和λnobj来调解他们的影响,设置λcoord=5、λnobj = 0.5。

Sum-squared error同时也均衡了大小box的loss。相对于大box中的deviation,小box的deviation更应该被loss function注意。为解决这个,我们将对宽高的预测替换为宽高平方根。

YOLO在每个网格中预测多个bbox,训练时,对每个目标,我们只希望有一个去bbox负责。我们指定bbox的原则是,与ground truth有最高IOU的bbox。这使得每个predictor在对某个目标的size, aspect ratio, class有着更好的表现,改善整体的召回率。训练时,我们最优化一下loss function:

【目标检测】YOLO v1 one-stage

如果一个对象出现在那个网格中,损失函数只惩罚分类错误。如果网格有某个predictor具有最高的IOU,对那个ground-truth box负责,损失函数只惩罚bounding box坐标错误。

 

Limitations of YOLO

  1. 因为每个网格只有两个bbox,只对一个目标负责,YOLO这种对bbox预测的空间限制导致网络无法对过多相邻目标预测。尤其是对鸟群等小目标检测不强。
  2. 因为模型从数据中学习预测bbox,导致他很难拓展到有新的、不寻常aspect ratio和其他参数的目标上。
  3. 错误的主要原因在于错误的定位。Loss function同等对待小bbox和大bbox中的错误,但小bbox的错误会对IOU有更大的影响。

推荐阅读
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了如何在Android应用中使用GridView组件以网格形式展示数据(如文本和图像)。通过行列布局,实现类似矩阵的数据展示效果。 ... [详细]
  • 本文介绍了如何在MATLAB中实现单变量线性回归,这是基于Coursera上Andrew Ng教授的机器学习课程中的一个实践项目。文章详细讲解了从数据可视化到模型训练的每一个步骤。 ... [详细]
  • 开发笔记:Python:GUI之tkinter学习笔记1控件的介绍及使用
    开发笔记:Python:GUI之tkinter学习笔记1控件的介绍及使用 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • 使用GDI的一些AIP函数我们可以轻易的绘制出简 ... [详细]
  • 本文详细介绍如何在VSCode中配置自定义代码片段,使其具备与IDEA相似的代码生成快捷键功能。通过具体的Java和HTML代码片段示例,展示配置步骤及效果。 ... [详细]
  • 本文介绍了如何在Python中使用多元核密度估计(KDE)并将其结果在3D空间中进行可视化。通过利用`scipy`库中的`gaussian_kde`函数和`matplotlib`或`mayavi`库,可以有效地展示数据的密度分布情况。 ... [详细]
  • 本文介绍如何在Windows Forms应用程序中使用C#实现DataGridView的多列排序功能,包括升序和降序排序。 ... [详细]
  • 在一个N×N的网格中,每个单元格(x, y)(其中0 ≤ x < N 和 0 ≤ y < N)都可能有一个灯泡。初始状态下,某些灯泡是亮着的。当某个灯泡亮起时,它会照亮其所在的行、列和两条对角线上的所有单元格。对于一系列查询,需要确定每个查询的单元格是否被照亮,并在每次查询后关闭该单元格及其相邻单元格上的灯泡。 ... [详细]
author-avatar
Shaw
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有