YOLO系列学习记录-原理部分

一、YOLO v1(Paper:You Only Look Once: Unified, Real-Time Object Detection)

  • 简介
    yolo v1是yolo系列的初作,也是one-stage detector鼻祖、real-time detector鼻祖,当然也为后来的v2、v3奠定了基础。它是一种one-stage网络结构(不需额外一个stage来生成RP,只通过一个stage就直接输出bbox和label),因此比起two-stage的faster R-CNN来说,会比较简单。它最大的优点就是非常快(45fps).
    v1的基本思想是这样的:对于预测框的位置、大小及物体的分类都通过CNN预测
    其中最重要的就是其分而治之的思想。也就是将输入的图片先划分成SxS的网格,再对每个区域生成 个bbox,每个bbox去预测中心点落在该格的物体,但是每个格子生成的所有个bbox共享一个分类score

  • 实现
    一幅图像分成SxS个网格(grid cell),如果某个object的中心落在这个网格中,则相应的,这个网格就负责预测这个object
    每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置(x,y,w,h)(也即物体中心坐标及box的宽高)之外,还要附带预测一个confidence值。 这个confidence涵盖了所预测的box中含有object的置信度和这个box预测的有多准两重信息。
    confidence

  • 关于confidence的计算:prove
    这个公式由两项组成:第一项需判断object是否落在这个网格中(Pr(Object)),是取1,否取取0。第二项则是预测的bbox和实际之间的IOU(一个简单的测量标准)值。
    因此,每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。对于整个SxS个网格每个网格要预测B个bounding box还要预测C个categories输出就是S x S x (5*B+C)的一个tensor

  • 关于每个bounding box的class-specific confidence score的计算:
    score
    这个公式左边第一项即每个网格预测的类别信息,第二第三项就是刚才所谈到的每个bounding box所预测的confidence值。最后就得出每个bounding box对于其预测的label类别对应score。
    得到这个score后,就设置阈值(好坏的界限),将score较低的bounding box 过滤掉,最后对保留下来的bbox进行NMS处理(非极大值抑制算法:去除冗余的bbox,以加快预测的效率),得到最终的预测结果。

  • 网络结构
    web
    这个网络有24个卷积层,后面跟着2个全连接层。该模型用ImageNet以一半的分辨率(224×224)输入图像预先训练卷积层,然后将分辨率加倍再进行检测。
    对于预测Pascal VOC数据集,取S=7,B=2,C=20。所以最后输出的tensor为7×7×30.

  • 损失函数
    loss
    yolo是端到端(end-to-end)的训练,只需一个损失函数,关注网络输入端和输出端。
    关于这个损失函数,均采用平方和作差,它由对坐标的预测(x,y,w,h),是否含object的预测和对类别的预测三部分组成的。(注:如果目标存在于该网格单元中,则损失函数仅惩罚分类错误。如果预测器“负责”实际边界框(即该网格单元中具有最高IOU的预测器),则它也仅惩罚边界框坐标错误。)

  • 不足

  1. YOLO对相互靠的很近的物体,还有很小的群体 检测效果不好,这是因为一个网格中只预测了两个框,并且只属于一类。
  2. 很难泛化到新的、不常见的长宽比或其他情况的目标。
  3. 由于损失函数的问题,定位误差是影响检测效果的主要原因。尤其是大小物体的处理上,还有待加强。

