论文题目是《You Only Look Once: Unified, Real-Time Object Detection》


前言

在之前的目标检测问题中,为了检测一个目标,要在一个测试图像上的不同位置和不同大小的边界框中使用该目标的分类器,判断边界框中是否有该目标,这种方法其实将目标检测当成一种分类问题。如DPM在一整个图像上使用一个均匀滑动的窗口,用分类器在每次滑动的窗口中判断是否有要检测的目标。在R-CNN中做出了一些改进,即用候选区域的方法生成最有可能包含目标的候选框,然后对这些候选框进行分类处理。本文将目标检测看成是回归问题,即输出的是分离的边界框以及每个边界框属于某个类的概率。在本文所使用的方法中,只使用一个单一的神经网络就可以从图像中预测边界框,以及边界框属于某个类的概率。

用YOLO处理图像非常简单,如下图:

首先,将输入图像的大小调整为448 × 448;
然后,用一个单一神经网络同时预测多个边界框和这些边界框属于每一类的概率;
最后,通过模型的置信度来threshold检测结果。

YOLO与传统的目标检测算法相比有几个优点
1. YOLO非常快。由于将目标检测视为回归问题,只要在测试时简单的在一个新图像上运行神经网络,就可以预测检测目标。在不经过批处理的情况下,基础网络可以在Titan X上到达每秒45帧的效率,而一个经过改进的版本甚至超过每秒150帧。这意味着在处理实时的影像时,延迟将低于25微秒。更重要的是,与其他实时检测系统相比,YOLO的mAP(mean average precision)是它们的两倍。
2.YOLO在预测时会根据图像进行全局推理。 与滑动窗口和候选区域不同,YOLO在训练和测试时“看到”了一整个图像,因此它可以对类别和其外观的上下文信息进行隐式编码。例如,如果要检测图像中的汽车,通常在汽车旁边的对象(如人、道路或其他汽车)可能会为目标检测提供有用的线索。在Fast R-CNN中,经常会将背景误认为是某个目标,这就是由于Fast R-CNN“看不到”整个图像的上下文信息。YOLO产生的背景错误比Fast R-CNN少一半。
3.YOLO学到的目标表示更具有泛化性。在一般自然的图像上训练后,在艺术作品上来测试,YOLO比DPM和R-CNN的表现都要好。当将YOLO应用于新领域或者输入一些乱七八糟的内容,YOLO也不会崩。

那么YOLO有什么缺点呢? YOLO与其他检测系统相比,在精度上略有不足。它虽然能在图像中快速地识别目标,但它对于一些目标的精确定位做的不是太好,尤其是一些比较小的目标。


YOLO的实现

将输入图像划分为S × S的网格,如果一个目标的中心点落入一个网格单元中,那么该网格单元负责检测该目标。每个网格单元要预测B个边界框(bounding box)以及每个边界框的置信度(confidence score),置信度包括两个方面,一是边界框包含目标的可能性大小,二是边界框的准确度。置信度被定义为:

第一项表示边界框中是否包含有目标,有为1,没有为0。第二项表示边界框与真实框(ground truth box)的IoU(intersection over union)。也就是说,当边界框中包含目标时,置信度就表示边界框与真实框的IoU。每个边界框包含5个值:x,y,w,h和置信度。(x,y)表示边界框的中心点相对于对应网格左上角位置的偏移值,w和h分别表示边界框相对于整个图像的宽和高。这样这四个值的大小应该在[0,1]区间内。
每个网格单元也要预测C个类别条件概率(conditional calss probabilities):

这些概率表示网格单元中的目标属于某一类的概率。对于每个网格单元来说,只预测一组类别(C个)的概率,无论有多少个边界框(B个)。
也就是说,置信度属于边界框,而类别条件概率属于网格单元

在测试时将类别条件概率与边界框的置信度相乘:

上式表示每个边界框特定于某个类的置信度。该置信度包含两个方面,一是边界框中的目标属于某类的可能性大小,二是边界框匹配目标的好坏。

上图说明了YOLO实现的大致流程,首先将图像划分为S×S个网格,每个网格单元包含B个边界框,而每个边界框包含x,y,w,h和置信度共5个值。对于每个网格单元,计算C个类别条件概率,最后完成检测。在这一过程中,最后的预测值为
S × S × (B ∗ 5 +C) 的张量。
论文在PASCAL VOC上进行实验,S=7,B=2,PASCAL VOC有20个类别标记,因此C=20。最后预测值为7 × 7 × 30的张量。


YOLO的网络结构设计

整个网络由24个卷积层和其后的两个全连接层组成,卷积层负责从图像中提取特征,全连接层预测输出的概率和坐标。该网络结构受到了GooLeNet模型的启发,但和它不同的是,YOLO没有用GooLeNet中的inception modules,而是使用了1×1的卷积层,后面跟着3×3的卷积层。整个网络结构如下图,可以看到交替的1×1卷积层减少了前一层的特征空间。最后输出的预测值为7 × 7 × 30的张量。

