论文:You Only Look Once: Unified, Real-Time Object Detection

原文链接:https://arxiv.org/abs/1506.02640

背景介绍

  目前的目标检测系统是由原来的目标分类系统改造而来。为了检测目标这些系统在待检测图片的不同位置而使用分类系统。像DPM(deformable parts models)使用了滑动窗口方法。分类器在图片中的不同窗口上运行以便检测出目标。

  更先进一点的研究,例如R-CNN使用了候选区域生成的方法。首先在图片中生成可能会用到的区域。在候选区域上使用分类算法后,后续经过位置精修,去除重复区域,重新对候选区域进行打分。因为每个单独的目标必须被单独训练,因此训练流程通常很慢,复杂而且难以优化。

  我们重新定义目标检测,将其视为一个简单的回归问题。使用我们的系统,你只用看图片一次就能检测出有哪些目标以及这些目标的位置。YOLO(You Only Look Once)的结构十分简单如下图所示:
=EN-US>

图1 YOLO 结构图

具体步骤如下:

  • 将输入图片大小变换为448 × 448 。
  • 在图片上运行单个卷积神经网络。
  • 得出检测结果,并以confidence的形式给出。

  YOLO中的单个卷积神经网络可以同时检测出多个目标区域以及目标所属种类的可能性。YOLO能够在整张图像上训练,直接优化检测性能。 这种统一的检测系统比传统的物体检测有系统有诸多好处。

  • YOLO速度很快,在使用过程中,YOLO模型能够在GPU Titan X 上以150fps的速度运行。而且YOLO检测准确度是其他的实时检测模型的两倍。
  • YOLO以整张图片作为输入,与R-CNN相比,YOLO的背景错误率降低了一半以上。
  • YOLO拥有更好的泛化能力。当YOLO被使用在一个全新的领域,性能依然很好。

统一识别

  本文提出的网络,使用整张图片作为输入,用来同时检测多个目标的区域。YOLO实现了实时高性能的端到端的训练。

  我们的系统把输入图片分割成 S * S 个小格子,如果某个目标的中心落在这其中的某个小格子中,这个小格子将负责检测出这个目标。

  每个格子将会预测出B个Bouding box 和 confidence。confidence代表这个格子包含这个目标的可能性,以及预测出某个目标的可能性。

  每个Bounding box 包含5个预测值,(x,y,w,h,confidence)。 (x,y)代表box的中心的相对位置坐标,w 和 h 代表box的相对宽和高。confidence 代表预测出box 和真正的box的IOU值。

  每个小格子还包含了C个类别可能性。我们把每个小格子的类别可能性和confidence相乘,就得到了针对于某个特定类的confidence 分值。这个分值既包含了box中出现的目标属于某个类的可能性,又包含了这个box和目标的重叠度。

  在PASAL VOC 数据集上,YOLO使用的S 为7, B为2,PASAL VOC 总共有20类物体,因此C为20。因此我们的tensor大小为 7*7*(2 * 5 + 20)。

图2 YOLO 模型

2.1 网络设计

  我们的网络架构收到GoogLeNet的启发,总共有24个卷积层,2个全联接层。与GoogLeNet不同的是,我们用1*1的reduction 层 和一个 3*3的卷积层取代了inception 模块。 网络的整体结构如下所示:

图3 YOLO 网络架构图

2.2 训练

  在ImageNet 1000-class 的竞赛数据上,我们预训练网络的卷积层。预训练过程中,我们用到了上图网络结构中的前20个卷积层,以及后面接了一个average 池化层和全联接层。我们在训练以及推断过程中使用了Darknet框架。

  然后,我们把得到的模型用来检测目标。Ren et al. 的研究结果显示,为预训练网络增加卷积层和全联接层能够提高系统性能。因此我们在之前的网络架构上,增加了四个卷积层和两个参数随机初始化的全联接层,检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从224×224提高到448×448。

  我们的最后一层预测出类别可能性以及bounding box的坐标。我们把bounding box的坐标归一化,我们将边界框x和y坐标参数化为特定网格单元格位置的偏移量,使它们也位于0到1之间。

  在最后一层,我们使用了线性整流函数,其余层均适用渗透线性整流函数。在输出层,考虑到 sum-squared error 的缺点,在原有sum-squared error 的基础上,增加了边界框坐标预测的损失,并减少对不包含对象的框的confidence预测的损失。总的损失函数如下所示:

