1. 前言

在前面我们回顾了R-CNN系列,总体来说,先生成候选框,然后对候选框进行剔除,随后对目标进行分类和box回归,进而实现目标检测。
简单说:

  • 生成候选框
  • 候选框分类

总体来说,分了两步,即我们熟悉的two stage

本文开始,我们正式进入one-stage!

YOLO 是 You only look once 几个单词的缩写。

1. 正文

时间: 2015
论文: https://arxiv.org/abs/1506.02640代码: https://github.com/pjreddie/darknet v1好像是C写的

slides: https://docs.google.com/presentation/d/1kAa7NOamBt4calBU9iHgT8a86RRHz9Yz2oh4-GTdX6M/edit#slide=id.g15092aa245_0_430

作者: Joseph Redmon∗ , Santosh Divvala∗†, Ross Girshick¶ , Ali Farhadi∗†
作者单位: University of Washington∗, Allen Institute for AI†, Facebook AI Research¶

1.1 网络结构

目标检测 多模态_ide


通过网络图我们看到,整体就是卷积池化等一些的堆叠,而不是像之前R-CNN那样分好多步,所以速度上自然快了不少。

是一个端到端的网络,所以自然更加优雅!!!

那到底是怎么通过简单的网络实现目标检测,这么一个“复杂的任务”的呢?

1.2 算法流程

1.2.1 核心介绍

将图片分割成S × S大小的格网(grid),每个格网大小是相等的。(具体是怎么分割的呢?其实就是图片输入网络,最后输出的特征图大小为S × S的!!!)

论文中S = 7

目标检测 多模态_计算机视觉_02


一共会有S*S个格子,每个格子预测B个bounding box(就是最后输出物体周围的那个框框,只是这里生成的比较多,后面会剔除),论文中B = 2,即,

每个格子预测两个框框(bounding box)。

怎么确定这个bounding box呢?
中心坐标(x,y)
长宽(h,w)
这四个参数就唯一确定了一个框框(bounding box)
最后还有置信度,就是预测这个框框(bounding box)确信程度。
到这里,我们对一个框框(bounding box)会预测出5个参数为,(x , y , w , h , confidence)


目标检测 多模态_目标检测_03


目标检测 多模态_目标检测_04


目标检测 多模态_计算机视觉_05


目标检测 多模态_目标检测_06


最终会预测7×7×2 = 98个框框,如下图

confidence越高,框框越粗。

目标检测 多模态_目标检测 多模态_07

每个格子不仅要预测框框(bounding box)还需要预测其中的物体类别,使用one-hot编码。如果一共对C种物体进行识别,则最后(B×5 + C)预测值,他们保存在通道方向上。
论文中预测20类,即C = 20。
所以输出: (S,S,B×5 + C)
实际为,(7,7,30),与网络图的最后输出一致(可返回去看前面的网络图)

目标检测 多模态_ide_08

1.2.2 部分细节

a. bounding box

bounding box可以确定物体的位置,它输出四个值,分别为x,y,h,w。
在卷积神经网络中,常用套路是对数据进行归一化(或标准化),让数据落入0-1之间,更有利于训练,这里也不例外。
x,y的值是相对格子左上角而言的,只要让它除以格子长宽即可,具体:

目标检测 多模态_计算机视觉_09

目标检测 多模态_目标检测_10

而,h,w却不能这样,因为bounding box可能会超出我们的格子。
bounding box可能会超出我们的格子边界。
bounding box可能会超出我们的格子边界。
bounding box可能会超出我们的格子边界。

如果除以格子长宽,数值会超过0-1之间,解决方法是,除以图片的长宽

目标检测 多模态_深度学习_11

目标检测 多模态_目标检测_12

下图显示了4个值的计算过程:

目标检测 多模态_ide_13

还剩最后一个置信度confidence,计算公式为:
目标检测 多模态_ide_14
IoU是交并比,即真实框和预测框的比值。
Pr(obj)是一个格子中是否有物体的概率,有物体为1,没有为0。

b. loss

损失函数一共分5项:

目标检测 多模态_目标检测 多模态_15

目标检测 多模态_目标检测 多模态_16表示这个格子是否有物体,如果有值为1,否则为0。
目标检测 多模态_目标检测_17相反。
当一个格子有物体时,计算1、2、3、5项
当一个格子没有物体时,计算第4项。

目标检测 多模态_目标检测_18

目标检测 多模态_目标检测 多模态_19