作者也训练了一个更快的Fast YOLO,它只有9个卷积层,并且每个卷积层中有更少的滤波器。除了网络大小不同,YOLO和Fast YOLO在训练和测试时的参数都是一样的。


训练过程

1.预训练

在所有训练和推断过程中使用的是Darknet框架。首先在ImageNet上进行预训练,ImageNet是一个由1000个类别的数据集。在预训练时,用了上图中的前20个卷积层,其后有一个平均池化层和一个全连接层,输入图像的分辨率为224 × 224。

2.检测

在预训练之后,要让模型开始执行检测功能。根据Ren等人的结论,在预训练网络中添加卷积层和全连接层可以提高性能,因此作者增加了四个卷积层和两个全连接层,它们都是以随机权重初始化的。由于检测时需要更加精细的图像,因此输入图像的分辨率为448 × 448,即是预训练时的两倍。
最后一层输出的是类别概率和边界框的坐标。用图像的宽度和高度对边界框的wh进行归一化,使它们在[0,1]区间内。将边界框的xy坐标参数化为特定网格单元位置的偏移值,因此它们也在[0,1]区间内。
最后一层用一个线性激活函数,所有的其它层使用如下的leakey ReLU激活函数

3.损失函数

因为论文将目标检测看成是回归问题,因此在训练时,对模型输出的平方和误差进行优化,也就是均方差损失函数。但是这种方法有一个不足之处——使用平方和误差会使定位误差和分类误差等同。并且有些图像的许多网格单元中不包含任何目标,这些网格单元的置信度将被置为0,会超过其他包含目标的网格单元的梯度。这会导致模型的不稳定以及训练的过早发散。
为了解决这个问题,要采用不同的权重值。对于定位误差,也就是边界框坐标预测误差,使用 λ c o o r d λ_{coord} λcoord​=5。对于不包含目标的边界框的置信度误差,使用 λ n o o b j λ_{noobj} λnoobj​=0.5。
另外,平方和误差同等对待大小不同的边界框,但是一些小的偏差给较小边界框带来的影响要大于较大边界框,因此将边界框宽度与高度的的预测改为对其平方根的预测
YOLO会在每个网格单元中预测多个边界框,但在训练时,每个目标只用一个边界框来预测,因此选择与真实框有最大IoU的边界框来预测网格单元中的目标。这样做可以让边界框预测不同大小、不同长宽比、不同类别的目标,提高性能。
损失函数如下:

其中 1 i o b j 1_{i}^{obj} 1iobj​表示网格单元i中是否有目标; 1 i j o b j 1_{ij}^{obj} 1ijobj​表示如果网格单元i中有目标,那么由第j个边界框预测该目标。
可以看到,只有当目标中心点落入网格单元中,才计算该目标的类别误差,也就是上式的最后一项;只有当网格单元i中的第j个边界框与目标的ground truth box的IoU最大时,即由第j个边界框负责预测该目标,才计算边界框的坐标误差,也就是上式的第一项和第二项。其中第一项是边界框中心点坐标的误差,第二项是边界框宽度与高度的误差。第三项是包含目标的边界框的置信度误差,第四项是不包含目标的边界框的置信度误差

下图来源于https://blog.csdn.net/shuiyixin/article/details/82533849

4.训练过程的一些细节

训练使用的有效数据集来自PASCAL VOC 2007和2012。训练大致经过135个轮次。在第一个轮次中,缓慢地将学习率从 1 0 − 3 10^{-3} 10−3提升为 1 0 − 2 10^{-2} 10−2。如果刚开始的学习率很高,那么梯度会不稳定,从而导致模型发散。然后继续以 1 0 − 2 10^{-2} 10−2的学习率训练75个轮次,然后以 1 0 − 3 10^{-3} 10−3的学习率训练30个轮次,最后以 1 0 − 4 10^{-4} 10−4的学习率训练30个轮次。
为了避免过拟合,使用dropout和大范围数据增强的方法。对于dropout,在第一个全连接层之后用0.5的丢弃率避免层之间的相互影响。对于数据增强,对高达20%原始的图像进行引入随机缩放和平移;在HSV颜色空间中,还将图像的曝光和饱和度随机调整至1.5倍。
一些较大的目标,或者一些位于许多网格单元的交界处的目标,它的中心点可能会落入多个网格单元中,因此可能会有多个边界框预测该目标。在检测时可以用NMS(non-maximal suppression)来去除重复的边界框。具体来说就是,选择预测该目标的置信度最高的那个边界框,计算它与另一个边界框的IoU值,如果该值大于一定阈值,就剔除另一个边界框。对其余预测该目标的边界框重复此过程。


YOLO的局限性

1.当两个目标离得很近时检测效果很不好,因为每个网格单元只有两个边界框并且它们属于同一类。当有一组较小的目标聚集在一起时,检测效果也不是很好。
2.对于具有新的或不同寻常的宽高比或配置的对象的泛化能力较弱。
3.在一个较小边界框中的小误差对IoU带来的影响,比较大边界框中的小误差带来的影响要大得多,但损失函数同等对待这两种误差,因此定位误差是主要的误差来源。