表示,目标是否出现在格子 i 中。

表示在格子i中的第j个 Bounding box 的预测值对哪个预测负责。

  我们在PASCAL VOC 2007 和 2012 数据集上,训练了135 epochs,训练过程中 batch size 为64,momentum 为0.9, decay 为0.00005。

  学习率的变化如下,第一个epoch 徐熙率从 10-3 缓慢增长到10-2, 然后我们继续以10-2的学习率知道第75个epoch,然后以10-3学习率持续了30个epoch,最后以10-4学习率持续了最后30个epoch。

  为了避免过拟合,我们使用了dropout 和 extensive data augmentation技术。

2.3 推断过程

  和训练过程类似,推断过程也只需要一个网络。在PASCAL VOC 数据集上,我们的网络能够在每张图上预测出98个bounding box, 并给出每个bounding box的属于某一类的可能性。而且跟其他基于分类的目标检测模型对比啊,YOLO的测试时间非常短。

实验测试

3.1 与其他的实时检测系统对别

表1 PASCAL VOC 2007 数据集上,不同实时检测系统的性能对比

3.2 将YOLO和R-CNN组合

表2 PASCAL VOC 2007 数据集上,将R-CNN 和YOLO结合之后的性能对比

模型分析

4.1 优点

  • 检测速度快
  • 只使用单个的卷积神经网络

4.2 缺点

    • 由于每个网格单元只预测两个Bounding Box并且只能有一个类别,这限制了我们的模型对相互靠近的物体的检测效果。
    • 由于我们的模型学习从数据中预测边界框,因此很难将其推广到新的或不寻常的宽高比的其他对象。 我们的模型也使用相对粗糙的特征来预测边界框,因为我们的架构从输入图像有多个下采样层。
    • 在一个小的Box中产生的小的误差通常比在一个大的Box中产生的小误差重要的多。然而我们的损失函数却以同样的方式处理这样的误差。我们的误差来源主要是定位误差。

