参考文献: Redmon J , Divvala S , Girshick R , et al. You Only Look Once: Unified, Real-Time Object Detection[J]. 2015.
项目主页: http://pjreddie.com/darknet/yolo/
包含理解!

You Only Look Once

Redmon J , Divvala S , Girshick R , et al.

1 Introduction

现在的 detection systems 将物体检测问题,最后会转变成一个分类问题。在检测中,detection systems 采用一个 classifier 去评估一张图像中,各个位置一定区域的 window 或 bounding box 内,是否包含一个物体?包含了哪种物体?(理解:RCNN的基本思想)

一些 detection systems,如 Deformable Parts Models(DPM),采用的是 sliding window 的方式去检测。

最近的 R-CNN、Fast R-CNN 则采用的是 region proposals 的方法,先生成一些可能包含待检测物体的 potential bounding box,再通过一个 classifier 去判断每个 bounding box 里是否包含有物体,以及物体所属类别的 probability 或者 confidence。这种方法的 pipeline 需要经过好几个独立的部分(理解:ROI生成+RNN+(SVM+边界框回归),至少两阶段),所以检测速度很慢,也难以去优化,因为每个独立的部分都需要单独训练。

本文将 object detection 的框架设计为一个 regression problem。直接从图像像素到 bounding box 以及 probabilities。这个 YOLO 系统如图看了一眼图像就能 predict 是否存在物体,他们在哪个位置,所以叫 You Only Look Once。

YOLO 的 idea 十分简单,如 Figure 1:
将图像输入单独的一个 CNN 网络,就会 predict 出 bounding boxes,以及这些 bounding boxes 所属类别的概率。YOLO 用一整幅图像来训练,同时可以直接优化 detection performance。

这样的统一的架构,对比之前如 R-CNN、Fast R-CNN 的 pipeline(区域建议ROI),有以下几点好处:

a. YOLO 检测系统非常非常的快。受益于将 detection 架构设计成一个 regression problem,以及简单的 pipeline。在 Titan X 上,不需要经过批处理,标准版本的 YOLO 系统可以每秒处理 45 张图像;YOLO 的极速版本可以处理 150 帧图像。这就意味着 YOLO 可以以小于 25 毫秒延迟的处理速度,实时地处理视频。同时,YOLO 实时检测的mean Average Precision(mAP,平均精度)是其他实时检测系统的2倍。

b. YOLO 在做 predict 的时候,YOLO 使用的是全局图像。与 sliding window 和 region proposals 这类方法不同,YOLO 一次“看”一整张图像,所以它可以将物体的整体(contextual)的 class information 以及 appearance information 进行 encoding。目前最快最好的Fast R-CNN ,较容易误将图像中的 background patches 看成是物体,因为它看的范围比较小。YOLO 的 background errors 比 Fast R-CNN 少一半多。

c. YOLO 学到物体更泛化的特征表示。当在自然场景图像上训练 YOLO,再在 artwork 图像上去测试 YOLO 时,YOLO 的表现优于 DPM、R-CNN 。

2 Unified Detection(统一检测)

YOLO 检测系统首先将输入图像分成S*S个 grid(小格),如果一个物体的中心掉落在一个 grid cell 内,那么这个 grid cell 就负责检测这个物体。

每个 grid cell 预测B个 bounding boxes,每个 bounding box 包含了5个predictions:Center_x,Center_y表示bounding box 的中心点坐标;width,height表示bounding box宽度高度;confidence表示置信度, confidence = P(object)* IOU,其中, P(object)表示包含目标的概率,IoU 值(intersection over union, IOU=交集部分面积/并集部分面积,2个box完全重合时IOU=1,不相交时IOU=0)。

理解:为什么置信度是包含目标的概率乘以IOU,损失函数中计算定位损失时不相当于衡量了IOU,在损失函数计算分类损失时只用是否包含目标的概率不行吗?答:置信度衡量了是否包含目标的概率和与真实框之间的重叠度,如果不考虑IOU,在做nms时,容易把概率大的框保留下来,即使这个框包含真实目标的IOU并不大(举例,一个框概率0.998,IOU为0.8,;另一个框概率0.999,IOU为0.5,容易保留第二个框)。此外,车牌检测中也计算了有无车牌的概率,是否要乘以IOU?答:车牌很多倾斜,IOU度量不准确,可用其他指标度量。

