YOLO,YOLO2学习(搬运)

自学保存,作者原地址:请大家支持原作者,写的真的不错.
http://hellodfan.com/2017/10/11/%E7%89%A9%E4%BD%93%E6%A3%80%E6%B5%8B%E8%AE%BA%E6%96%87-YOLO%E7%B3%BB%E5%88%97/

物体检测论文-YOLO系列

发表于 <time title="创建于" itemprop="dateCreated datePublished" datetime="2017-10-11T17:31:39+08:00">2017-10-11</time> | 分类于 Paper Reading

本次论文主要分为两个部分:YOLO和YOLO9000。
YOLO是Rgb大神在Object Detection上的新尝试,目的是在保持准确率的基础上提高检测速度,从而达到了实用要求。
YOLO9000是YOLO的改进版,使用了多种trick,并提供了一种使用多种训练集训练模型的方法。

</header>

YOLO

Rgb大神关于物体检测的新作YOLO,论文You Only Look Once: Unified, Real-Time Object Detection

Introduction

对比人类的视觉系统,现存的物体检测模型:

  • 要不就是准确度不咋的(DPM速度还行,准确率很差,实用不现实)
  • 要不就是速度跟不上(Faster R-CNN 准确度还可以,3FPS的速度不能实时监测啊~)

这一堆物体检测模型,无论在学术界还是工程界,都不算令人满意。为此需要注入新的血液(重新挖坑),那么从哪里开始扎针呢?

作者在论文内主要对比R-CNN系列,指出了R-CNN系列速度慢的原因是: 模型把物体检测任务分为了多个阶段,而这几个阶段需要分开训练,难以优化(虽然Faster R-CNN是一个整体的网络,但是训练的时候还是需要交替训练)。

为什么非要分为多个阶段?
这是因为基于RPN(region proposal networks)在设计时已经把object detection问题分为多个pipeline,如果要改,就要把RPN方案砍掉。

YOLO在此基础上重建了整个模型框架,将原先的Region Proposal一套方案抛弃掉,将object detection作为回归问题来处理,模型能够接收原始像素直接输出object的bbox和类别categories,也就是end-to-end模型.

Detection System

YOLO工作的流程图如下:

大致步骤为:

  • 整个图片resize到指定大小,得到图片<nobr aria-hidden="true">Inputrs</nobr>

  • 将<nobr aria-hidden="true">Inputrs</nobr>

  • 塞给CNN

  • 使用NMS(非极大值抑制)去除多余框,得到最后预测结果

总的步骤很简单,下面具体看看图片塞给CNN时是怎么整的。

分成单元格

首先会把原始图片resize到<nobr aria-hidden="true">448×448</nobr>

,放缩到这个尺寸是为了后面整除来的方便。再把整个图片分成<nobr aria-hidden="true">S×S(例:7×7)</nobr>

个单元格,此后以每个单元格为单位进行预测分析。

每个单元格需要做三件事:

  1. 如果一个object的中心落在某个单元格上,那么这个单元格负责预测这个物体(论文的思想是让每个单元格单独干活)。

  2. 每个单元格需要预测<nobr aria-hidden="true">B</nobr>

个bbox值(bbox值包括坐标和宽高),同时为每个bbox值预测一个置信度(confidence scores)。也就是每个单元格需要预测<nobr aria-hidden="true">B×(4+1)</nobr>* 个值。

*   每个单元格需要预测<nobr aria-hidden="true">C</nobr>
  1. (物体种类个数)个条件概率值.

注意到: 每个单元格只能预测一种物体,并且直接预测物体的概率值。但是每个单元格可以预测多个bbox值(包括置信度)。

单元格数据

我们细致的分析一下每个单元格预测的<nobr aria-hidden="true">B</nobr>

个<nobr aria-hidden="true">(x,y,w,h,confidence)</nobr>

  • <nobr aria-hidden="true">(x,y)</nobr>

  • 是bbox的中心相对于单元格的offset* <nobr aria-hidden="true">(w,h)</nobr>* 是bbox相对于整个图片的比例* <nobr aria-hidden="true">confidence</nobr>

  • 下面有详解

如上图,图片分成<nobr aria-hidden="true">S×S(7×7)</nobr>

个单元格。整张图片的长宽为<nobr aria-hidden="true">hi,wi</nobr>

<nobr aria-hidden="true">(x,y)</nobr>

到底代表啥意思?

