博客
关于我
Yolov1 v2 v3 原理学习笔记
阅读量:686 次
发布时间:2019-03-17

本文共 2445 字,大约阅读时间需要 8 分钟。

Yolov1(2016)

论文思想

YOLOv1的主要思想是将一个图像划分为S×S个网格(Grid Cell),每个网格负责预测图像中落在该网格中心的目标的边界框和类别概率。具体来说,每个网格负责预测2个边界框和20个类别的分值,形状为(S×S×(5B + C))的 tensor,其中:

  • S:网格的边长(如S=7)
  • B:边界框的数量(如B=2)
  • C:类别数量(如C=20)边界框的预测包括目标的中心坐标(x, y)、宽度和高度(w, h)以及信度(score),信度定义为目标存在的概率乘以交并上确方(IOU)。
  • x和y的取值范围为[0,1]
  • w和h的取值范围也为[0,1]
  • 信度值可理解为IOU,当目标存在时,信度值即为IOU。

网络结构

YOLOv1的网络架构包括:

  • Backbone(主干):负责提取图像的特征,常用VGG16、ResNet-50等模型
  • Head(头部):预测边界框和类别,直接在主干基础上添加可学习的层
  • Neck(颈部):位于主干和头部之间,设计为FPN(卷积升样网络)或PAN(位置感受模块)等结构,用于更好地利用主干提取的特征

损失函数

