OD_0_yolov1-v3全解析

1. Introduction

  1. yolo从v1-v2-v3做了一步步迭代,从速度、精度、强度都有了显著的提高。yolo的核心思想在v1中提出,在v2中结合其他研究者的工作做了各方面的改进,在v3中使用了许多技巧进一步优化。
  2. yolo将以往目标检测的two stage方法缩减成one stage,它将以往region proposal的过程融合到后续的分类任务中,将目标的定位和分类用一个end to end的神经网络作为回归问题求解。
  3. 效果与其他网络对比起来,很快,背景误判率低,通用性强,但定位精准性稍差。

2. yolov1

总体流程

yolo先将图像切分成s*s个grid(单元格),让每一个grid负责检测中心点落入该格的目标,预测出B个bounding box定位目标并给出目标类别。

  • bounding box中有一个5维坐标(x,y,w,h,C),分别代表框的位置、宽高、置信度。
  • x,y是bounding box中心位置相对于当前格子位置的偏移值,并且被归一化到0-1;
  • w和h是用原图的宽高进行归一化到0-1;
  • 置信度反映当前框是否包含物体以及位置的准确性,计算为C = Pr(object) * IOU^{truth}_{pred},IOU也归一化到0-1。
  • 整个模型输入是image,输出是S*S*(B*5+C)的张量。

结构

yolo网络由24个卷积层和2个全连接层组成。卷积层用于提取特征,全连接层用于定位和分类。
它借鉴了googleNet的结构,但是未使用inception模块,仅用11和33卷积核简单替代,减小了模型的复杂度。

Loss

它的loss很简单又很巧妙,使用误差平方和(sum-square error)
loss=\sum_{i=0}^{s^2}(coordError^2+iouError^2+classError^2
由于定位误差和分类误差对网络的loss的贡献值是不同的,因此加上了坐标误差权值\lambda_{coord},给无物体的IOU误差权值\lambda_{noobj}
又因为宽高错误对大物体的影响应该小于小物体的影响,所以给宽高加上了根号,但并不能完全解决这个问题。最后得到一个形式稍复杂一点的loss公式。

image.png

训练过程

  1. 预训练,使用前20个conv和1个ave pool和1个全连接做预训练。
  2. 用预训练得到的20层conv初始化yolo的前20层,为了提高精度,将输入图像从224*224 resize到448*448
  3. 使用了leaky ReLU,dropout,data augmentation
  4. 调整学习率。第一个epoch从0.001到0.01,然后0.01持续75epoch,0.001持续30epochs,0.0001持续30epochs

缺陷:

  1. 由于输出为全连接,所以输入图像分辨率大小都要一致
  2. 有很强的空间约束,每个格子只能预测一个目标。每个格子虽然有B个bounding box,但是只选择IOU最高的bounding box做预测,所以有B*5个坐标值,只有C个类别概率,输出为(B*5+C),而不是B*(5+C)。
  3. 对小物体的预测不好
  4. 对于长宽比例的适应性不是太强

3. yolov2

yolov2提高了精度、速度、广泛度。

精度的提高主要表现在对recall的提高。做了以下的修改。

  1. 加上BN,并去除了其他正则化方法如dropout,保证不过拟合。

  2. 使用高分辨率的图像分类器,将预训练的图像从224*224直接转为448*448。
    [图片上传中...(image.png-1ced27-1555252428685-0)]

  3. 加上了anchor机制

    • 移除了最后的全连接(使用conv和GAP替代)和一个池化层(为了使分辨率不减小一半),使recall从81%加到了88%。将图像从448改成416,因为该网络最后是将图像缩小了32倍,416除32会得到一个奇数13,这样可以使每个grid有一个唯一的中心点而不是像偶数有4个。

    • 由于传统anchor的大小比例是手动设置为(8,16,32)*(1:2,1:1,2:1)共9个,而如果能直接使用更好的anchor肯定会对网络效果有利。这里使用了一种改进的k-means算法来自动产生prior anchor(先验框)。在选择kmeans的距离时发现,L2距离在这个任务中不太适用。因为box尺寸大时其误差也会变大,而我们希望和尺寸关系较小,而和是否吻合ground truth较大,所以将距离函数设置为 d=1-IOU。在k定为5时,就取得了传统的9个anchor的效果;k=9时则远超传统anchor。


      image.png

      image.png
    • 引入了anchor后,训练变得不稳定。改进了anchor的坐标公式,之前r-cnn中是全局的偏移,这里改成预测相对于grid的偏移。使用坐标公式:xy=该grid左上角相对于图片的偏移cxcy+预测的xy。wh=先验框的宽高*e^twth


      image.png

      image.png
  4. 为了得到细粒度特征,类似resnet的shortcut引入了passthrough层,直接将高像素特征和低像素特征concatenate,使多级别的特征在最后的预测中都起到效果,提高了小物体的正确率。

  5. 采用多尺度图片训练。把原先固定输入图片大小改成了动态调整输入图像大小,每10个batch就在range(320,608,32)中随机选出一个大小训练。这个操作强制让网络学习多个分辨率的图像,提高了适应性。

速度上,

提出了darknet19模型,19*卷积层+5max pooling+1GAP(global average pooling),取得了很快的速度。

image.png

广泛度

主要体现在yolo9000可以对超过9000个类别的目标进行检测。引入了分层预测的机制,把类别标签从imagenet的横向改成了wordnet的图式构造。在预测一个物体时,逐层预测,使用条件概率,增加准确性。


image.png

4. yolov3

yolov3是增量式改动,也借鉴了他人的诸多工作,提出了darknet53模型。几个重点是:
1、多分类;2、多尺度;3、引入resnet。

定位上使用logistic regression

对anchor包围的部分进行评分,判定该位置是目标的可能性有多大。这一步是在predict之前进行的,可以去掉不必要anchor,可以减少计算量。
logistic回归就是用曲线对prior相对于 objectness score映射关系的线性建模。如果先验边界框与真实框的重叠度比之前的任何其他边界框都要好,则该值应该为1。 如果先验边界框不是最好的,但确实与真实对象的重叠超过某个阈值(这里是0.5),那么就忽略这次预测。YOLOv3只为每个真实对象分配一个边界框,如果先验边界框与真实对象不吻合,则不会产生坐标或类别预测损失,只会产生物体预测损失。

分类上不使用softmax,而采用logistic

支持多标签的预测,而非单标签。当一张图像经过特征提取后的某一类输出经过sigmoid函数约束后如果大于0.5,就表示属于该类。在loss函数中使用了二分类交叉熵。

多尺度预测(FPN)

将高维的特征和低维的特征连接,得到3层特征,对这三层特征分别做预测。每一个scale都输出S*S*B*(5+C)替代了之前的S*S*(B*5+C),将v2中提到的k-means的k改成了9。

基于yolov2的结构,提出了darknet53

使用了residual block。用了更少的浮点运算,并且每秒浮点运算更高。
整个v3中,取消了池化层,图像缩小是通过改变卷积核步长实现的,想缩小一半边长,就设stride=2。在最后的输出层,借鉴了FPN(feature pyramid networks)采用多尺度对不同size的目标进行检测。


image.png

5. 参考

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