Yolo系列其一:Yolo_v1

介绍

当前主流的CNN目标检测框架可分为两类:包含Region proposals提取阶段的两阶段目标检测框架如R-CNN系列像R-CNN/Fast-RCNN/Faster-FCNN/R-FCN等;端到端的单阶段目标检测框架如Yolo系列像Yolo-v1/Yolo-v2/Yolo-v3及SSD,和最近Facebook提出的RetinaNet等。简单说来两阶段的检测框架相对准确率(mAP值)更高,但其速度较慢,很难满足图片或视频实时性处理要求;单阶段的检测框架相对准确率较低,但却能在保证一定准确率的情况下,拥有更快、甚至实时的推理速度,因此在现实工程实践中也获得了较多的应用。

Yolo系列模型是比较典型的端到端的单阶段目标检测模型。凭着较快的速度及轻便的特性已经在端侧目标检测领域中得到了较大规模的应用。本系列文章里面我们将从最早的Yolo-v1开始,逐步分析下此系列模型是如何逐渐迭代发展的。

Yolo概述

如前文所讲,Yolo是一种端到端的目标检测网络。它以resize过后的图片为输入,经过前端的CNN特征提取网络后,在生成的feature maps之上再使用CNN/Average Pool等层对特征进一步融合、整理,然后由后接的两个fc层来直接生成图片上每个位置节点所涵盖的潜在目标的类别、位置及置信度等信息。最后再对这些潜在的目标以其置信度信息来进行过滤(即传说中的极大值抵制,non-maximum suppression,NMS),以减少重复、冗余的目标框数目进而加速并改良后须的loss值计算。总之它是一个由图片输入到图片之上目标输出的端到端回归模型。下图是Yolo目标检测框架的概括描述。

Yolo检测系统框架

Yolo详解

  • 模型流水过程

Yolo会将输入的图片划分为SxS的空间区域。然后模型会在每个空间节点(i,j; 0 <= i <= S, 0 <= j <= S)上检测固定大小/分辨率的B个boxes。检测的东西共有三样:1)此节点上每个box所可能包含潜在目标的概率大小即置信度(Pr(Object) ∗ IOUpredtruth);2)此节点上每个box所具有的位置(即中心点x,y与box的h,w);3)每个节点上潜在目标归属类别的概率分步(即Pi,0 <= i <= C,C为所有可能的类别数目)。
在部署训练好的模型时,结合网络前向推理后生成的每个节点上的此三样信息就能得到最终的检测目标。下图可看出此一详细流水过程。

Yolo具体模型
  • 模型网络结构

在Yolo模型中,作者采用了自己创造的Darknet作为其图片特征处理主干网络。它的思想有些借鉴Googlenet,即通过使用1x1的Conv层来减少filters数目并整合各个输出channels的特征。下图为它的基本框架。此基本框架中共包含24个Conv层,其后又连接了两个FC层来生成上文所提到的基本信息。作者有试着减少Conv层的数目为9,并同时减少Conv层中所具有的filters的数目,最终生成了一个准度稍降但速度更快的fast-Yolo模型。

Darknet网络结构