论文 | YOLO(You Only Look Once)目标检测的更多相关文章

  1. CVPR 2019 论文解读 | 小样本域适应的目标检测

    引文 ​ 最近笔者也在寻找目标检测的其他方向,一般可以继续挖掘的方向是从目标检测的数据入手,困难样本的目标检测,如检测物体被遮挡,极小人脸检测,亦或者数据样本不足的算法.这里笔者介绍一篇小样本(few ...

  2. YOLO: 3 步实时目标检测安装运行教程 [你看那条狗,好像一条狗!]

    封面图是作者运行图,我在 ubuntu 环境下只有文字预测结果. Detection Using A Pre-Trained Model 使用训练好的模型来检测物体 运行一下命令来下载和编译模型 gi ...

  3. 第三十五节,目标检测之YOLO算法详解

    Redmon, J., Divvala, S., Girshick, R., Farhadi, A.: You only look once: Unified, real-time object de ...

  4. 目标检测:YOLO(v1 to v3)——学习笔记

    前段时间看了YOLO的论文,打算用YOLO模型做一个迁移学习,看看能不能用于项目中去.但在实践过程中感觉到对于YOLO的一些细节和技巧还是没有很好的理解,现学习其他人的博客总结(所有参考连接都附于最后 ...

  5. 经典论文系列 | 目标检测--CornerNet & 又名 anchor boxes的缺陷

    ​ 前言: 目标检测的预测框经过了滑动窗口.selective search.RPN.anchor based等一系列生成方法的发展,到18年开始,开始流行anchor free系列,CornerNe ...

  6. 基于候选区域的深度学习目标检测算法R-CNN,Fast R-CNN,Faster R-CNN

    参考文献 [1]Rich feature hierarchies for accurate object detection and semantic segmentation [2]Fast R-C ...

  7. 深度学习笔记之目标检测算法系列(包括RCNN、Fast RCNN、Faster RCNN和SSD)

    不多说,直接上干货! 本文一系列目标检测算法:RCNN, Fast RCNN, Faster RCNN代表当下目标检测的前沿水平,在github都给出了基于Caffe的源码. •   RCNN RCN ...

  8. Mask-RCNN:教你如何制作自己的数据集进行像素级的目标检测

    概述 Mask-RCNN,是一个处于像素级别的目标检测手段.目标检测的发展主要历程大概是:RCNN,Fast-RCNN,Fster-RCNN,Darknet,YOLO,YOLOv2,YOLO3(参考目 ...

  9. 如何使用 pytorch 实现 SSD 目标检测算法

    前言 SSD 的全称是 Single Shot MultiBox Detector,它和 YOLO 一样,是 One-Stage 目标检测算法中的一种.由于是单阶段的算法,不需要产生所谓的候选区域,所 ...

  10. 目标检测算法之YOLOv1与v2

    YOLO:You Only Look Once(只需看一眼) 基于深度学习方法的一个特点就是实现端到端的检测,相对于其他目标检测与识别方法(如Fast R-CNN)将目标识别任务分成目标区域预测和类别 ...

随机推荐

  1. okhttp请求文件异常解决方法

    微信借口中获取素材的接口返回只是一个缓存的文件流 InputStream, 接口中请求永久图片素材返回的是 InputStream; 接口项目获取到 InputStream 可以直接通过文件流写到文件 ...

  2. VSTO:使用C#开发Excel、Word【16】

    使用工作表对象Worksheet对象表示Excel工作簿中的工作表.Worksheet有一个Name属性,返回工作表的名称(例如“Sheet1”). 工作表管理Worksheet对象具有一个Index ...

  3. leetcode python 009

    ##懒得自己做 ##  验证回文数字int0=63435435print(int(str(int0)[::-1])==int)

  4. ubuntu 16.04 编译安装 trl8291cu系列 无线网卡驱动

    1 先 下载git包 和相关编译工具 sudo apt-get update sudo apt-get install git linux-headers-generic build-essentia ...

  5. vue 关于solt得用法

    solt 第一种用法 父组件 <templateSolt></templateSolt> <templateSolt> <p>slot分发了内容< ...

  6. Delphi 10.3.1 Secure File Sharing解决应用间文件共享

    Delphi 10.3.1 为Android项目提供了Secure File Sharing选择项,默认是False.这一项是设置什么呢? 原来,Android 7及以后的版本,为了加强OS的安全性, ...

  7. React Native backgroundColor 的颜色值

    React Native 的 css 跟 web开发中css还是很相似的,其中 backgroundColor 支持的颜色值与 css 一致,为方便查找写在这里. 其他样式可以参考 CSS 样式网站 ...

  8. Springmvc 简单入门1

    导入jar包 下载路径: 在web.xml里面配置 <servlet> <servlet-name>Springmvc</servlet-name> <!-- ...

  9. servlet编程操作

    所谓servlet指:服务器处理来自Web浏览器或其他客户端的HTTP请求的服务器程序.客户端向服务器发送Http请求,经Tomcat封装处理转给Servlet容器,Servlet容器在把请求或回应交 ...

  10. C程序第三次作业

    6-1 输出月份英文名 PTA提交列表: 1.设计思路 (1)主要描述题目算法 第一步:将十二个月的名称分别赋值给一维数组指针,定义用于返回的数据类型. 第二步:遍历数组,满足若n在1-12范围则将m ...