• 【目标检测】one-stage------YOLO v1浅析-2015


    every blog every motto: There’s only one corner of the universe you can be sure of improving, and that’s your own self.
    https://blog.csdn.net/weixin_39190382?spm=1010.2135.3001.5343

    0. 前言

    在前面我们回顾了R-CNN系列,总体来说,先生成候选框,然后对候选框进行剔除,随后对目标进行分类和box回归,进而实现目标检测。
    简单说:

    • 生成候选框
    • 候选框分类

    总体来说,分了两步,即我们熟悉的two stage

    本文开始,我们正式进入one-stage!

    YOLO 是 You only look once 几个单词的缩写。

    1. 正文

    时间: 2015
    论文: https://arxiv.org/abs/1506.02640
    代码: https://github.com/pjreddie/darknet v1好像是C写的

    slides: https://docs.google.com/presentation/d/1kAa7NOamBt4calBU9iHgT8a86RRHz9Yz2oh4-GTdX6M/edit#slide=id.g15092aa245_0_430

    作者: Joseph Redmon∗ , Santosh Divvala∗†, Ross Girshick¶ , Ali Farhadi∗†
    作者单位: University of Washington∗, Allen Institute for AI†, Facebook AI Research¶

    1.1 网络结构

    在这里插入图片描述
    通过网络图我们看到,整体就是卷积池化等一些的堆叠,而不是像之前R-CNN那样分好多步,所以速度上自然快了不少。
    是一个端到端的网络,所以自然更加优雅!!!
    那到底是怎么通过简单的网络实现目标检测,这么一个“复杂的任务”的呢?

    1.2 算法流程

    1.2.1 核心介绍

    将图片分割成S × S大小的格网(grid),每个格网大小是相等的。(具体是怎么分割的呢?其实就是图片输入网络,最后输出的特征图大小为S × S的!!!)
    论文中S = 7
    在这里插入图片描述
    一共会有S*S个格子,每个格子预测B个bounding box(就是最后输出物体周围的那个框框,只是这里生成的比较多,后面会剔除),论文中B = 2,即,
    每个格子预测两个框框(bounding box)。

    怎么确定这个bounding box呢?
    中心坐标(x,y)
    长宽(h,w)
    这四个参数就唯一确定了一个框框(bounding box)
    最后还有置信度,就是预测这个框框(bounding box)确信程度。
    到这里,我们对一个框框(bounding box)会预测出5个参数为,(x , y , w , h , confidence)


    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    最终会预测7×7×2 = 98个框框,如下图
    confidence越高,框框越粗。
    在这里插入图片描述

    每个格子不仅要预测框框(bounding box)还需要预测其中的物体类别,使用one-hot编码。如果一共对C种物体进行识别,则最后(B×5 + C)预测值,他们保存在通道方向上。
    论文中预测20类,即C = 20。
    所以输出: (S,S,B×5 + C)
    实际为,(7,7,30),与网络图的最后输出一致(可返回去看前面的网络图)

    在这里插入图片描述

    1.2.2 部分细节

    a. bounding box

    bounding box可以确定物体的位置,它输出四个值,分别为x,y,h,w。
    在卷积神经网络中,常用套路是对数据进行归一化(或标准化),让数据落入0-1之间,更有利于训练,这里也不例外。
    x,y的值是相对格子左上角而言的,只要让它除以格子长宽即可,具体:

    x ′ = x g r i d _ w i d t h x' = \frac { x } {grid\_width} x=grid_widthx

    y ′ = y g r i d _ h e i g h t y' = \frac { y } {grid\_height} y=grid_heighty

    而,h,w却不能这样,因为bounding box可能会超出我们的格子。
    bounding box可能会超出我们的格子边界。
    bounding box可能会超出我们的格子边界。
    bounding box可能会超出我们的格子边界。

    如果除以格子长宽,数值会超过0-1之间,解决方法是,除以图片的长宽

    w ′ = w i m g _ w i d t h w' = \frac { w } {img\_width} w=img_widthw

    h ′ = h i m g _ h e i g h t h' = \frac { h } {img\_height} h=img_heighth

    下图显示了4个值的计算过程:
    在这里插入图片描述

    还剩最后一个置信度confidence,计算公式为:
    c o n f i d e n c e = P r ( o b j ) ∗ I o U t r u t h p r e d confidence = Pr(obj) * IoU_{truth}^{pred} confidence=Pr(obj)IoUtruthpred
    IoU是交并比,即真实框和预测框的比值。
    Pr(obj)是一个格子中是否有物体的概率,有物体为1,没有为0。

    b. loss

    损失函数一共分5项:
    在这里插入图片描述

    1 i j o b j 1_{ij}^{obj} 1ijobj表示这个格子是否有物体,如果有值为1,否则为0。
    1 i j n o b j 1_{ij}^{nobj} 1ijnobj相反。
    当一个格子有物体时,计算1、2、3、5项
    当一个格子没有物体时,计算第4项。

    λ c o o r d = 5 \lambda _{coord}= 5 λcoord=5

    λ n o b j = 0.5 \lambda _{nobj}= 0.5 λnobj=0.5

    放大第1、2项,缩小第4项。

    参考

    [1] https://zhuanlan.zhihu.com/p/94986199
    [2] https://zhuanlan.zhihu.com/p/297965943
    [3] https://bbs.huaweicloud.com/blogs/297764
    [4] https://blog.csdn.net/weixin_43702653/article/details/123959840?spm=1001.2014.3001.5501#t0
    [5] https://muyuuuu.github.io/2021/08/26/yolo-v1/
    [6] https://www.cnblogs.com/ywheunji/p/10808989.html

  • 相关阅读:
    【C++代码】最大二叉树,合并二叉树,二叉搜索树中的搜索,验证二叉搜索树--代码随想录
    Ubuntu下载odbc驱动
    JS学习762~780(注册事件+删除事件+DOM事件流+事件对象+阻止事件冒泡+事件委托鼠标事件+键盘事件)
    Jenkins 发测试邮件报错 553 Mail from must equal authorized user
    执行jar包中指定main方法
    linux 内核协助的探测
    百年难遇,四款简约大气的神仙软件,每一款都能惊艳到你
    Spring事务
    企业需要数据可视化的意义
    EtherCAT主站转Ethernet/IP网关
  • 原文地址:https://blog.csdn.net/weixin_39190382/article/details/126298644