对于蓝色框的那个单元格(坐标为<nobr aria-hidden="true">(xcol=1,yrow=4)</nobr>

),假设它预测的是红色框的bbox(即object是愚蠢的阿拉斯加),我们设bbox的中心坐标为<nobr aria-hidden="true">(xc,yc)</nobr>,那么最终预测出来的<nobr aria-hidden="true">(x,y)</nobr>是经过归一化处理的,表示的时中心相对于单元格的offset,计算公式如下:

<nobr aria-hidden="true">x=xcwiS−xcol,y=ychiS−yrow</nobr>

<nobr aria-hidden="true">(w,h)</nobr>

又是啥意思?

预测的bbox的宽高为<nobr aria-hidden="true">wb,hb</nobr>

,<nobr aria-hidden="true">(w,b)</nobr>表示的是bbox的是相对于整张图片的占比,计算公式如下:

<nobr aria-hidden="true">w=wbwi,h=hbhi</nobr>

<nobr aria-hidden="true">Confidence</nobr>

这个置信度有两个含义:一是格子内是否有目标,二是bbox的准确度。

我们定义置信度为<nobr aria-hidden="true">Pr(Object)∗IOUtruthpred</nobr>

.

  • 如果格子内有物体,则<nobr aria-hidden="true">Pr(Object)=1</nobr>

  • ,此时置信度等于IoU* 如果格子内没有物体,则<nobr aria-hidden="true">Pr(Object)=0</nobr>

  • ,此时置信度为0

<nobr aria-hidden="true">C</nobr>

个种类的概率值

每个网格在输出bbox值的同时要给出给个网格存在object的类型。记为:

<nobr aria-hidden="true">Pr(Classi|Object)</nobr>

这是条件概率。

需要注意的是:输出的种类概率值是针对网格的,不是针对bbox的。所以一个网格只会输出<nobr aria-hidden="true">C</nobr>

个种类信息。(这样就是默认为一个格子内只能预测一种类别的object了,简化了计算,但对于检测小object很不利)。

在检测目标时,我们把<nobr aria-hidden="true">confidence</nobr>

做处理:

<nobr aria-hidden="true">Pr(Classi|Object)∗Pr(Object)∗IoUtruthpred=Pr(Classi)∗IoUtruthpred</nobr>

这就是每个单元格的class-specific confidence scores,这即包含了预测的类别信息,也包含了对bbox值的准确度。 我们可以设置一个阈值,把低分的class-specific confidence scores滤掉,剩下的塞给非极大值抑制,得到最终的标定框。
对于这部分可以看deepsystem.ai的PPT,讲的很详细,需要翻墙

单元格输出

每个网络一共会输出:<nobr aria-hidden="true">B×(4+1)+C</nobr>

个预测值.
故所有的单元格输出为:<nobr aria-hidden="true">S×S×(B×5+C)</nobr>

个预测值.

论文中每个单元格的输出如下图:


YOLO论文中:<nobr aria-hidden="true">S=7,B=2,C=20</nobr>

所有单元格输出为<nobr aria-hidden="true">7×7×(2×5+20)</nobr>

,即最终的输出为<nobr aria-hidden="true">7×7×30</nobr>

的张量。

YOLO检测物体的流程

  • 分割成单元格

  • 预测bbox与类别信息,得到最终的<nobr aria-hidden="true">specificconfidence</nobr>

  • 设置阈值,滤掉低分的bbox

  • 非极大值抑制得到最终的bbox

YOLO的架构

上面说了YOLO的检测过程,那么中间关键的预测bbox和<nobr aria-hidden="true">confidence</nobr>

该怎么实现?

当然是用CNN来整,整个网络框架如下:

网络架构受GoogleNet启发,共24个卷积层,后面接了2个FC层。

预训练

使用上图的前20个卷积层+平均池化+FC层在ImageNet上跑了一圈。(在ImageNet上跑是用的<nobr aria-hidden="true">224×224</nobr>

输入)。

预训练完事后,也就是get到了想要的前20个卷积层权重,在此基础上添加4个卷积层和2个FC层,得到最终模型(也就是上图)。同时将网络的输入尺寸从<nobr aria-hidden="true">224×224</nobr>

改成了<nobr aria-hidden="true">448×448</nobr>

YOLO的训练

整个YOLO在训练时,有很多处理的细节,我们主要讲一下网络损失函数的定义。

损失函数

这里我们把损失函数分为3个部分,每个部分都使用均方误差(为什么用均方,论文给出的原因是这样做简单啊):

先看一下整个损失函数:

每个图片的每个单元格不一定都包含object,如果没有object,那么<nobr aria-hidden="true">confidence</nobr>

就会变成0,这样在优化模型的时候可能会让梯度跨越太大,模型不稳定跑飞了。为了平衡这一点,在损失函数中,设置两个参数<nobr aria-hidden="true">λcorrd</nobr>****和<nobr aria-hidden="true">λnoobj</nobr>****,其中<nobr aria-hidden="true">λcorrd</nobr>****控制bbox预测位置的损失,<nobr aria-hidden="true">λnoobj</nobr>

控制单个格内没有目标的损失。

对三个损失函数有细节上的调整:

  • bbox
    对于预测的bbox框,大的bbox预测有点偏差可以接受,而小的bbox预测有点偏差就比较受影响了,如下图:


    对于这种情况,使用先平方根再求均方误差,尽可能的缩小小偏差下的影响
    bbox的损失记为:

    <nobr aria-hidden="true">中心点损失:λcorrd∑i=0S2∑j=0B𝕀objij[(xi−xi)2+(yi−yi)2]</nobr>

<nobr aria-hidden="true">宽高损失:+λcorrd∑i=0S2∑j=0B𝕀objij[(wi‾‾√−wi‾‾√)2+(hi‾‾√−hi‾‾√)2]</nobr>

<nobr aria-hidden="true">𝕀objij</nobr>* 表示第i个单元格内预测的第j个bbox是否负责这个object:在计算损失过程中,bbox与ground truth的IoU值最大的负责object。

*   confidence
对于置信度的损失,是按照是否含有object情况下分成两部分,对于不包含object的单元格,我们使用<nobr aria-hidden="true">λnoobj</nobr>

调整比例,防止这部分overpowering。

<nobr aria-hidden="true">∑i=0S2∑j=0B𝕀objij(Ci−Ci)2+λnoobj∑i=0S2∑j=0B𝕀objij(Ci−Ci)2</nobr>

  • categories
    对于种类预测,前面说了,这里设定每个单元格只负责一个object的预测,所以我们不用考虑多个bbox了。故损失函数为:

    <nobr aria-hidden="true">∑i=0S2𝕀obji(pi(c)−pi^(c))2</nobr>