YOLO算法(论文部分翻译+一些总结)相关推荐

  1. YOLO 9000论文翻译 | YOLO9000:Better, Faster, Stronger

    文章已迁至:http://www.machunjie.com/translate/27.html 如需交流,请移步新地址,谢谢! YOLO 9000论文翻译 | YOLO9000:Better, Fa ...

  2. yolo v1论文翻译-整理

    论文原文:https://arxiv.org/pdf/1506.02640.pdf Tensorflow版本yolo v1:GitHub - gliese581gg/YOLO_tensorflow: ...

  3. 论文学习:基于集成YOLO算法的蝴蝶检测与分类

    0.论文名称与地址连接 Butterfly detection and classification based on integrated YOLO algorithm 论文地址:xxx.itp.a ...

  4. 深度学习目标检测论文1(YOLOv1论文的翻译)

    前言 因为一些项目需要使用到yolov3,为了能深刻的理解yolov3算法,因而翻译了yolo系列论文. You Only Look Once:Unified, Real-Time Object De ...

  5. yolov1官方论文全文翻译[附个人理解]

    前言 本博文是对yolov1的官方文献进行的翻译.并且在翻译的学习过程中加入了自己的理解.本博文主要用于自己个人学习的总结.对于借鉴的想过博文以及大佬的文献将会在博文的最后进行声明.现在开始!!! 一 ...

  6. 目标检测 /yolo算法原理的详解

    前言 谈到计算机视觉时,我们都会联想到图像分类,图像分类是计算机视觉最基本的任务之一,在图像分类的基础上,我们还有更复杂的任务,比如目标检测,物体定位,图像分割等,本文主要讲目标检测,目标检测是分类与 ...

  7. Raft 一致性算法论文译文

    本篇博客为著名的 RAFT 一致性算法论文的中文翻译,论文名为<In search of an Understandable Consensus Algorithm (Extended Vers ...

  8. yolo算法的优缺点分析_YOLO算法详细解析(一)

    目标检测和目标分类 图像识别算法是计算机视觉的基础算法,例如VGG,GoogLeNet,ResNet等,这类算法主要是判断图片中目标的种类. 目标检测算法和图像识别算法类似,但是目标检测算法不仅要识别 ...

  9. 论文中文翻译——Vulnerability Dataset Construction Methods Applied To Vulnerability Detection A Survey

    本论文相关内容 论文下载地址--Web Of Science 论文中文翻译--Vulnerability Dataset Construction Methods Applied To Vulnera ...

  10. Raft 一致性算法论文

    本篇博客为著名的 RAFT 一致性算法论文的中文翻译,论文名为<In search of an Understandable Consensus Algorithm (Extended Vers ...

最新文章

  1. vue transition动画
  2. Git客户端图文详解如何安装配置GitHub操作流程攻略
  3. JQuery:多张图片的淡入淡出效果。
  4. nodejs 快速搭建接口
  5. java jdbc修改_java----jdbc(数据库的添加,删除,修改,更新)
  6. java获取泛型的值_java 反射之获取泛型对象的所有字段与对应的值(包括父类的)...
  7. mysql innodb事务中 出现_MySql InnoDB事务死锁问题
  8. python综合实验报告_Python程序设计实验报告五:综合运用三种基本结构进行程序设计(综合性实验)...
  9. CentOS系统下安装配置ftp服务
  10. 背水一战 Windows 10 (60) - 控件(媒体类): Pointer 涂鸦板, InkCanvas 涂鸦板
  11. 数据结构与算法必知基础知识
  12. 中国房价会在四季度下跌
  13. 导出excel文件对空值用“--“占位处理
  14. Wellcome Sanger研究所选择Arima Genomics作为HiC技术合作伙伴; 公司宣布针对高覆盖HiC的抢先体验活动
  15. leetcode No5 最长回文子串
  16. c语言中,偷机取巧,输出超市购物小票的票头
  17. 《对比Excel,轻松学习Python数据分析》读书笔记------数据运算
  18. 基于深度信念网络的硬件模拟器研究(Matlab代码实现)
  19. 压缩解压工具gzip、pigz、gtz大比较
  20. rtu中所采用的计算机,什么是RTU,有哪些作用?

热门文章

  1. 小米笔试题 依据父子关系建树
  2. 学习Opencv+Python之银行卡卡号识别
  3. 红榜 | 第十三期京东科技培训认证考试
  4. getattr使用方法
  5. 李昕:IPFS与HTTP很长一段时间将共存
  6. 银行数字化转型导师坚鹏:银行业同业竞争策略分析
  7. vuex配合本地Cookies数据持久化
  8. 两个人玩抛硬币的游戏,谁先抛到正面就获胜。那么先抛的人获胜概率为()。两种思路
  9. python烟花表白引大火_代码实现女孩子表白烟花效果~让你快速撩妹!
  10. 各位看官,来看下建站基本流程吧!