二、YOLO v2 & YOLO9000(Paper:YOLO9000: Better, Faster, Stronger)

  • 简介
    作者在YOLO基础上进行了一系列的改进,产生了YOLOv2。YOLOv2在PASCAL VOC和COCO数据集上获得了目前最好的结果(state of the art)。然后,采用多尺度训练方法,YOLOv2可以根据速度和精确度需求调整输入尺寸。67FPS时,YOLOv2在VOC2007数据集上可以达到76.8mAP;40FPS,可以达到78.6mAP,比目前最好的Faster R-CNN和SSD精确度更高,检测速度更快。最后提出了目标检测和分类的共训练方法。采用该方法,作者分别在COCO目标检测数据集和ImageNet分类数据集上训练了YOLO9000。(YOLO9000可以实时识别超过9000类别。)联合训练使YOLO9000可以预测没有labelled的目标检测数据。YOLO9000在ImageNet验证集(200类)上获得了19.7mAP。其中,156类没有出现在COCO训练集中,YOLO9000获得了16.0mAP。
    从第一部分可知,YOLO相对于目前最好的目标检测系统存在的问题是精确度不够。错误项分析显示,相对于Fast R-CNN,YOLO在目标定位方面错误率较高。因此,对于YOLO的改进集中于在保持分类准确率的基础上增强定位精确度

  • Batch Normalization(BN正则化)
    Batch Normalization可以提高模型收敛速度,减少过拟合。作者在所有卷积层应用了Batch Normalization,使结果提升了2%。同时,Batch Normalization的应用,去除了dropout(在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。),而不会过拟合。(所谓的BN是指在数据经过一层进入下一层之前,需要对数据进行归一化,使之均值为0,方差为1。这样可以使得各层的参数量级上没有太大的差别。)

  • High Resolution Classifier(高分辨率分类器)
    目前最好的图像分类器采用基于ImageNet数据集预训练模型。大部分类器输入图像尺寸小于256×256。而YOLO接受图像尺寸为224×224。但在YOLOv2中,作者首先采用448×448分辨率的ImageNet数据finetune(微调,即利用原有模型的参数信息,作为我们要训练的新的模型的初始化参数,这个新的模型可以和原来一样也可以增添几个层)使网络适应高分辨率输入,然后将该网络用于目标检测任务finetune。高分辨率输入使结果提升了4%mAP

  • Convolutional With Anchor Boxes(采用anchor boxes预测)
    YOLO采用全连接层来直接预测bounding boxes,而Fast R-CNN采用人工选择的bounding boxes。Fast R-CNN中的 region proposal network仅采用卷积层来预测固定的boxes(anchor boxes)的偏移和置信度。
    作者在YOLO的基础上,去除了YOLO的全连接层,采用固定框(anchor boxes)来预测bounding boxes。首先,去除了一个pooling层来提高卷积层输出分辨率。然后,修改网络输入尺寸:由448×448改为416,使特征图只有一个中心。这样做使得大物体更有可能出现在图像中心。YOLO的卷积层下采样率为32,因此输入尺寸变为416,输出尺寸为13×13。
    由于
    采用anchor boxes,提升了精确度
    。YOLO每张图片预测98个boxes,但是采用anchor boxes,每张图片可以预测超过1000个boxes。YOLO模型精确度为69.5mAP,recall为81%,而采用anchor boxes方法后,结果为69.2mAP,recall为88%。

  • Dimension Clusters(维度聚类)
    在YOLO模型上采用anchor boxes有两个关键。
    第一,box维度为人工选择模型能学会适应boxes,但是如果人工选择更好的boxes,可以让模型更加容易学习。采用K-means聚类方法来自动选择最佳的初始boxes。(一般的聚类是使用欧氏距离,这会导致ground truth大的比ground truth小的更受误差的影响,而且在实际的评价中是使用IoU的,很自然的想到用IoU来做聚类尺度)
    实际的度量尺度公式如下:
    聚类
    对COCO和VOC2007数据集的结果如下:
    result
    左图是聚类数目与Avg IoU的关系,论文选择是k=5,在模型复杂度与召回率之间取一个折中值。右图是k=5下的anchor boxes的形状。

  • Direct location prediction(直接预测中心点)
    刚才所说的采用anchor boxes的第二个关键就是模型不稳定,尤其是前面几次迭代过程。不稳定因素来源于预测boxes位置(x,y)。作者将预测偏移量改变为YOLO的预测grid cell的位置匹配性(location coordinate),将预测值限定在0-1范围内(用Sigmoid函数),增强稳定性。网络对feature map中的每个cell预测5个bounding boxes。对每一个bounding boxes,模型预测5个匹配性值 ( t x , t y , t w , t h , t o ) (t_{x},t_{y} ,t_{w} ,t_{h} ,t_{o} ) (tx,ty,tw,th,to)采用聚类方法选择boxes维度和直接预测bounding boxes中心位置提高YOLO将近5%准确率
    no

  • Fine-Grained Features(更精确的特征)
    改进后的YOLO对13×13的feature map进行目标检测。更精确的特征(finer grained features)可以提高对于小目标的检测。作者向网络加入passtrough层(利用更精细的特征图)以增加特征。passthrough类似于ResNet,将高分辨率特征和低分辨率特征结合,使26×26×512的特征图转化为13×13×2048的特征图。该改进增加了1%的性能

  • Multi-Scale Training(多尺度训练)
    最初的YOLO输入尺寸为448×448,加入anchor boxes后,输入尺寸为416×416。模型只包含卷积层和pooling 层,因此可以随时改变输入尺寸
    作者在训练时,每隔几轮便改变模型输入尺寸,以使模型对不同尺寸图像具有鲁棒性。每个10batches,模型随机选择一种新的输入图像尺寸(320,352,…608,32的倍数,因为模型下采样因子为32),改变模型输入尺寸,继续训练。
    该训练规则强迫模型取适应不同的输入分辨率。模型对于小尺寸的输入处理速度更快,因此YOLOv2可以按照需求调节速度和准确率。在低分辨率情况下(288×288),YOLOv2可以在保持和Fast R-CNN持平的准确率的情况下,处理速度可以达到90FPS。在高分辨率情况下,YOLOv2在VOC2007数据集上准确率可以达到state of the art(78.6mAP)。

  • 网络(Darknet-19)
    大多数detection的框架是建立在VGG-16上的,VGG-16在ImageNet上能达到90%的top-5,但是单张图片需要30.69 billion 浮点运算,而YOLO2是依赖于DarkNet-19(作者设计了一个新的分类网络)的结构,这个模型在ImageNet上能达到91%的top-5,并且单张图片只需要5.58 billion 浮点运算。
    YOLOv2的基础模型结构如下表所示:
    19
    可以看出DarkNet也是大量使用了3×3和1×1的小卷积核,YOLO2在DarkNet的基础上添加了Batch Normalization保证模型稳定,加速了模型收敛。

  • Hierarchical classification(多层分类)
    ImageNet的数据标签来源于WordNet,具有一定层次结构。作者根据WordNet建立了ImageNet标签的树(WordTree)。作者采用标签树训练了Darknet-19,结果如下:
    re
    作者采用wordtree综合ImageNet和COCO数据集(带有分级语法树的YOLOv2,进化为了YOLO9000):
    ree
    有了这种映射机制,WordTree就可以将不同的数据集结合起来,由于WordTree本身变化多端,所以可以将大多数的数据集结合起来。
    采用这种联合训练,YOLO9000从COCO检测数据集中学习如何在图片中寻找物体,从ImageNet数据集中学习更广泛的物体分类。