论文中作者使用了S=7,B=2,而PASCAL VOC数据集共有20类,所以最终预测的模型输出为(7x7x(2x5 + 20)的Tensor。

  • 模型训练

训练与推理的最大区别,在于我们需要提出一个合理的loss,才能让模型得以按照我们的想法去进行迭代优化。如下为Yolo的loss计算公式。

Yolo的loss函数公式

跟R-CNN一样,它主要由两部分组成即反映类别信息的Classification loss及反映目标检测框位置信息的localization loss。不过此外它还包含了反映目标框置信度信息的loss(此部分loss与RPN网络的confidential loss相似,其的作用也大致相同)。为了抵制过多的background目标框会使得那些真正有意义的、包含有明确物体的目标框信息被湮没,作者使用了外在的系数λcoord = 5 和 λnoobj = 0.5来人为对之做出纠正。这确实是它非常丑的地方,毕竟每一个需要手动调节的超参的加入都会直接导致一个模型的使用难度加大。

  • 模型推理

Yolo这种单阶段目标检测模型的推理异常简单,只需要对train好的模型作一次前向推理即能得到输入图片之上的目标类别及其位置。

在VOC数据集上,一次前向推理每张图片可得到98个目标检测框及它们所对应的类别概率分布。在模型输出的最后一般我们会对生成的多个boxes进行NMS处理以减少重复、冗余的目标框数目。此方法在R-CNN系列模型中亦得到过检验,可以有效地提升模型性能及准确度。

  • Yolo的缺陷

由于Yolo通过直接在image level上划分grid区域,然后每个区域指定固定数目的boxes,再对这些boxes作回归检测、分析,这可能会导致它不大能处理不同scales的目标。实验表明它在处理很小的群体目标时性能极差。同时它对那些固定数目boxes之外的其它新的分辨率模型检测效果也不好。显然加大每个Grid上不同size/aspect ratio的boxes数目可以比较有效地解决此一问题,但如此以来又会导致其引以为傲的速度性能大打折扣。

此外因为它仅使用最后一层的抽象CNN特征来得到目标框的位置、类别等信息,因此生成出的目标框不够细化。

最后它的training loss计算中对不同大小的目标框一视同仁,不加区分。这导致它不能较好的对待小尺度的目标框。实验表明localization error较大是它精度相对于Faster-FCNN模型不高的主要因素。

Yolo与其它检测模型的比较

与Faster-RCNN等两阶段检测框架相比,Yolo检测性能不如,但胜在速度较快,可满足实时性要求。与其它的号称实时检测框架如DPM等相比,Yolo在速度不落下风的同时,性能又可保持较高。下表为Yolo与其它检测模型的实验结果比较。

Yolo与其它检测模型的实验结果比较

代码分析

在cfg/yovov1.cfg里面作者定义了darknet及yovov1 network head的结构。若我们只关注模型本身,那么只看此配置文件即可,没必要去费精力了解darknet是如何解析其配置文件的。

如下为darknet在训练与推理时分别具有的输入配置及其它超参数。

[net]
# Testing
batch=1
subdivisions=1
# Training
# batch=64
# subdivisions=8
height=448
width=448
channels=3
momentum=0.9
decay=0.0005
saturation=1.5
exposure=1.5
hue=.1

learning_rate=0.0005
policy=steps
steps=200,400,600,20000,30000
scales=2.5,2,2,.1,.1
max_batches = 40000

以下为darknet特征提取网络中间的若干conv层。。可看出3x3与1x1网络相互穿插的结构特点。此外较为特殊的是它的activation函数用的都是leaky ReLu。另外1x1的conv也会使用pad(为1)。

[convolutional]
batch_normalize=1
filters=128
size=1
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=3
stride=1
pad=1
activation=leaky

[convolutional]
batch_normalize=1
filters=256
size=1
stride=1
pad=1

darknet主干网络的最后又添加了几个Conv层,用于特征细化,这对于pre-trained后的网络进行迁移学习非常有必要。

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky

[convolutional]
batch_normalize=1
size=3
stride=2
pad=1
filters=1024
activation=leaky

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky

[convolutional]
batch_normalize=1
size=3
stride=1
pad=1
filters=1024
activation=leaky

[local]
size=3
stride=1
pad=1
filters=256
activation=leaky

最后就是最终的fc层及后须的位置、类别、置信度等信息提取。

[dropout]
probability=.5

[connected]
output= 1715
activation=linear

[detection]
classes=20
coords=4
rescore=1
side=7
num=3
softmax=0
sqrt=1
jitter=.2

object_scale=1
noobject_scale=.5
class_scale=1
coord_scale=5

参考文献

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

推荐阅读更多精彩内容