YOLOv1详解

Figure 1. YOLOv1架构

1. YOLOv1简介

     从目标检测任务(Object Detection Task)发展来看,主要有两类方法。一类是R-CNN系列及其类似算法,称为two-stage,将目标检测任务分为边界框回归和物体分类两个模块。虽然模型前面大量的提取特征以及候选框的选取都是单个网络完成,但回归和分类任务毕竟还是分开的,分开训练造成网络较难收敛,且预测时速度慢,但准确度较高。另一类是本文描述以及后面会更新换代的YOLO算法,称为one-stage,将目标检测任务单纯看做回归任务。YOLOv1使用端到端的网络训练模型,速度快,但准确度相对低些,主要用于实时检测,例如视频目标检测。

2. YOLOv1网络结构

     由于YOLOv1是端到端进行训练,因此YOLOv1只有一条单一的网络分支。YOLOv1输入为(448, 448, 3)的图像,经过一个修改的GoogLeNet网络(网络到底什么样的其实不用管,只要知道是一堆卷积和池化的堆叠即可),后面接一些全连接层(同样无所谓接什么全连接层,看下参数或者源码就直接懂了),最后接到一个1470 \times 1的全连接层,直接reshape为7 \times 7 \times 30(这里reshape成这样是有意图的,具体参见下面部分)。

Figure 2. YOLOv1网络结构

3. YOLOv1单一检测

     YOLOv1将一张图像(例如448 \times 448)划分为S \times S个网格(YOLOv1中S = 7,如下图所示),一共S^2个网格。

Figure 3. 图像被划分为7×7网格

     每个网络在初始时会按照自身网格位置生成两个先验框(或叫锚框,根据聚类算法生成的,不用太在意其大小)。一共49个网络,每个网络生成两个先验框,会生成98个先验框,例如下图第5行第2列网络生成的两个先验框。仔细观察,横着的橘黄色先验框超出了图片左边的范围,超出部分被截去(只是操作细节,不用太计较);初始的先验框只可能大概描述到物体的位置,具体还需要后期细调锚框位置,例如下图竖着的先验框蛮符合标准,但还是没有达到更精确地步,还需要细调。
Figure 4. 网格与先验框

     那么每个先验框怎么确定它的属性(位置以及预测是否包含物体)呢?YOLOv1提出首先每个先验框有五个参数,分别是表示先验框中心坐标,表示先验框宽高以及表示锚框分数(包含物体概率大小),如下图所示。从下图可以看出,为何上面网络要输出。首先输出的整个可以表示图像被分割为,其次深度30表示每个网格需要预测30个参数(2个先验框共10个参数,还有需要预测的类别数20)。
Figure 5. 每个先验框各个参数意义

     可以发现,一张图像产生有个先验框,可是最终有用的先验框(和GT比较吻合的)可能只能个别几个,如下图所示,只有三个先验框有用,红色表示GT框,黄色表示有用的先验框。什么是有用的先验框呢?训练和预测时候筛选先验框方法不同,预测时需要进行NMS,而训练时不用,下面先看训练时筛选方法。
Figure 6. GT框和对应有用的先验框

     我们知道训练时候需要计算loss函数,那就要知道预测值和GT值。GT值我们知道的,例如下图所示。每行表示一个GT框,第一个参数表示类别,接下来两个表示GT框中心点表示,最后两个表示GT框宽高,注意这里全是[0,1]之间的数,为什么和怎么计算的下面会讲。三个GT框应该分别对应着三个先验框。怎么选出这三个先验框呢?YOLOv1的做法是:首先分别找到图中每个物体GT框的中心点所在的网格,就如上图狗的中心点在绿色方框内,那么现在狗就由这个绿色网格对它负责,其他剩下48个网格和狗无关;而现在对狗负责的这个绿色网格有对应的两个橘黄色先验框,必须得选择一个,可以通过计算两个先验框分别与狗的GT框的IoU(不知道IoU的请自行搜索学习),选择IoU大的那个框。现在,在训练阶段,按上图所示有三个物体来算,我们就找到了三个物体GT框分别对应的先验框了。这么努力的寻找有用先验框是希望能找到和GT框相差不大的先验框,易于后面训练调节。
Figure 7. GT值

     由上面给出的GT值可以知道,中心点坐标和宽高限制在[0,1]之间,怎么计算的呢?由下图可知,这里将图像分割为网格,因为物体中心点落在中间那个网络中,因此中间那个网格对物体负责,按中间那个网格计算物体的。通过自身轴坐标减去负责自己网格的轴坐标,再除以负责自己网格的宽度;通过自身轴坐标减去负责自己网格的轴坐标,再除以负责自己网格的高度;通过自身宽度除以整张图片宽度;通过自身高度除以整张图片高度。因此物体四个参数被严格限制在[0,1]之间。
Figure 8. 框中心点坐标和宽高参数的定义

     表示物体的框还有一个参数——是否有物体的置信度分数。计算公式为,表示该网格是否有物体,没有物体时为0,有物体时为1,因此网格没有物体时置信度分数为0,有物体时置信度分数为预测框和GT框之间IoU值。每个网格30个参数前10个介绍过了,后面的20个表示每个网格中这20个类的概率。公式为,因此网格有物体时才有概率,没有物体时概率为0。这里仅仅预测每个网格的各个物体概率,和网格对应的先验框无关。

4.损失函数

     损失函数有多个部分,我们现在把它们分开来说,后面直接挨个加起来即可。
     第一部分如下所示,计算预测边界框和GT框中心点之间的差距。其中1_{ij}^{obj}表示第i个网格的第j个边界框是否负责一个物体,是为1,不是为0。
\lambda_{coord}\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}1_{ij}^{obj}(x_i-\widehat{x}_i)^2(y_i-\widehat{y}_i)^2
     第二部分类似第一部分,主要计算预测宽高和GT宽高损失。这里加上根号表示大边界框小偏差应该比小边界框小偏差更重要。
\lambda_{coord}\sum_{i=0}^{S^{2}}\sum_{j=0}^{B}1_{ij}^{obj}(\sqrt{w_i}-\sqrt{\widehat{w}_i})^2(\sqrt{h_i}-\sqrt{\widehat{h}_i})^2
     第三部分计算对于每个边界框的置信度分数与预测的置信度分数之间差距。C表示置信度分数,\widehat{C}表示预测的边界框和对应GT框的IoU。
\sum_{i=0}^{S^2}\sum_{j=0}^{B}1_{ij}^{obj}(C_i-\widehat{C}_i)^2+\lambda_{noobj}\sum_{i=0}^{S^2}\sum_{j=0}^{B}1_{ij}^{noobj}(C_i-\widehat{C}_i)^2
     最后一部分计算类概率损失,1_i^{obj}表示当网格中没有物体时不惩罚。
\sum_{i=0}^{S^2}1_i^{obj}\sum_{c \in classes}(p_i(c)-\widehat{p}_i(c))^2
其中,\lambda_{coord} = 5\lambda_{noobj}=0.5

参考文献

论文原文:https://arxiv.org/pdf/1506.02640.pdf
英文博客:https://medium.com/hackernoon/understanding-yolo-f5a74bbc7967
NMS参考:https://docs.google.com/presentation/d/1aeRvtKG21KHdD5lg6Hgyhx5rPq_ZOsGjG5rJ1HP7BbA/pub?start=false&loop=false&delayms=3000#slide=id.p

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容