YOLOv1采用交叉熵损失函数,但仅针对分类任务和定位任务分别计算损失:

  • 分类损失:基于对分类分数的损失(Log Loss)
  • 定位损失:基于边界框预测的凸差损失通过实验验证,该损失函数能很好地结合分类和定位任务,提升目标检测的性能。
  • 优缺点

    YOLOv1的主要缺点是:

  • 对于小目标群和极端姿态的目标表现不佳
  • 边界框定位不够准确
  • Yolov2(2017)

    简介

    YOLOv2通过多项改进提升了模型的检测精度(mAP提升了2%-4%)。改进包括:

  • 将Batch Normalization引入网络,每个卷积层后添加批归一化层,防止过拟合
  • 提高分类网络的分辨率,让分类任务更鲁棒
  • 引用Faster R-CNN的锚框(Anchor Boxes)多个预先框,提升召回率
  • 通过维度聚类生成锚框,提高锚框的精度
  • 直接预测坐标,减少对锚框的依赖
  • 分析细粒度特征,将多尺度特征融合到检测网络中去
  • 引入多尺度训练方法,让模型对不同分辨率的图像更鲁棒
  • 核心改进

    YOLOv2采用Xpansion Connection inский网络架构(Expand Conv Netz,即DarkNet),并进行如下改进:

    • Batch Normalization(BN):每个卷积层后增加BN层,免疫噪声对模型训练的影响
    • 多尺度训练:随机选择不同的输入分辨率进行训练,比如320、352到608
    • 锚框生成方式:通过维度聚类生成先验框,提高锚框的多样性
    • 直接预测坐标:不通过offset方法预测目标的位置,如YOLOv1那样
    • 细粒度特征融合:通过passthrough层将低级特征与高级特征结合
    • 多样数据增强:将4张训练图像拼接成一个超级图像,丰富训练数据

    各改进项目对mAP提升贡献:

    • 7种方法均提升了mAP,最高达5%的提升
    • 单独使用Fine-Grained Features或Multi-Scale Training也分别提升了1%的mAP

    Yolov3(2018)

    网络架构

    YOLOv3的网络结构如下:

    • Backbone:采用DarkNet-53主干网络
    • Head:包含由convolution blocks和最后的预测层组成的目标检测网络
    • Neck:与FPN类似,起到整合全局和局部特征的作用

    边界框预测

    YOLOv3在预测边界框时采取与Faster R-CNN中autoanchor类似的方法:

    • 将一个真实目标框匹配到多个先验框(prior boxes)
    • 选择与真实框重合程度最高的先验框作为正样本(positive sample)
    • 剩余不匹配的先验框视为负样本(negative sample),仅计算objectness损失
    • 在预测时不使用offset,而是直接预测边界框的中心位置,这种方法比offset方法更稳定

    损失函数

    YOLOv3在损失函数上进行了重要改进:

  • 分类损失:改为Logistic Loss,解耦了类别概率和边界框预测
  • 定位损失:采用CIOU损失函数,计算边界框的质心误差、面积误差和长宽比误差
  • 引入autoanchor策略,自动生成优化的先验框,避免了针对特定锚框过拟合
  • 通过alpha平衡正负样本权重,降低负样本的不平衡
  • 引入gamma平衡参数,进一步优化负样本策略
  • 核心优势

    YOLOv3在目标检测任务中展现出优异的性能,主要体现在:

    • faster detector:每秒能检测800张图像
    • robust to small objects和长宽比多变的目标
    • 高准确度的边界框预测(mAP提升约2-4%)

    Yolov3 with SPP and CIOU Loss

    SPP模块

    引入 Spatial Pyramid Pooling(SPP)模块,通过不同尺度聚合多尺度特征:

    • 通过4×4、3×3、2×2、1×1的窗口对特征图像进行聚合
    • 输出不同尺度的特征图像
    • 输出分辨率为16×16(512×4)的特征图
    • SPP模块可以在预测特征图的不同阶段加入,效果相当

    CIOU Loss

    与传统的平方损失不同,YOLOv3 SPP版本采用CIOU Loss函数,计算方式:combining Objectness和分类的损失,又包含边界框的位置误差。CIOU结合了面积、中心点距和长宽比误差:

    • IOU = (面积交叠) / (真实面积∪预测面积)
    • CIOU Loss 增加了中心点错位量的惩罚
    • CIOU Loss进一步减少了对简单负样本过多关注的问题

    核心改进

    • 引入Mosaic数据增强方法
    • 利用SPP模块融合多尺度特征
    • 综合使用CIOU Loss和alpha、gamma平衡正负样本策略
    • 降低对简单样本的权重侧重,更加关注复杂负样本

    通过这些改进,YOLOv3 SPP版本不仅提升了检测精度,还增强了模型的鲁棒性和适应能力。

    转载地址:http://cwdhz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现lorenz transformation 洛伦兹变换算法(附完整源码)
    查看>>
    Objective-C实现Lower-Upper Decomposition上下分解算法(附完整源码)
    查看>>
    Objective-C实现lowest common ancestor最低共同祖先算法(附完整源码)
    查看>>
    Objective-C实现LRU 缓存算法(附完整源码)
    查看>>
    Objective-C实现LRU缓存(附完整源码)
    查看>>
    Objective-C实现lstm prediction预测算法(附完整源码)
    查看>>
    Objective-C实现lucas数列算法(附完整源码)
    查看>>
    Objective-C实现Luhn (Mod 10)Algorithm算法(附完整源码)
    查看>>
    Objective-C实现LZW编码(附完整源码)
    查看>>
    Objective-C实现MAC桌面暗水印(附完整源码)
    查看>>
    Objective-C实现mandelbrot曼德勃罗特集算法(附完整源码)
    查看>>
    Objective-C实现markov chain马尔可夫链算法(附完整源码)
    查看>>
    Objective-C实现MATLAB中Filter函数功能(附完整源码)
    查看>>
    Objective-C实现matrix exponentiation矩阵求幂算法(附完整源码)
    查看>>
    Objective-C实现MatrixMultiplication矩阵乘法算法 (附完整源码)
    查看>>
    Objective-C实现max non adjacent sum最大非相邻和算法(附完整源码)
    查看>>
    Objective-C实现max subarray sum最大子数组和算法(附完整源码)
    查看>>
    Objective-C实现max sum sliding window最大和滑动窗口算法(附完整源码)
    查看>>
    Objective-C实现MaxHeap最大堆算法(附完整源码)
    查看>>
    Objective-C实现MaximumSubarray最大子阵列(Brute Force蛮力解决方案)算法(附完整源码)
    查看>>