• 【YOLO系列】YOLO.v2算法原理详解


    YOLO(You Only Look Once)系列算法原理

    前言 :详细介绍了yolo系列目标检测算法的原理和发展过程。

    系列:
    【YOLO系列】YOLO.v1算法原理详解
    【YOLO系列】YOLO.v2算法原理详解
    【YOLO系列】YOLO.v3算法原理详解
    【YOLO系列】YOLO.v4算法原理详解
    【YOLO系列】YOLO.v5算法原理详解

    2. YOLO.v2

    2.1 基本概述

    论文参考:YOLO9000: Better, Faster, Stronger

    yolo v1虽然简单便捷,但检测效果较差,相较于FRCNN和SSD,其性能有所不及。

    而 yolo v2 作为 v1 的接续,在原有基础上,做出了很多改进,从而实现了更好、更快、更强悍的目标检测性能,开始迎头赶上FRCNN,SSD网络。

    2.2 算法改进

    2.2.0 网络架构

    yolo v2整体网络架构如下所示

    在这里插入图片描述

    2.2.1 Batch Normalization

    v1

    • 使用了 dropout 技巧,防止过拟合

    v2

    • 删去 dropout,增加 Batch Normalization
    • BN 操作增加在卷积之后,激活层之前。该操作大大增加收敛速度,防止过拟合、梯度消失。

    Batch-Normalization

    • 对批样本的输出特征量分别进行归一化处理,分别使得每个特征数据均值为0,方差为1。该步骤不需要引入任何额外参数。
    • 对上一步输出做线性变换,即 Z ′ = α Z + β Z' = \alpha Z+\beta Z=αZ+β。这里的 α , β \alpha ,\beta α,β 是可训练的参数。该步骤是尝试恢复原本信息。

    说明

    • BN操作现在已经成了目标检测网络的标配。
    • 该方法使得mAP提升了2%。

    2.2.2 High Resolution Classifier

    v1

    • 采用 224 × 224 224\times 224 224×224 图像训练网络,采用 448 × 448 448\times 448 448×448 图像进行检测

    v2

    • 采用 224 × 224 224\times 224 224×224 图像进行预训练,再使用 448 × 448 448\times 448 448×448 图像进行微调训练(10 epochs),最后使用 448 × 448 448\times 448 448×448 检测

    说明

    • 这里即是训练时候的一些细节。

      可能考虑当时计算机算力低、图像标注样本太少等因素,存在了训练与测试图片分辨率不同的情况。这里不做深入讨论。

    • 该方法使得 mAP 提升了4%。

    2.2.3 Convolutional With Anchor Boxes

    v1

    • 一个方格 grid,有两个预测框 bounding box

      框的总数量: 7 × 7 × 2 = 98 7\times 7\times 2 = 98 7×7×2=98

    • 每个grid的两个框,只负责预测同一个物体

      yolov1输出向量: S × S × ( C + B × 5 ) S\times S\times (C+B\times 5) S×S×(C+B×5)

    • 最终是使用全连接层直接预测出框的坐标信息 ( x , y , w , h ) (x,y,w,h) (x,y,w,h)

    v2

    • 每个 grid 预先设定一组不同大小和宽高比的先验框

      gird num: 13 × 13 13\times 13 13×13
      anchor num: 9 9 9
      框总数量: 13 × 13 × 9 = 1521 13\times 13\times 9 = 1521 13×13×9=1521

    • 每个 grid 中的九个框,各自独立,可预测不同物体

      yolov2输出向量: S × S × B × ( C + 5 ) S\times S\times B\times (C+5) S×S×B×(C+5)

    • 删去全连接层,删去一个池化层,增加了下采样操作(下述)

    • 预测框输出 为 先验框的微调偏移量

      更快收敛,更好训练

    说明

    • 该方法使得 mAP 降低 0.2%,召回率 recall 提升 7%。

    2.2.4 Dimension Cluster

    关于聚类算法原理参见: 机器学习之聚类

    v1

    • None
    • Faster R-CNN 中,RPN 网络是手动规定 anchor 尺寸和大小

    v2

    • 使用聚类算法获得先验框的尺寸大小

    说明

    • 可以得到更符合样本特点的先验框尺寸,减少网络微调的复杂度

    • 该方法使得 mAP 提升了4.8%。

    2.2.5 Direct Location Prediction

    v1

    • None

    • Faster R-CNN 中,RPN 从偏移量得到预测框坐标计算方式如下
      在这里插入图片描述

      该种计算方法下,训练值(即偏移量 t x , t y t_x, t_y tx,ty ) 无限制范围,因此预测框中心坐标可以为任意位置。这样会导致预测框训练过程中非常不稳定,从而导致模型不稳定。

    v2

    • 预测(x,y,w,h):调整新的计算方法,限制预测框范围
      在这里插入图片描述

      1.方格 grid cell 大小被归一化为1*1
      2. σ ( x ) \sigma(x) σ(x)函数范围在 [ 0 , 1 ] [0,1] [0,1]
      3. e x e^x ex 函数范围在 [ 1 , + ∞ ] [1,+\infty] [1,+]
      在这里插入图片描述

    • 预测 c

    说明

    • 该方法使得 mAP 提升了 5%。

    σ ( t 0 ) = P r ( o b j e c t ) ∗ I O U ( b , o b j e c t ) \sigma(t_0) = Pr(object)*IOU(b, object) σ(t0)=Pr(object)IOU(b,object)

    2.2.6 Fine-Grained Feature

    网络使用了下采样,输入从416*416变成了13*13,下采样了32倍。
    对于小目标来说,如此下采样可能导致其特征完全丧失。
    因此需要一些手段来保留小目标特征。

    v1

    • None
    • Faster R-CNN 和 SSD 使用不同 feature maps 的 Proposal Networks 解决多尺度目标识别问题

    v2

    • 使用 passthrough 层方法

      引申 yolov5 Focus 结构

    在这里插入图片描述

    说明

    • 该方法使得 mAP 提升了 1%。

    2.2.7 Multi-Scale Training

    v1

    • 输入尺寸被限制在 448*448*3

    v2

    • 输入尺寸没有严格限制,但因使用下采样,且下采样倍数为 32,因此通常输入尺寸为 32 的倍数。
    • 通过改变输入图像尺寸,使用多尺度图像进行训练

    说明

    • 该方法使得 mAP 提升了 1.4%。

    2.3 细节实现

    2.3.1 卷积网络结构(DarkNet-19)

    从2.2.0 节知道,论文所用卷积神经网络结构,即Backbone 是基于 DarkNet。

    完整 DarkNet 网络如下所示

    在这里插入图片描述

    yolo v2 使用了图中蓝色框选位置的结构,对应与 2.2.0 节蓝色框选位置。

    2.3.2 损失函数

    标签示意如下:

    在这里插入图片描述

    • 每个 grid 共有 B 个 anchor box
    • 每个anchor box 都有如上图所示的 ( 5 + C ) (5+C) (5+C) 个值

      yolo v1中是每个 grid 有 ( B × 5 + c ) (B\times 5+c) (B×5+c) 个值

    yolo v2中损失函数共包含三项,即

    • 坐标预测损失
    • 置信度预测损失
    • 类别预测损失。

    2.4 总结

    yolo v2 相较于 yolo v1 使用的相关技巧及其提升如下:
    在这里插入图片描述

  • 相关阅读:
    查询并关闭被占用的端口
    上海亚商投顾:沪指创反弹新高 房地产板块掀涨停潮
    山石网科等级保护培训笔记
    面试官:Mybatis中 Dao接口和XML文件的SQL如何建立关联?
    step-by-step 配置 gtest 在 vscode 测试 c/c++(Ubuntu 环境下示范)
    连续10年霸榜第一?程序员「最常用」的编程语言是它?
    使用 htmx 构建交互式 Web 应用
    【C++】day2学习成果:引用、结构体等等。。。
    第四十六章 开发自定义标签 - 标签匹配 操作中的运行时表达式
    网络安全-防火墙安全加固
  • 原文地址:https://blog.csdn.net/deepsprings/article/details/126251627