目标检测之YOLO-You Only Look Once(一)

提到计算机视觉,自然会提到目标检测(object detection),而谈到目标检测,YOLO系列算法算是目标检测中2016年起燃起的一颗新星,接下来笔者将会挨个介绍YOLO这个家族中各个算法,本文则从CVPR2016的这篇You Only Look Once: Unified, Real-Time Object Detection介绍YOLO v1的论文说起。先上YOLO的官方演示demo:

YOLO演示gif

目录

  • 背景
  • 简单介绍
  • 算法原理
  • 实验结果
  • 参考文献

背景

  • 我们知道,目标检测通常分为两个步骤: (1)生成bounding box(边界框)****(2)对物体分类。因此目标检测算法也因此分为one-stagetwo-stage两个算法系列。
  • 顾名思义,two-stage算法就是把两个步骤分别进行,比如R-CNN方法使用region proposal来生成整张图像中可能包含待检测物体的potential bounding boxes,然后用分类器来评估这些boxes,接着通过post-processing来改善bounding boxes,消除重复的检测目标,并基于整个场景中的其他物体重新对boxes进行打分。整个流程执行下来很慢,而且因为这些环节都是分开训练的,检测性能很难进行优化。

  • 作者提出的YOLO(you only look once)就是one-stage算法系列的代表。它将目标检测任务当做回归问题(regression problem)来处理,直接通过整张图片的所有像素得到bounding box的坐标、box中包含物体的置信度和class probabilities。顾名思义,通过YOLO,每张图像只需要看一眼就能得出图像中都有哪些物体和这些物体的位置。

简单介绍

简单流程

简单流程图

YOLO检测的流程十分简单,如论文中的这张图所示:
1、将图像resize448×448作为神经网络的输入
2、用卷积神经网络得到一些bounding box坐标、box中包含物体的置信度class probabilities
3、进行nms(非极大值抑制),筛选Boxes

优点

  1. YOLO检测物体非常快。 因为只是当成一个回归问题处理而没有复杂的检测流程,只需要将图像输入到神经网络就可以得到检测结果,YOLO可以非常快的完成物体检测任务。标准版本的YOLO在Titan X 的 GPU 上能达到45 FPS。更快的Fast YOLO检测速度可以达到155 FPS。而且,YOLO的mAP是之前其他实时物体检测系统的两倍以上。
  2. YOLO可以很好的避免背景错误(前后景分离)。 不像其他物体检测系统使用了滑窗region proposal,分类器只能得到图像的局部信息。YOLO在训练和测试时都能够看到一整张图像的信息,因此YOLO在检测物体时能很好的利用上下文信息,从而不容易在背景上预测出错误的物体信息。和Fast-R-CNN相比,YOLO的背景错误不到Fast-R-CNN的一半。
  3. 泛化能力强。作者在自然图像上训练好的结果在艺术作品中测试依然有很好的效果。
  4. 可以end to end优化。因为YOLO是one-stage算法,所以可以直接end to end优化整个检测。

缺点

  1. YOLO的物体检测精准度低于其他state-of-the-art的物体检测系统。
  2. YOLO容易产生物体的定位错误。
  3. YOLO对小物体的检测效果不好。(尤其是小物体,因为一个格只能预测1个物体类别,这个后面会提到)

算法原理

网络结构

网络结构图

YOLO检测网络包括24个卷积层和2个全连接层,YOLO网络借鉴了GoogLeNet分类网络结构。不同的是,YOLO未使用inception module,而是使用1x1卷积层(此处1x1卷积层的存在是为了跨通道信息整合)+3x3卷积层简单替代。

算法流程及部分定义

这部分是重点,会重点阐述。

  1. 首先,YOLO将图片分为S×S个网格,这里规定了物体的中心落在哪个格子,就由哪个格子负责预测这个物体,YOLO取S=7。比如上图中,假定左下角坐标为(0,0),狗的中心落在了(1,2)这个格子,那么(1,2)这个格子就负责预测这只狗。

  2. 其次,每个网格预测Bbounding boxes以及对应的confidence scores(置信度分数),作者定义每个bounding box的置信度分数Confidence=Pr(Object)*IOU^{truth}_{pred},如果这个栅格中不存在物体,则Pr(Object)=0confidence score为0;否则的话,confidence score则为predicted bounding boxground truth box之间的IOU(即predicted bounding boxGround Truth的交集比上它们的并集),在论文中每个网格预测2bounding box

  3. 每个预测出的bounding box5个预测值:(x,y,w,h)还有对应的confidence。下面解释一下这几个参数:
    x,y:xybounding box中心坐标,这里有个小技巧,x,y不直接回归中心点坐标数值,而是回归相对于格点左上角坐标的位移值。例如,一个格点中物体坐标为(1.1,1.1) ,那么在回归的时候使用(0.1,0.1),在使用时,加上格点左上角坐标(1,1)即可。
    w,h:wh则是物体长宽相对于整幅图像的比例
    confidence:confidence就是预测的bounding boxground truth boxIOU值。

  4. 每个网格还预测C个类别物体的条件概率Pr(Classi|Object)。注意这里是每个网格,而不是每个bounding box。 可以利用公式计算每个bounding box对于每个类别的score,这样可以判断对于某一类物体的预测情况。