训练细节

  • 在激活函数上:
    最后一层使用的是标准的线性激活函数,其他的层都使用leaky rectified linear activation:

    <nobr aria-hidden="true">ϕ(x)={ x,   if x>00.1x ,  otherelse</nobr>

  • 在学习率上:

    • 前75个epoch设置为<nobr aria-hidden="true">10−2</nobr>* 再30个epoch设置为<nobr aria-hidden="true">10−3</nobr>* 最后30个epoch设置为<nobr aria-hidden="true">10−4</nobr>
  • 其他的训练细节:

    • batch=64
    • 动量0.9,衰减为0.0005
    • 使用dropout,设置为0.5,接在第一个FC层后
    • 对样本做了数据增强

总结

缺点

论 文给出了YOLO与Fast RCNN的对比图,YOLO的定位准确率相对于fast rcnn比较差。但是YOLO对背景的误判率比Fast RCNN的误判率低很多。这说明了YOLO中把物体检测的思路转成回归问题的思路有较好的准确率,但是bounding box的定位不是很好。

优点

YOLO有如下特点:

  • 速度快。YOLO将物体检测作为回归问题进行求解,使用单个网络完成整个检测过程。
  • 召回率低,表现为背景误检率低。YOLO可以get到图像的整体信息,相比于region proposal等方法,有着更广阔的“视野”。
  • 泛化能力强,对其他类的东西,训练后效果也是挺好的。


YOLO2

YOLO2是YOLO的升级版本,在YOLO的基础上用到了很多trick,尤其是结合了anchor box。 论文:YOLO9000:Better, Faster, Stronger

我个人觉得YOLO2是在YOLO的基础上,把多种物体检测网络(例:Faster R-CNN)和分类网络(ResNet,GoogleNet)的优点揉入进去,并且很酷炫的使用例如ImageNet一样的分类数据集训练了最终物体分类 部分,使用例如COCO一样的检测数据集训练检测定位部分,这种联合训练方式感觉很有搞头。

Introduction

论文主要工作有两部分:

  • 改进YOLO的多个部分,整出一个YOLOv2
  • 提出了一种层次性联合训练方法,可以使用ImageNet分类数据集和COCO检测数据集同时对模型训练,最终整出来个YOLO9000,可以识别9000多种物体.

正如标题一样,论文从Better,Faster,Stronger三个方面介绍了对YOLO的改进,我们也就从这三个方面总结YOLO2。

Better

Batch Normalization

Batch Normalization来自论文Batch Normalization: Accelerating Deep Network Training b
y Reducing Internal Covariate Shift
。使用BN的好处对数据分布做了修正,这样网络可以更快更好的学习。
在网络的每个卷积层后增加Batch Norm,同时弃用了dropout,网络的上升了2%mAP.

High Resolution Classifier

原本的所有的state-of-the-art检测模型都是使用ImageNet预训练的模型,比方说AlexNet训练时输入小于<nobr aria-hidden="true">256×256</nobr>

,原本的YOLO是在<nobr aria-hidden="true">224×224</nobr>上预训练,在后面训练时候提升到<nobr aria-hidden="true">448×448</nobr>

,这样模型需要去适应新的分辨率。

YOLO2是直接使用<nobr aria-hidden="true">448×448</nobr>

的输入,在ImageNet上跑了10个epochs.让模型时间去适应更高分辨率的输入。这使得模型提高了4%的mAP.

Convolutional With Anchor Boxes

Anchor Boxes在Faster R-CNN里面已经介绍了,Faster R-CNN里anchor

我们简单对比一下这个网络的特性:

对比项 YOLO Faster RCNN YOLO2
结构上 预测bbox值是使用FC层来整的,gird cell负责预测种类,同一个grid cell下bbox没得选。 在feature map的基础上,使用不同形状的anchor boxes,然后计算出Proposal。 去掉YOLO的FC层,同时去掉YOLO的最后一个pool层,增加feature map的分辨率,修改网络的输入,保证feature map有一个中心点,这样可提高效率。并且是以每个anchor box来预测物体种类的
预测框 将图片分成<nobr aria-hidden="true">7×7</nobr>

| 个grid cell,每个grid cell预测2个bbox,一共也就98个。对于物体数量多且密集的图片很无力啊 | 在<nobr aria-hidden="true">M×N</nobr> |

feature map上每个位置使用9种anchor boxes,一共得到<nobr aria-hidden="true">9MN</nobr>

| 个高级的特征 | 将网络的输入调整到<nobr aria-hidden="true">416×416</nobr> |

,保证为多次卷积后,下采样factor为32,得到<nobr aria-hidden="true">13×13</nobr>的feature map。在这上面使用9种anchor boxes,得到<nobr aria-hidden="true">13×13×9=1521</nobr>

| 个,这比YOLO大多了。 |
| 指标 | 69.5mAP
recall:81% | 我速度慢,不凑热闹了 | 69.2mAP
recall:88%
精度下降一点点,召回率上了7%,还是很有效果的 |

Dimension Clusters

在Faster R-CNN里我们介绍过,9种不同的anchor boxes是三种面积和三种不同的长宽比组合而成的,为什么要选这样的anchor?
这是人工选择出来的,如果我们能用一个先验条件,找出大部分bbox的形状,设置anchor也为如此,那么模型学习起来会容易很多。

所以在YOLO2中,使用了K-means聚类对数据集的ground truth聚类。一般的聚类是使用欧式距离,这会导致ground truth大的比ground truth小的更受误差的影响,而且我们在实际的评价中是使用IoU的,很自然的想到用IoU来做聚类尺度。实际的度量尺度:

<nobr aria-hidden="true">d(box,centroid)=1−IOU(box,centriod)</nobr>

对数据集的聚类结果如下:

左图是聚类数目与Avg IoU的关系,论文选择是<nobr aria-hidden="true">k=5</nobr>

,在模型复杂度与召回率之间取一个折中值。右图是<nobr aria-hidden="true">k=5</nobr>

下的anchor boxes的形状。
同时,论文简单的比较了一下不同方法选出来的anchor的Avg IoU对比:


无论是<nobr aria-hidden="true">k=5</nobr>

,还是<nobr aria-hidden="true">k=9</nobr>

,使用聚类选出来的anchor在Avg IoU指标上都要要比手动的好。使用聚类来算anchor好处还是很明显的。

Direct location prediction

在YOLO上使用anchor boxes会遇到一个问题:模型不稳定。尤其是在早期迭代中。论文认为模型不稳定的原因来自于预测bbox的<nobr aria-hidden="true">(x,y)</nobr>

。如下:

<nobr aria-hidden="true">x=(tx∗wa)−xa</nobr>

<nobr aria-hidden="true">y=(ty∗ha)−ya</nobr>

在Faster R-CNN的inference时,偏移因子<nobr aria-hidden="true">tx,ty</nobr>

是 没有限制的,模型预测的是offset,我们想让每个模型预测它附近的一个部分,在不加限制的情况下,收敛会比较慢。故论文对采用了和YOLO一样的方 法,直接预测中心点,并使用Sigmoid函数将偏移量限制在0-1(这里的尺度是针对grid cell)。计算公式如下:

<nobr aria-hidden="true">bx=σ(tx)+cx</nobr>

<nobr aria-hidden="true">by=σ(ty)+cy</nobr>

<nobr aria-hidden="true">bw=pwetw</nobr>

<nobr aria-hidden="true">bh=pheth</nobr>

<nobr aria-hidden="true">Pr(object)∗IOU(b,object)=σ(to)</nobr>

<nobr aria-hidden="true">bx,by,bw,bh</nobr>

是预测的bbox的中心点坐标和宽高,中心点坐标的尺度是相对于grid cell。如下图:

经过Dimension Clusters 和Direct location prediction操作,在原有的anchor boxes版本上又提升了5%的mAP。

Fine-Grained Features

网络最后的feature map尺寸为<nobr aria-hidden="true">13×13</nobr>

,对于检测大尺寸的目标是够的了。如果是要检测小尺寸细粒度的东西,感觉上有点勉强了。那该怎么办?

  • 论文琢磨着Faster R-CNN和SSD的想法,在不同层次的特征图上获取不同分辨率的Proposal。
  • 在ResNet上,是通过一个identity mapping,直接把上一层传到下一层。

论文整出一个passthrough layer,就是把上面层的(前面<nobr aria-hidden="true">26×26</nobr>

)高分辨率的feature map直接连到<nobr aria-hidden="true">13×13</nobr>的feature map上。论文中把<nobr aria-hidden="true">26×26×512</nobr>转为<nobr aria-hidden="true">13×13×2048</nobr>

,这样就能接到一起了。这么整让整体性能提升1%。

Multi-Scale Training

和GoogleNet训练时一样,为了提高模型的robust,使用多尺度的输入训练。因为网络的卷积层降采样因子是32,故输入尺寸选择32的倍数<nobr aria-hidden="true">320,352,…,608</nobr>

。论文给出了实验数据:

当网络在小尺度输入时,速度能达到90FPS,mAP也能达到Faster R-CNN的水平。使用大尺寸输入时,速度降到了40FPS,mAP上升到了78.6%.达到了state-of-the-art的水准。


各个模型之间性能的对比图。

Faster

DarkNet-19

大 多数detection的框架是建立在VGG-16上的,VGG-16在ImageNet上能达到90%的top-5,但是单张图片需要30.69 billion 浮点运算,YOLO2是依赖于DarkNet-19的结构,这个模型在ImageNet上能达到91%的top-5,并且单张图片只需要5.58 billion 浮点运算。DarkNet的结构图如下:

可以看到DarkNet也是大量使用了<nobr aria-hidden="true">3×3</nobr>

和<nobr aria-hidden="true">1×1</nobr>

的小卷积核,YOLO2在DarkNet的基础上添加了Batch Norm保证模型稳定,加速了模型收敛。

Training for classification

论文以Darknet-19为模型在ImageNet上用SGD跑了160epochs。

参数 数值
learning rate 0.1
polynomial rate decay 4
weight decay 0.00005
momentum 0.9
data augmentation数据增强 random crops, rotations等tricks

跑完了160 epochs后,把输入尺寸从<nobr aria-hidden="true">224×224</nobr>

上调为<nobr aria-hidden="true">448×448</nobr>

,这时候lr调到0.001,再跑了10 epochs,这时候DarkNet达到了top-1准确率76.5%,top-5准确率93.3%。

Training for dectection

在上面训练好的DarkNet-19的基础上,把分类网络改成detect网络,去掉原先网络的最后一个卷积层,取而代之的是使用3个<nobr aria-hidden="true">3×3x1024</nobr>

的卷积层,并且每个新增的卷积层后面接<nobr aria-hidden="true">1×1</nobr>

的卷积层,数量是我们要detection的数量。

定义新的detectin模型,该训练了:

参数 数值
训练次数 160 epochs
learning rate 起始0.001,在60和90 epochs时衰减10倍
weight decay 0.0005
momentum 0.9
data augmentation random crops,color shifting,etc

Stronger

论文提出了一种联合训练的机制:使用detection数据集训练模型detection相关parts,使用classification数据集训练模型classification相关parts。

这样训练会有一些问题:detection datasets的标签更为“上层”,例如狗,船啊啥的。而对应的classification datasets的标签就“下层”了很多,比如狗就有很多种,例如“Norfolk terrier”, “Yorkshire terrier”, and “Bedlington terrier”等等。

而我们一般在模型中分类使用的是softmax,softmax计算所有种类的最终的概率分布。softmax会假设所有种类之间是互斥的,但是, 实际过程中,“上层”和“下层”之间是有对应的关系的。(例如中华田园犬,博美都属于狗),照着这样的思路,论文整出了一个层次性的标签结构。

Hierarchical classification

引用晓雷笔记

ImageNet的标签的来源是WordNet(一个语言数据库)。WordNet是由directed struct组成,但是directed struct较为复杂,这里采用另一个方式表示WordTree

WordTree是一种多层级的Tree结构,数据来源于WordNet。在ImageNet中一个类别的标签在WordNet中到根节点的路径,如果存在多条则选择最短的一条。遍历将所有的类别标签都提取,最终得到WordTree,使用链式法则计算任意节点的概率值。

创建层次树的步骤是:

  • 遍历ImageNet的所有视觉名词
  • 对每一个名词,在WordNet上找到从它所在位置到根节点(“physical object”)的路径。 许多同义词集只有一条路径。所以先把这些路径加入层次树结构。
  • 然后迭代检查剩下的名词,得到路径,逐个加入到层次树。路径选择办法是:如果一个名词有两条路径到根节点,其中一条需要添加3个边到层次树,另一条仅需添加一条边,那么就选择添加边数少的那条路径。

最终结果是一颗 WordTree (视觉名词组成的层次结构模型)。用WordTree执行分类时,预测每个节点的条件概率。例如: 在“terrier”节点会预测:

<nobr aria-hidden="true">Pr(Norfolkterrier|terrier)Pr(Yorkshireterrier|terrier)Pr(Bedlingtonterrier|terrier)…</nobr>

分类时假设图片包含物体:Pr(physical object) = 1.

为了验证这种方法作者在WordTree(用1000类别的ImageNet创建)上训练了Darknet-19模型。为了创建WordTree1k作者添加了很多中间节点,把标签由1000扩展到1369。

训练过程中ground truth标签要顺着向根节点的路径传播。例如:如果一张图片被标记为“Norfolk terrier”它也被标记为“dog” 和“mammal”等。为了计算条件概率,模型预测了一个包含1369个元素的向量,并基于所有“同义词集”计算softmax,其中“同义词集”是同一概念的下位词。

使用相同的训练参数,层次式Darknet-19获得71.9%的top-1精度和90.4%top-5精度。尽管添加了369个额外概念,且让网 络去预测树形结构,精度只有略微降低。按照这种方式执行分类有一些好处,当遇到新的或未知物体类别 这种方法的好处是在对未知或者新的物体进行分类时,性能降低的很优雅(gracefully)。例如:如果网络看到一张狗的图片,但是不确定狗的类别,网 络预测为狗的置信度依然很高,但是,狗的下位词(哈士奇/金毛)的置信度就比较低。

有了这种映射机制,WordTree就可以将不同的数据集结合起来,由于WordTree本身变化多端,所以可以将大多数的数据集结合起来。

Joint classification and detection

细节 方法
样本 使用WordTree混合了COCO与ImageNet数据集后,混合数据集对应的WordTree包含9418类。由于ImageNet数据集跟COCO比太大了,产生了样本倾斜的问题,因此作者将COCO过采样,使得COCO与ImageNet的比例为1: 4。
anchor box YOLO9000的训练基于YOLO v2的架构。anchor box数量由5调整为3用以限制输出大小。
训练时遇到检测数据集样本 正常地反方向传播
训练时遇到分类数据集样本 在该类别对应的所有bounding box中找到一个置信度最高的(作为预测坐标),同样只反向传播该类及其路径以上对应节点的类别损失。反向传播objectness损失基于如下假设:预测box与ground truth box的重叠度至少0.3 IOU。

采用这种联合训练,YOLO9000从COCO检测数据集中学习如何在图片中寻找物体,从ImageNet数据集中学习更广泛的物体分类。

总结

YOLO2 在YOLO的基础上提出了许多改进,比如Convolutional With Anchor Boxes, Dimension Clusters, Direct location prediction等等。YOLOv2/YOLO9000是现目标检测领域的state-of-the-art。

Thanks for your support!

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