美文网首页机器学习
yolov2算法详解

yolov2算法详解

作者: ce0b74704937 | 来源:发表于2020-09-30 18:14 被阅读0次

    yolov2原文叫《YOLO9000:Better, Faster, Stronger》

    yolov2相对于yolo来说的优势就是文章题目所说的,更好,更快,更强。下面来看看yolov2如何达到这个目的的。

    一、如何更快

    1. 使用BN

    随着BN的提出,且在各种网络大量的引入,yolov2引入了BN(batch normalization)。文章还发现BN不仅改善了网络性能,还有一定的正则化的作用,因此文章移除了yolo中使用的dropout操作。

    关于BN具体的计算,可以参考BN及其改进算法

    2. 输入分辨率高

    在yolov1的时候采用的是224 \times 224大小的图片来进行分类任务,448 \times 448大小的图片来进行检测任务。

    文章认为直接切换为高分辨率,可能对网络性能有所伤害。yolov2在使用了224 \times 224大小的图片训练的分类网络中,再用448 \times 448大小的图片来训练10轮分类网络,之后用得到的网络来训练检测网络。

    3. 引入anchor

    借助fasterrcnn的思想,预测坐标的偏移量比直接预测坐标更容易学习,所以yolov2引入anchor的思想。

    fasterrcn预测方式如下:
    x = (t_x * w_a) + x_a
    y = (t_y * h_a) + y_a
    上式中,x,y是预测的框中心,x_ay_a是anchor框的中心点坐标,w_ah_a是anchor框的宽和高,t_xt_y是网络的输出。

    注意:这里与yolo9000原文不同的是,上式中是‘-’号,但是按照fasterrcnn的公式推导其实应该为‘+’,这样更好理解

    fasterrcnn这种训练方式对于t_xt_y没有约束,使得训练早期坐标不容易稳定。

    所以yolov2的预测方式如下:
    b_x = \sigma(t_x) + c_x
    b_y = \sigma(t_y) + c_y
    b_w = p_w e^{t_w}
    b_h = p_h e^{t_h}
    Pr(object) * IOU(b, object) = \sigma(t_o)
    上式中,t_x,t_y,t_w,t_h,t_o分别为预测参数,b_x,b_y,b_w,b_h为归一化的预测框的中心坐标和长宽,c_x,c_y是当前网格距离左上角的距离,该距离也为规划化后的距离,p_w, p_h表示anchor的长宽,\sigma表示sigmoid函数。上述中的归一化指的是每个网格的长宽为1。这里可以看出因为加了sigmoid函数,使得预测出的\sigma(t_x),\sigma(t_y)始终为0-1的,就不容易造成训练早期的坐标不稳定了。

    图1.png

    在yolov1中,因为每个网格负责预测两个框,对于大小为7\times 7大小的featuremap来说,yolov1只能预测出7 * 7 * 2 = 98个预测框。但是引入anchor后,对于13 \times 13的featuremap来说,可以预测出13 * 13 * 9 = 1521个预测框(这里假定使用更大的分辨率图像作为输入,且anchor类型有9累)。所以引入anchor对于模型性能的提升,增大了优化的空间。(虽然引入anchor,使得文章的map下降了,但是召回升高了很多)

    4. anchor的定义

    yolov2中anchor定义不同于fasterrcnn是人工预设的比例和大小,文中通过k-means来聚类出k类anchor类,文章最终k=5。这里聚类时距离的度量值如下定义:
    d(box, centroid)=1-IOU(box,centroid)
    上式中centroid为聚类中心,box为其它待聚类的框,IOU为iou计算公式。可以看出IOU越大,两个框越近。

    5. 细粒度的特征(Fine-Grained Features)

    为了对小物体有更好的检测效果,文章想直接利用更为精细的特征来检测小物体,所以在进行最终的下采样之前,引入了passthrough的方法,该方法利用了下采样之前的特征是的对小物体的检测更为精确。
    关于passthrough方法,网友给出的图非常详细,如下图所示:


    图2.jpg
    6. 多尺度训练

    yolov1中对于检测任务采用的是448 \times 488来训练网络。yolov2为了适应多尺度的物体检测,网络的训练时采用多种图片尺寸,这些尺寸为32的倍数,有\{320, 352, ..., 608\}。训练过程中,每10个batches后随机选择这些尺度中的一个输入网络进行训练。

    二、如何更快

    文中提出了一个新的网络结构叫做Darknet-19,网络结构如下图所示。


    图3.png

    表中展示的是分1000类的网络结构。

    对于检测任务,网络结构相对上述分类结构有所改动。

    1. 使用了三个3*3输出通道为1024的卷积替代上表中最后的卷积操作(最后的卷积不是1000那个输出层,而是输出前那个1024层)
    2. 将最后的3*3*512输出的feature接上述的passthrough结构,利用更精细的特征
    3. 对于输出,因为预测5种anchor的回归结果,且每个框分20类的概率,1类是否为正样本的概率和4个坐标回归参数共25个参数,每个anchor点需要预测125个值。

    三、更强

    文章的这部分主要是用来证明yolov2有较强的特征提取性能,采用了一些整理标签的方法,融合了COCO和Imagenet来做一些实验。

    参考
    1. https://arxiv.org/abs/1612.08242
    2. https://zhuanlan.zhihu.com/p/47575929
    3. https://zhuanlan.zhihu.com/p/35325884

    相关文章

      网友评论

        本文标题:yolov2算法详解

        本文链接:https://www.haomeiwen.com/subject/nrgfyktx.html