即得到每个bounding box属于哪一类的confidence score。也就是说最后会得到的score矩阵,括号里面是bounding box的数量,一共有个格子,每个格子预测2bounding box20代表物体类别(YOLO v1采用20个物体类别)。接下来的操作都是20个类别轮流进行:在某个类别中(即矩阵的某一行),将得分少于阈值(0.2)的设置为0,然后再按得分从高到低排序。最后再用NMS算法去掉重复率较大的bounding box(NMS:针对某一类别,选择得分最大的bounding box,然后计算它和其它bounding boxIOU值,如果IOU大于0.5,说明重复率较大,该得分设为0,如果不大于0.5,则不改;这样一轮后,再选择剩下的score里面最大的那个bounding box,然后计算该bounding box和其它bounding boxIOU,重复以上过程直到最后)。最后每个bounding box20score取最大的score,如果这个score大于0,那么这个bounding box就是这个socre对应的类别(矩阵的行),如果小于0,说明这个bounding box里面没有物体,跳过即可。

  1. 说到现在,大家应该可以理解网络最后全连接的输出层是(7×7×30)了,7×7就是网格的数量,30=(2×5+20),也就是每个网格预测bounding box的数量(B=2)×预测框的参数(x,y,w,h,confidence 5个参数)+预测物体的类别数量(20),这里要注意,每个网格最后只会预测出一个物体,预测的bounding box的数量只能提高预测的精度,但最终也只能预测出一个物体,这也就可以理解前面说的YOLO的缺点之一——对小物体的检测效果不好,因为一个图片7*7个网格只能预测出49个物体。

损失函数

损失函数图
  • YOLO的损失函数乍一看比较长,其实我们可以理解为坐标误差(localization error)+分类误差(classification error)。但在训练过程中,如果将坐标误差和分类误差同等对待都采用均方差作为损失函数,这样是不合理的。因为在一个网格中,有很大的概率是没有物体的,那么在类别上的置信度是 0,这样对于其他少量的包含物体的网格而言,模型是不稳定的,训练容易发散。因此论文中加大了坐标误差的权重,也就是设置\lambda_{coord}=5,\lambda_{noobj}=0.5
  1. 第一行是预测框的中心点误差。其中1^{obj}_{ij}为控制函数,在标签中包含物体的那些格点中,该值为1;若格点不含有物体,该值为0,也就是只对含有物体的格子算损失。
  2. 第二行是预测框的长宽。这里大致和第一行计算的方式相同,但是多了一个根号。这是因为对于相等的误差值,大物体误差对检测的影响应小于小物体误差对检测的影响。例如,5个像素点的偏差,对于400500的预测框几乎没有影响,此时的IOU数值还是很大,但是对于1010的预测框影响就很大,加了根号就是为了减少这种影响。
  3. 第三行与第四行,都是预测框的置信度的损失。
  4. 第五行则是物体类别的概率损失

训练

训练部分我不多赘述,大家感兴趣的可以去看原文,但这里有一段吸引了我的注意:

YOLO predicts multiple bounding boxes per grid cell.At training time we only want one bounding box predictor to be responsible for each object. We assign one predictor to be “responsible” for predicting an object based on which prediction has the highest current IOU with the ground truth. This leads to specialization between the bounding box predictors. Each predictor gets better at predicting certain sizes, aspect ratios, or classes of object, improving overall recall.

每个格子预测多个矩形框,而在损失函数计算中,作者只对拥有最高IOU的框计算损失,其余框不进行修正。这让每个框(predictor)在尺寸、长宽比、或者某些类别上有更好的预测表现,总体的召回率得到提升

实验结果

下表给出了YOLO与其他目标检测算法,在速度和准确性方面的比较结果(使用VOC 2007数据集)。


实验结果图

作者还把YOLO和Fast R-CNN进行对比,进行了错误分析:


错误分析图

• Correct: correct class and IOU > .5
• Localization: correct class, .1 < IOU < .5
• Similar: class is similar, IOU > .1
• Other: class is wrong, IOU > .1
• Background: IOU < .1 for any object

我们可以看出,YOLO对背景内容的误判率(4.75%)比fast rcnn的误判率(13.6%)低很多。但是YOLO的定位准确率较差,占总误差比例的19.0%,而fast rcnn仅为8.6%。

参考文献

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

推荐阅读更多精彩内容