每个 grid cell 预测C个条件类别概率P(classi∣object)P(class_i|object)P(classi​∣object),指grid cell包含物体条件下,物体出现的概率。不管 grid cell 包含了多少bounding boxes,每个 grid cell 只 predict 每个类别的 conditional probabilities。

在测试阶段,将每个 grid cell 的条件类别概率与每个 bounding box 的 confidence 相乘得到每个bounding box的具体类别的 confidence score,P(classi∣object)∗P(object)∗IOU=P(classi)∗IOUP(class_i|object)*P(object)* IOU=P(class_i)* IOUP(classi​∣object)∗P(object)∗IOU=P(classi​)∗IOU,以此把bounding box 中预测的 class 的 probability,以及 bounding box 与 object 的契合度,都进行了 encoding。

综上,网络将一张图像分为S * S个grid cells,每一个 grid cell 预测B个 boxes(每个 box 是 5个数值),检测C个类别,最后输出的tensor为S * S*(B*5+C)。

3 Network Design(网络设计)

YOLO 仍是 CNN 的经典形式,开始是 convolutional layers 提取特征,再是 fully connected layers 进行 predict 结果:probabilities 以及 coordinates。

YOLO 的 CNN 结构取自两篇论文:GoogLeNet、Network in Network. YOLO 有24个卷积层,随后就是2个全连接层。不像 GoogLeNet 中使用的 inception modules, 而是使用1x1卷积层(此处1x1卷积层的存在是为了跨通道信息整合)+3x3卷积层简单替代。如下图 Figure 3 所示:

可以看到,YOLO以448 * 448 * 3为固定输入,输出的 Tensor 为7 * 7 * 30, 对应了 7*7个 grid cells,30 对应了预测值。其中,8 维是回归的bounding box坐标,2 维是 bounding box 的 confidence,20 维是检测类别。

论文中还给出一个更轻快的检测网络fast YOLO,它只有9个卷积层和2个全连接层。使用titan x GPU,fast YOLO可以达到155fps的检测速度,但是mAP值也从YOLO的63.4%降到了52.7%,但却仍然远高于以往的实时物体检测方法(DPM)的mAP值。(mAp60%+,这大概是YOLO没有大力推广的原因。。。)

4 Training

YOLO在ImageNet 1000-class 的分类任务数据集上进行pretraining。预训练的网络是Figure 3中网络的前 20 层卷积层,加上一个average-pooling layer,最后是一个 fully connected layer。此预训练的网络大约训练了一个星期,在 ImageNet 2012 的 validation dataset 上的 top-5 精度为88%,本文的 training 以及 inference 都是用 Darknet 卷积网络框架完成的。

把预训练的model用于detection,Ren et al., Object Detection Networks on Convolutional Feature Maps 指出了在预训练的model上增加convolution layer以及connected layer可以增加model的performance。因此,在预训练的 model 上,本文增加了4个 convolutional layers 以及2个 connected layers,这新加的层的参数是随机初始化的。因为要用于detection,本文在detection的fine-grained 阶段,将图像的输入分辨率从224*224调整至448 * 448。

网络最后输出的为 class probabilities 以及 bounding box coordinates。但在输出时,根据图像的 width、height 将 bounding box 的 width、height 进行归一化,归一化到 0~1 的区间。将 bounding box 中的坐标(x,y)通过grid cells 的offset归一化到 0~1 之间。

模型的最后一层,本文使用一个线性激活函数,其余的层则使用的是 leaky rectified linear activation:

本文使用的是 sum-squared error 来作为优化目标。虽然 sum-squared error 较容易去优化,但是对于本问题,直接使用 sum-squared error 却不是那么合适。因为将 localization error 以及 classification error 在优化求解中,相等的去衡量优化,本身就不合理。另外,每一张图像中,很多 grid cells 并没不包含物体,使得这些 cells 的 confidence 置为 0,这些不包含物体的 grid cells 的梯度更新,将会以压倒性的优势,覆盖掉包含物体的 grid cells 进行的梯度更新(理解:样本的严重不均衡)。这些问题会使得模型不稳定,甚至造成网络的发散。

为了避免上述的问题,本文将 localization error 以及 classification error 的 loss 重新用权重衡量。以平衡上述的失衡问题。简单的说,就是增加 bounding box coordinate 的 loss,减少不包含物体 grid cells 的 confidence 的 loss。通过设置两个参数:λcoord = 5 和 λnoobj =0 .5。

