zoukankan      html  css  js  c++  java
  • YOLOV2相对于YOLOV1的改进

    1、YOLOV1有两个缺点:

    (1)定位不够准确。

    (2)和基于region proposal类的方法相比找回率更低。

    2、Batch Normalization

    YOLOV1中也有BN,但是YOLOV2在加入BN后把dropout去掉了,实验证明可以提高2%的mAP.

    3、High Resolution Classifier

    这个主要是介绍了一下检测模型的一般训练策略。一般都不会从随机初始化所有的参数开始的,一般都是用预训练好的网络来fine-tuning自己的网络,预训练的网络一般是在ImageNet上训练好的分类网络。

    在fine-tuning的时候:

    (1)YOLOV1预训练的时候使用224×224的输入,检测的时候采用的是448×448的输入,这会导致分类切换到检测的时候,模型需要适应图像分辨率的改变。

    (2)YOLOV2中将预训练分成两步:先用224×224的输入来训练大概160个epoch,然后再把输入调整到448×448再训练10个epoch,然后再与训练好的模型上进行fine-tuning,检测的时候用448×448就可以顺利过度了。这个方法竟然提高了4%的mAP.

    4、Convolutional With Anchor Boxes

    这段作者简单借鉴了Fast RCNN的做法,引入anchor.

    YOLOV2主要做了下面的改变:

    a. 删除了全链接层和最后一个pooling层,使得最后的卷积层可以有更高的分辨率。

    b. 缩减网络,用416×416的输入代替448×448,这样做是希望得到的特征图都是奇数大小的宽和高,奇数大小的宽和高会使得每个特征图在划分cell的时候只有一个中心cell,因为大的目标一般会占据图像的中心,所以希望用一个中心cell去预测,而不是四个中心cell。

    YOLOV1中将输入图像分成7×7的网格,每个网格预测2个bounding box,一共只有7×7×2=98个box.

    YOLOV2中引入anchor boxes,输出feature map大小为13×13,每个cell有5个anchor box预测得到5个bounding box,一共有13×13×5=845个box。增加box的数量是为了提高目标的定位准确率。

    5、Dimension clusters

    作者说它们试图把anchor box用在YOLO的时候遇到了两个issues.

    (1)Faster R-CNN中的anchor box的大小和比例是按照经验来设定的(hand picked),然后在训练的时候调整anchor box的尺寸。

    作者想的是不是可以通过一定的方式事先先确定这样的候选框呢,最终作者采用了k-means方法,但是如果用标准的K-means(欧式距离)的话会导致大的box会比小的box获得更大的误差,更准确的方式是使用IOU来算,所以作者定义了IOU距离,按照IOU越高距离越小的需求,很容易写出这样的公式:

    d(box,centroid) = 1- IOU(box, centroid)

    综合来说,随着K的增加,平均IOU是增加的,但是为了综合考虑模型的复杂度和找回率。最终选择K=5。

    最终实验对比发现:

    (1)采用聚类的5个box就能达到Fast-RCNN中9个box的效果。

    (2)采用聚类分析得到的先验框比手动设置的平均的IOU值更高,模型更容易训练和学习。

    6、直接位置预测

    在引入锚框时,遇到第二个问题:模型不稳定,尤其是训练早期,作者认为这种不稳定来自边界框中心位置的预测。

    基于候选框的网络一般是通过预测相对锚框中心的偏移值来预测边界框的中心坐标。

    就会向右偏移一个锚框的宽度。所以,每一个预测的边界框可能处于图片中的任何位置,这就导致了模型的不稳定。

    YOLOV2沿用了YOLO中的方法,预测边界框的中心点相对于网格左上角的偏移值,每个网格有5个锚框来预测5个边界框,每个边界框得到5个值:

    为了将边界框的中心约束到当前网格中,利用sigmoid函数将tx,ty进行归一化处理,使得模型更加稳定。通过对比实验发现,采用维度聚类与直接位置预测比单纯使用锚框的方法精度提高5%。

    7、细粒度特征(Fine-Grained Features)

    YOLOV2最后一层卷积层输出是13×13的特征图,这个分辨率对于大尺寸物体的检测已经足够,但对于小尺寸物体不一定奏效。越小的物体,经过层层池化,体现在最后特征图中的可能性越小。

    作者通过添加直通层(passthrough Layer)的方式将前一层高分辨率的特征图连接到低分辨率的特征图上:前一层的特征图维度为26×26×512,最后一层的特征图的维度为13×13×1024,通过直通层将26×26×512的特征图映射到13×13×2048,然后将其与最后一层的特征图连接为13×13×(1024+2048)的特征图,最后在此特征上进行卷积预测。

    通过添加直通层,使得YOLOV2精度提高1%。

    8、多尺度训练

    由于YOLOV2去掉了全连接层,使得网络理论上可以接收任意尺寸的输入,这使得进行多尺度训练变得可行。

    YOLOV2共进行了5次最大值池化,即下采样32倍,因此在进行多尺度训练时,采用32的整数倍尺寸作为输入尺寸,分别为:320、352、384、416、448、480、512、544、576、608。

    在进行训练时,每10个批次从上述是个尺寸中随机选择一个,经过这样的训练,相同的网络可以预测不同分辨率的图像。

    9、新的基础网络(darknet-19)

    YOLOV2提出一种叫做DarkNet-19的分类网络,其对224×224的图像做一次前向传播需要55.8亿次浮点运算,比YOLOV1中使用的卷积网络更快,精度更高。

    可以看到,网络中使用了大量的3×3卷积,在每一次池化操作之后把数据通道数翻倍

    通过上述的改进,相对于YOLO,YOLOV2在准确度和速度上都有提升,在VOC2007上的准确度从65.4%提升到78.6%,在输入为544×544的情况下,真了为40fps,当分辨率下降到228×228时,帧率则能达到90fps.

    参考:https://www.jianshu.com/p/3c3b49ef4ffc

  • 相关阅读:
    js如何实现上拉加载更多...
    基于epoll的TP传输层实现
    ActiveMQ简介与安装
    序列化和反序列化实现
    NoSQL之Redis数据库初探
    分布式缓存之memcached--命令测试
    Java正则表达式测试用例
    Java之正则表达式
    Java反射机制练习(增强可扩展性)
    Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)
  • 原文地址:https://www.cnblogs.com/zhibei/p/12362290.html
Copyright © 2011-2022 走看看