YOLOv1论文解读——简洁版

一、前言

结合网上的资源以及yolo的代码对yolo进行学习的一篇内容

yolov1是2016年发表的一篇目标检测的论文。论文地址:https://arxiv.org/pdf/1506.02640.pdf 之所以会关注这个论文,是因为看见github上的chineseocr项目,其中的文本框检测使用了yolov3,参考了csdn上一位作者的介绍,想要知道yolo的精髓,需要从yolov1开始,因为yolo这个系列是一脉相承的。

二、简介

yolo的第一篇文章叫《You Only Look Once: Unified, Real-Time Object Detection》 ,它把bounding box的坐标像分类网络那样预测出来。和fast-rcnn这类两段检测(先检测物体位置,然后进行分类,分类之后还需要一些后处理来修正检测框的位置)不同,yolo_v1将预测框的位置、大小和物体分类视为一个回归任务,通过CNN暴力predict出来。 这种直接的方式使得yolov1的速度比rcnn这类模型有如下的优势

  1. 要快很多。没有pipeline工作流,在Titan X-GPU上可以达到45帧每秒。
  2. yolo更加可以解释图片的预测过程,因为它是对整张图片进行处理,而不是像rcnn那样通过滑动窗口,对局部区域进行分析,因此不容易在背景上产生false positive error。
  3. 泛化能力强,可以在自然图片上训练,然后用来测试艺术画,且效果远远优于DPM和RCNN。这种泛化能力意味着他可以更加容易的迁移到其他领域。

yolov1也有一些天然的缺点:比如,会导致更多的位置定位上的错误,尤其是小物体定位,固定了尺寸的大小,识别的类别太少等,这些缺陷将在未来的版本中被优化和解决。

三、网络介绍

1. 基本概念

yolo_v1奠定了yolo系列算法“分而治之”的基调,在yolo_v1上,图片的划分和预测如下图所示:


image

如上图所示,输入图片被划分为SxS个单元格,如果物体的中心在这个网格内,则该单元格为检测该物品负责。每个网格预测B个bounding box,以及这些bounding box的得分。得分体现了模型对box包含物品以及包含物品的准确度的判断。在测试过程中,我们定义得分为Pr(Object)*IOU^true_pred.如果不包含物品,则得分为0,否则得分为预测框和真实框的IOU。

每个bounding box的预测由五个部分组成,(x, y, w, h,score).(x,y)为相对于网格中心的便宜,(w,h)为相对于整个图片的宽度和高度。

每个网格预测C个类别,Pr(CLASSi|Object)。当模型预测网格中含有物体的时候,就会有这个预测类别。无论一个网格中有多少个bounding box,都只会有一个这样的类别预测。在测试阶段,


image.png

这个数值即使该类物品出现在网格中的概率,也是预测框预测是否合适的一个指标。

在上面的图上,可以看出,S*S个网格,每个网格预测了B个bounding box和C类物品的概率,每个bounding box由(x, y, w, h,score)组成,因此预测结果被编码为SxSx(Bx5+C)。

需要特别注意,yolo的做法并不是把每个单独的网格作为输入feed到模型,在inference的过程中,网格只是物体中心点位置的划分之用,并不是对图片进行切片,不会让网格脱离整体的关系。

2. 网络结构介绍

image

这里使用CNN神经网络来设计,前面的CNN网络用于抽取整张图片的特征,全连接层用于预测输出的坐标和概率。

整个网路架构收到GoogleNet的启发,由24个卷积层和2个全连接层组成,不同于GoogleNet使用inception模块(googleNet中11,33,5*5以及maxpool层会堆叠起来形成层),这里简单的会用了3 x 3卷积层,跟随着1 x 1卷积层的方式。

四、训练

首先在ImageNet的1000类图片上进行前20层卷积层的预训练,在二十层卷积层之后添加一个平均池化层和一个全连接层。

训练的时候,先用ImageNet上的样本对模型的前20层(额外加上一个平均池化层和一个全连接层)进行预训练,在获得了top-5准确率88% 之后,再使用Darknet framework对整个网络进行训练。

根据前人的经验(参考文献1),在预训练的模型中加入卷积层和全连接层可以提升新能,因此在20个卷积层的预训练之后,叠加了四个卷积层和两个全连接层,并随机初始化权重。在训练的时候,图片大小都是448x448. 所有的参数(x,y,w,h,s)都是在0~1之间的数。

模型使用的激活函数是leaky ReLU,相比普通ReLU,leaky并不会让负数直接为0,而是乘以一个很小的系数(恒定),保留负数输出,但衰减负数输出

loss使用的是平方和误差。平方和误差易于求解,但是存在比较大的问题是不利于最大化平均准确率。平方和误差将定位误差和分类误差放在同一高度(不好),不包含物体的cell在图片中往往占了多数,这样这些图片的score=0,加强了包含物品cell的梯度。总之会导致训练不稳定。另一个不好的方面是对于大物体和小物体,平方和认为其误差的影响是一致的,实际情况是小物体的误差往往比大物体的误差要重要。

改进的措施是

  1. 对于位置误差通过系数增强影响力,
  2. 对于不包含物体的cell则通过系数减小其对误差的影响力。
    3.对于物体的高度和宽度误差,则用均方误差代替平方和误差。


    损失函数图

在训练的过程中,还使用了dropout来避免过拟合。对于图片也引入了随机尺寸变化和转换,同时还使用了HSV色彩空间的图片。

小总结

v1对于整个yolo系列的价值,即v2/v3还保留的特性,可以总结为3点:

  1. leaky ReLU,相比普通ReLU,leaky并不会让负数直接为0,而是乘以一个很小的系数(恒定),保留负数输出,但衰减负数输出;公式如下:
    y={x,x>00.1x,otherwise
    y={x,x>00.1x,otherwise

  2. 分而治之,用网格来划分图片区域,每块区域独立检测目标;

  3. 端到端训练。损失函数的反向传播可以贯穿整个网络,这也是one-stage检测算法的优势。

yolo1的短板

V1 缺陷之处:

输入尺寸固定:由于输出层为全连接层,因此在检测时,YOLO 训练模型只支持与训练图像相同的输入分辨率。其它分辨率需要缩放成此固定分辨率;

占比较小的目标检测效果不好:虽然每个格子可以预测 B 个 bounding box,但是最终只选择只选择 IOU 最高的 bounding box 作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。

重要的参考资料

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