Sum-squared error loss 中还将 large box 与 small box 的 loss 同等对待。因为相比较于large box 与 groundtruth 的偏离,small box 偏离一点,结果差别就很大,而large box偏离大一点,对结果的影响较小。为了解决这个问题,用了一个很巧妙的 trick,即最后并不是直接输出 bounding box 的 width、height,而是 width、height 的平方根。

如下图所示,当 bounding box 的 width、height 越小时,发生偏移后,其反应在 Y 轴上的变化越大,这样就正确反映了 large box 与 small box 对于偏移的敏感性不同。这图哪儿说明啦?

在 YOLO 中,每个 grid cell 预测多个 bounding box,但在网络模型的训练中,每一个物体,只想要一个 bounding box predictor 来负责预测。因此, 当前哪一个 predictor 预测的 prediction 与 groundtruth 的 IoU 最大(正例) ,这个 predictor 就负责 predict object。这会使得每个 predictor 可以专门的负责特定的物体检测。随着训练的进行,每一个 predictor 对特定的物体尺寸,长宽比,物体的类别的预测会越来越好。

训练时,需要优化的目标函数(loss function)如下:


训练中,总共进行了 135 轮 epoches,训练、验证集来自 PASCAL 2012、2007。当在 VOC 2012 数据集上测试时,训练集包括了 VOC 2007 的测试集。训练中,bacthsize 为 64,momentum 为 0.9,decay 为 0.0005.

Learning rate 的设置:
(1)在第一轮 epoch 中,learning rate逐渐从10e-3增加到10e-2。如果训练时从一个较大的 learning rate 开始,通常因为不稳定的梯度,而使得模型发散。
(2)之后,保持 learning rate 为10e-2直到 epoch = 75;
(3)再接下的 30 轮 epoch,learning rate 为10e-3 ;
(4)最后 30 轮 epoch,learning rate 为 10e-4。

在训练中,为了避免 overfitting,使用了 dropout 技术,在第一层全连接层后面增加了一个 dropout layer,随机置零的 。为了防止 overfitting,也使用了 data augmentation 技术。

5 Inference(推理)

在训练好 YOLO 网络模型后,在 PASCAL VOC 数据集上进行 inference,每一张图像得到 98 个 bounding boxes,以及每个 bounding box 的所属类别概率。

当图像中的物体较大,或者处于 grid cells 边界的物体,可能在多个 cells 中被定位出来。可以用Non-Maximal Suppression(NMS,非极大值抑制,抑制不是极大值的元素,保留最好的) 进行去除重复检测的物体,可以使最终的 mAP 提高。

6 优缺点

优点:
a. YOLO 结构十分的快,标准的 YOLO 版本每秒可以实时地处理 45 帧图像。一个较小版本:Fast YOLO,可以每秒处理 155 帧图像,它的 mAP(mean Average Precision,平均精度)=依然可以达到其他实时检测算法的2倍。
b. YOLO 有更少的 false-positive,文章这里提到了一个词:background errors,背景误差。这里所谓的背景误差即是指 False Positive,误检,把背景当成了目标。
c. YOLO 可以学习到物体的更加泛化的特征,在将 YOLO 用到其他领域的图像时(如 artwork 的图像上),其检测效果要优于 DPM、R-CNN=这类方法。

缺点:
a. 相比较于其他的 state-of-art detection systems,YOLO 的定位更容易出错,这里的定位出错,即是指 coordinate errors。
b. 不擅长特别密集的场景,因为YOLO把图像分成了小格,每个 grid cell 中只能预测两个 boxes,以及一个类别。这种太强的空间约束,限制了 YOLO 对于相邻物体的检测能力,一旦相邻的物体数量过多,YOLO 就检测不好了。如对于一群鸟儿,这种相邻数量很多,而且又太小的物体,YOLO 难以进行很好的检测。
c. 对于图像中,同一类物体出现新的、不常见的长宽比时,YOLO 的泛化能力较弱。
d. 最后,loss functions 中对于 small bounding boxes,以及 large bounding boxes 的误差,均等对待。尽管正如前面提到的,大尺寸 bounding box 的 error 与小尺寸 bounding box 的 error,其影响是不同的。即使用了平方根的技巧优化了这个问题,但是这个问题还得得到更好的解决。