三、YOLO v3(Paper:YOLOv3: An Incremental Improvement

作者在YOLO2的基础上采用了更多的scale(3种scale)加深了DarkNet(DarkNet53),使得YOLOv3能够更好地抽取特征和保留小物体的位置信息。虽然速度慢了一倍多(但是依然很快),却拉高了不少精度(尤其是AP50)。

且大大改善了YOLO之前的一大弊病:小物体漏检。使之在APs这一单项上能够达到和 FPN 同级别,且仅逊于RetinaNet的程度。
YOLO v3继承了YOLOv2的bbox预测任务的方法,对bbox分类任务进行了修改,即用简单的logistic替换下softmax
DarkNet-53:
53
因此,yolov3就是对yolov2对小物体的检测不敏感的不足做了一定的调整,增加了多尺度预测使得yolov3在对小物体检测方便有了好转。
另外,关于yolov3中尝试过的却并未实质上提升效果的想法:
① 想对Anchor box的x,y偏移使用线性激活方式做一个对box宽高倍数的预测,结果发现没有好的表现并且是模型不稳定。
②对anchor box的x, y使用线性的预测,而不是使用逻辑回归,实验结果发现这样做使他们模型的mAP掉了。
③使用Focal loss,测试结果还是掉mAP。
测试效果:
效果

四、Reference

https://blog.csdn.net/leviopku/article/details/82588059
https://blog.csdn.net/jningwei/article/details/80010567
https://blog.csdn.net/tangwei2014/article/details/50915317
https://zhuanlan.zhihu.com/p/25052190
https://blog.csdn.net/u011974639/article/details/78208896
https://blog.csdn.net/jningwei/article/details/80022603
https://blog.csdn.net/wfei101/article/details/80011474

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值