YOLO—实时对象检测的新视角

近几年,在深入学习的帮助下, 目标检测领域取得了巨大的进步。对象检测是标识图像中的对象并在其周围绘制边界框的任务, 也就是定位它们。在计算机视觉由于其众多的应用从自动驾驶汽车到安全和跟踪是一个非常重要的问题。

以前的对象检测方法通常是让管道按序分段。这会导致每一段完成的任务和最终目标之间的脱节, 最终的目标是在一个图像的对象周围绘制一个紧密的边界框。一个充分利用在联合的方式中侦测错误的终端框架将是一个更好的解决方案,不仅是为了更好地训练模型, 还要提高检测速度。

这就需要YOLO发挥作用。Varun Agrawal对Statsbot团队讲述了,为什么YOLO比其他方法的对象检测更好的理由。

在图像分类领域,深度学习已被证明是一个强大的工具,机器在这项任务中的表现已经达到人类水平。早期的检测方法利用这一能力将对象检测的问题转化为一个分类, 即识别图像所属的对象类别。

通过两个过程来完成这个方法:

  • 第一阶段涉及产生数以万计的提案。它们只是图像中的特定矩形区域, 也称为边界框, 该系统在图像中被认为是类似对象的东西。边框框提案可能围绕图像中的实际对象,并将它筛选为第二阶段的目标。
  • 在第二阶段,图像分类器将对边界框方案中的子图像进行分类, 分类器会认定它是特定的对象类型还是非特定对象或背景。

尽管这两个过程很精准, 但由于所产生的提案数量庞大, 并且在提案的产生和分类方面缺乏联合优化, 因此存在像效率这样的缺陷。这导致了每个阶段无法真正领会更大的图像,而是孤立自己的小问题,因此也限制了它们的表现。

YOLO是什么

YOLO代表“You Only Look Once”,是一种在2016年由Joseph Redmon和Ali Farhadi在华盛顿大学开发的基于深度学习的对象检测算法。

这系统之所以称之YOLO,它不再进入潜在对象的多个子图像,只进入整个图像的深度学习系统一次。然后, 你会一次性得到所有的边界框以及对象类别分类。这就是YOLO的基本设计决策, 对目标检测任务的一个全新的视角。

YOLO的工作方式是将图像细分为NxN的网格, 或更具体的原始论文上的7×7的网格。每个网格单元 (也称为锚点) 表示一个分类器, 它负责在潜在对象周围生成 k个边界框, 其地面中心位于该网格单元 (在论文中k为 2) 中, 并将其分类为正确的对象。

请注意:边界框不限于网格单元格内,它可以在图像的边界内展开,以容纳它认为它负责检测的对象。这意味着在当前版本的YOLO中,系统生成98大小不等的边界框,以容纳场景中的各种对象。

成绩

对于更密集的对象检测, 用户可以根据需要将K或N设置为更高的数字。但是, 在当前配置下, 我们有一个系统,能够在对象周围输出大量的边界框, 并根据图像的空间布局将它们分类为不同的对象类别之一。

这是在推理时通过图像的单次传递完成的。因此, 联合检测和分类有助于更好地优化学习目标 (损失函数) 和实时性能。

事实上, YOLO的结果很有希望。在挑战Pascal VOC检测挑战数据集时, 当每秒运行45帧时,YOLO成功达到平均精度,或者说mAP为63.4 (最高100)。相比之下,更快的R-CNN VGG 16上mAP达到了 73.2, 但每秒只运行7帧, 效率低了6倍。

在下表中可以看到YOLO与其他检测框架的比较。

如果让YOLO牺牲一些精度, 它可以每秒运行155帧, 但是mAP只有52.7。

因此, YOLO 的主要卖点是它在目标检测的实时检测速度上表现良好。这使得它在诸如机器人、自动驾驶汽车和无人驾驶飞机等系统中的应用非常重要(因为时间足够短在这里很重要)。

YOLOv2框架

最近, 同一组研究人员发布了新的YOLOv2框架, 它利用最近在一个深度学习网络设计中的结果, 去建立一个更高效的网络, 并使用Faster-RCNN的主机框架理念,以减轻学习网络问题。

结果显示这个检测系统表现更好,在Pascal VOC检测数据集上mAP达到了78.6的最佳性能 , 而其他系统中, 如改良版的Faster-RCNN (Faster-RCNN ResNet) 和SSD500, 在同一数据集上mAP只达到了76.4和76.8。

关键的区别在于性能速度。最好的YOLOv2模型的运行速度为40FPS,而Faster-RCNN ResNet则为5个FPS。

SSD500运行速度为45fps,具有76.8(与SSD500相同)mAP的YOLOv2分辨率较低的版本的运行速度为67 FPS。这样我们可以看到YOLOv2的设计选择结果能力有多优秀。

总之,YOLO在实时对象检测上表现出色, 这是资源匮乏的深度学习算法时代的重要中心阵地。随着我们迈向更加自动化的未来, 像YOLO和SSD500这样的系统将迎来巨大的进步, 并实现伟大的AI梦想。

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2017-10-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏c#开发者

jquery easyui datagrid mvc server端分页排序筛选的实现

1自定义一个ModelBinder public class filterRule { public string field { g...

4199
来自专栏张善友的专栏

Using sqlite with .NET

The other day I found that there is a .NET wrapper for sqlite. sqlite is a very ...

2318
来自专栏玩转JavaEE

RestTemplate的逆袭之路,从发送请求到负载均衡

上篇文章我们详细的介绍了RestTemplate发送请求的问题,熟悉Spring的小伙伴可能会发现:RestTemplate不就是Spring提供的一个发送请求...

1.1K4
来自专栏c#开发者

C# : row-clickable GridView and get and set gridview rows using JavaScript

Complete C# code: ---------------- using System; using System.ComponentModel; ...

3006
来自专栏葡萄城控件技术团队

Table-values parameter(TVP)系列之二: 利用DataTable将其作为参数传给SP

一,回顾         上一部分讲述了“在T-SQL中创建和使用TVP”,通过T-SQL建立如下的对象:         1)Tables ...

2069
来自专栏xingoo, 一个梦想做发明家的程序员

windows程序设计-第四章 system1.c

/*---------------------------------------------------- SYSMETS1.C -- System M...

24010
来自专栏积累沉淀

Hive2.0.0操作HBase 1.2.1报错解决

首先看错  org.apache.hive.service.cli.HiveSQLException: Failed to open new session: ...

2369
来自专栏听雨堂

想修改CSS

      下载了一个“通用”的CSS文件,本来想偷懒的,结果发现有问题,就是它用的颜色是变量定义的,无法识别。我又找不到在哪里可以定义。 BODY{     ...

20510
来自专栏谈补锅

记录C#常用的代码片段

using Newtonsoft.Json; using Newtonsoft.Json.Linq;

962
来自专栏C# 编程

C#使用DataSet类、DataTable类、DataRow类、OleDbConnection类、OleDbDataAdapter类编写简单数据库应用

//注意:请使用VS2010打开以下的源代码。 //源代码地址:http://pan.baidu.com/s/1j9WVR using System; usi...

2480

扫码关注云+社区