目标检测:YOLO You Only Look Once相关推荐

  1. yolov3网络结构图_目标检测——YOLO V3简介及代码注释(附github代码——已跑通)...

    GitHub: liuyuemaicha/PyTorch-YOLOv3​github.com 注:该代码fork自eriklindernoren/PyTorch-YOLOv3,该代码相比master分 ...

  2. 目标检测YOLO系列------YOLO简介

    目标检测YOLO系列------YOLO简介 1.为什么会出现YOLO算法 2.YOLO算法会逐渐成为目标检测的主流吗     YOLO以及各种变体已经广泛应用于目标检测算法所涉及到的方方面面,为了梳 ...

  3. 目标检测—YOLO不难学,你只是不会方法!

    目标检测是图像处理和计算机视觉领域中的一个经典课题,在交通监控.图像检索.人机交互等方面有着广泛的应用.随着研究发现,目标检测领域应用深度学习,可以有效的提高检测效果和性能.于是,深度学习在目标检测领 ...

  4. 重温目标检测--YOLO v3

    YOLOv3: An Incremental Improvement https://pjreddie.com/yolo/ 本文是对 YOLO系列的进一步完善. 先上和其他检测算法的 COCO 对比结 ...

  5. 重温目标检测--YOLO v2 -- YOLO9000

    YOLO9000:Better, Faster, Stronger CVPR 2017, Best Paper Honorable Mention https://pjreddie.com/darkn ...

  6. 重温目标检测--YOLO v1

    You Only Look Once:Unified, Real-Time Object Detection CVPR2016 https://pjreddie.com/darknet/yolo/ Y ...

  7. 目标检测- YOLO v1--You Only Look Once

    You Only Look Once: Unified, Real-Time Object Detection 项目主页: http://pjreddie.com/darknet/yolov1/ 考虑 ...

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

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

  9. Tensorflow框架:目标检测Yolo思想

    Yolo-You Only Look Once YOLO算法采用一个单独的CNN模型实现end-to-end的目标检测: Resize成448448,图片分割得到77网格(cell) CNN提取特征和 ...

  10. [目标检测]YOLO原理

    1 YOLO 创新点: 端到端训练及推断 + 改革区域建议框式目标检测框架 + 实时目标检测 1.1 创新点 (1) 改革了区域建议框式检测框架: RCNN系列均需要生成建议框,在建议框上进行分类与回 ...

最新文章

  1. 决策树剪枝的方法与必要性
  2. html 图片自动切换插件,jquery图片切换插件
  3. C语言三种常见排序算法
  4. braintree php 开发,php – 如何为使用Braintree和静态方法调用的端点编写集成测试...
  5. java中怎么使用json数据_JAVA中使用JSON进行数据传递
  6. 西媒盘点:历史不该遗忘的七位女数学家
  7. 人工神经网络方法学习步长_人工神经网络-一种直观的方法第1部分
  8. 单片机c语言曲普两只蝴蝶,51曲谱网_51单片机简谱编码
  9. sqlplus 命令登录 Oracle
  10. 计算机毕业设计的步骤
  11. 服务器漏洞扫描系统的简单搭建
  12. 吴恩达采访人工智能大师实录
  13. Anmle,Factors,andMultiFactorModels
  14. 页面打印表格换页问题
  15. 泛型+IO流+网络编程
  16. 小米笔记本如何开启VT虚拟化
  17. 万物互联,该怎么联?
  18. BZOJ 2039: [2009国家集训队]employ人员雇佣 最小割 二元组建图模型
  19. 2022-ICML-EquiBind: Geometric Deep Learning for Drug Binding Structure Prediction
  20. HTML+CSS 学校信息与网络中心静态网页设计

热门文章

  1. 复盘:C语言中int a[][3]={1,2,3,4,5,6,7,8}什么意思,int a[3][]又是什么意思,结果为10的是
  2. 全球与中国量身定制生产线市场深度研究分析报告
  3. 用计算机弹九八k谱子,拼音输出法(计算机).ppt
  4. 局域网雨云蠕虫病毒的处理
  5. ARBITRAR: User-Guided API Misuse Detection
  6. 图解电影的网站有那些?
  7. draw.io 二次开发(idea2020) 系列(三)
  8. 淘宝API item_search_similar - 搜索相似的商品
  9. 第九周 练习判断闰年和平年
  10. 深入理解多线程(四)—— Moniter的实现原理