zoukankan      html  css  js  c++  java
  • YOLO理解

    一、YOLO v1

    1、网络结构

    20170530021508530

    (1)最后一层使用线性激活函数;

    (2)其他各层使用leaky ReLU的激活函数:

    637085-20160804120550184-381051244

    2、Training

    (1) 将原图划分为SxS的网格。如果一个目标的中心落入某个格子,这个格子就负责检测该目标,即Pr(object)=1。S取7;

    (2) 每个网格要预测C个类别概率Pr(classi|object),C为20(不需要表示背景这一类,因为这20类概率都为0即表示为背景)。用于训练用的每个网格类别标签为,如果实际bounding box的中心在该网格上,且是第i类,则对应位置的概率为1,其他类别概率为0,否则C个类的概率都为0;

    (3) 每个网格要预测B个bounding box:(x, y, w, h),论文中B取2。

    关于(x,y,w,h)的定义不多说,看如下例子:

    当某个格子含有object时,标签按上图方式计算。

    (4)每个网格还要预测B个condidence:

    如果格子内有物体,则Pr(Object)=1,此时置信度等于IoU。如果格子内没有物体,则Pr(Object)=0,此时置信度为0。当格子内有物体标签为1,没物体标签为0。(不知理解得是否正确

    (5)由于输入图像被分为SxS网格,每个网格包括B个bounding boxes,每个box有5个预测量:(x, y, w, h, confidence),每个网格还有预测C个类别的概率,所以网络输出是SxSx(5xB+C)大小。

    (6)损失函数:

    这里注意以下几点:

    1)image表示第i个网格,第j个bounding box含有object,image表示第i个网格,第j个bounding box不含有object,image表示第i个网格含有object;

    2)由于绝大部分网格中不包含目标,导致绝大部分box的confidence=0,所以在设计confidence误差时同等对待包含目标和不包含目标的box也是不合理的,否则会导致模型不稳定。所以在预测误差中乘以惩罚权重λnoobj=0.5。除此之外,同等对待4个值(x, y, w, h)的坐标预测误差与1个值的conference预测误差也不合理,所以在坐标预测误差误差之前乘以权重λcoord=5。

    3)对于大的box的小误差肯定要比小box的小误差影响更小,于是,采用对w,h,x,y取平方根的做法,因为平方根函数的图像随着x的增大会变得平缓。

    4)加入了image这一项,有这个好处,可以让没有物体的情况下confidence的输出预测值为较低(接近0)。也就是说,上式的损失函数,可以同时训练让confidence高与让confidence低两种情况。

    5)我们发现每一项loss的计算都是L2 loss,即使是分类问题也是。所以说yolo是把分类问题转为了回归问题。

    3、Inference

    (1)在test的时候,每个网格预测的class信息和B个bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:

    image

    等式左边第一项就是每个网格预测的类别概率,第二三项就是每个bounding box预测的confidence。这个乘积即表示box属于某一类的概率。

    1433065-20180803230410198-515290534

    (2)得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。

    (3)注意:

       1)由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。

       2)虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。这是YOLO方法的一个缺陷。

    4、疑惑及解答

    (1)训练时7x7xB个bbox的初始位置怎么确定?

    是根据各层的权重得到的,各层权重是随机初始化的,所以bbox的初始置是随机的。但bbox的中心点都在对应网格内。

    (2)训练时,当某个网格始终没有被检测物体的中心点选中,是不是该网格的对应的参数永远不会被训练?

    不会,因为在最后一层卷积层之后连接了两层全连接层,其他网格也会对当前网格有有影响的。

    参考:

    yolo回归型的物体检测 - Jinlong_Xu的博客 - CSDN博客  https://blog.csdn.net/jinlong_xu/article/details/77888100

    理解 YOLO 目标检测-图文外翻-AI研习社  https://ai.yanxishe.com/page/TextTranslation/1168

    end

  • 相关阅读:
    HTTP状态码
    TCP慢启动、拥塞避免、快速重传、快速恢复(转)
    优化js设计,防止浏览器假死(转)
    Firebug详解(转)
    WUST Online Judge
    WUST Online Judge
    WUST Online Judge
    WUST Online Judge
    WUST Online Judge
    WUST Online Judge
  • 原文地址:https://www.cnblogs.com/smbx-ztbz/p/10668303.html
Copyright © 2011-2022 走看看