首页 > 其他分享 >目标检测YOLOv1~v8系列

目标检测YOLOv1~v8系列

时间:2023-05-28 17:13:05浏览次数:84  
标签:head gt 匹配 YOLOv1 检测 样本 grid v8 anchor

目标检测YOLO系列

YOLOv1

YOLOv1总结:

  • 网络结构:

image

  • 激活函数:

image

  • 损失函数:

image

  • 输入和输出:input:448x448x3 output:7x7x30

    output的30:

image

Iou计算只在训练阶段,在测试阶段不进行IoU计算

  • 训练:训练中采用了drop out和数据增强(data augmentation)来防止过拟合

  • NMS(非极大值抑制):为了从中提取出最有可能的那些对象和位置,YOLO采用NMS(Non-maximal suppression,非极大值抑制)算法。其核心思想是:选择得分最高的作为输出,与该输出重叠的去掉,不断重复这一过程直到所有备选处理完。

YOLOv2

YOLOv2总结:

  • Batch Normalization

    Batch Normalization可以提升模型收敛速度,而且可以起到一定正则化效果,降低模型的过拟合。
    每个卷积层后面都添加了Batch Normalization层,不再使用droput。
    
  • High Resolution Classifier(高分辨率分类器)

    不同于yolov1在采用224x224分类模型预训练后,将分辨率增加至448x448的方法,并使用这个高分辨率在检测数据集上finetune。直接切换分辨率,检测模型可能难以快速适应高分辨率。
    YOLOv2增加了在ImageNet数据集上使用448x448输入来finetune分类网络这一中间过程(10 epochs),这可以使得模型在检测数据集上finetune之前已经适用高分辨率输入。
    
  • Convolutional With Anchor Boxes(带锚框的卷积)

    移除了YOLOv1中的全连接层而采用了卷积和anchor boxes(先验框)来预测边界框。
    采用416x416输入大小,通过下采样总步长为32得到13x13的特征图。
    YOLOv1只能预测98个边界框(7x7x2),而YOLOv2使用anchor boxes之后可以预测上千个边界框(13x13xnum_anchors),召回率大大提高。
    
  • Dimension Clusters

    使用聚类算法生成先验框
    
  • New Network: Darknet-19

    YOLOv2采用了一个新的基础模型(特征提取器),称为Darknet-19,包括19个卷积层和5个maxpooling层。

YOLOV3

YOLOv3总结:

  • Backbones

    DarkNet53, 网络结构如下:
    

image

  • Neck

    FPN(特征金字塔)
    
  • 激活函数

    LeakyReLU
    

image

  • 损失函数

    目标类别损失/目标置信度损失 --> 二值交叉熵损失(Binary Cross Entyopy)
    目标定位损失 --> Sum of Squared Error Loss(只有正样本才有目标定位损失)
        L(loc) = sum(sigmod(tx-gx)**2 + sigmod(ty-gy)**2 + (tw-gw)**2 + (th-gh)**2)
    

    目标定位损失:

image

image

YOLOV4

YOLOv4总结:

  • 数据处理部分

    Mosaic数据增强
    mosaic利用了四张图片进行拼接,增加学习样本的多样性,丰富检测物体的背景。
    
  • Backbones部分

    使用 CSPDarkNet53 主干网络替换 DarkNet53
    CSPDarknet53 将CSP结构融入了Darknet53中
    CSP结构的好处:减少网络的计算量以及对显存的占用,同时保证网络的能力不变或者略微提升。
    

image

  • Neck部分

    SPP	空间金字塔池化,就是将特征层分别通过一个池化核大小为5x5、9x9、13x13的最大池化层,然后在通道方向进行concat拼接在做进一步融合,这样能够在一定程度上解决目标多尺度问题。
    PAN 结构其实就是在 FPN(特征金字塔)(从顶到底信息融合)的基础上加上了从底到顶的信息融合
    

    SPP部分:

image

PAN部分(b):

image

  • Head部分

    和YOLOv3的head部分一样
    
  • 正负样本分配匹配部分

    正样本匹配详解(优化策略部分)

  • 损失函数部分

    在YOLOv3中定位损失采用的是MSE(均方误差)损失,在YOLOv4中采用的是CIoU损失。
    

image

  • 激活函数

    Mish激活函数
    
  • 其他优化

    Class label smoothing(标签平滑策略)
    学习率余弦退火衰减
    

YOLOV5

YOLOv5总结:

image

  • 数据处理

    yolov5提供的数据增强技术有:
    1.Mosaic  将四张图片拼成一张图片
    2.Copy paste  将部分目标随机的粘贴到图片中,前提是数据要有segments数据才行,即每个目标的实例分割信息
    3.Random affine  随机进行仿射变换,只使用了Scale(缩放)和Translation(平移)
    4.MixUp  将两张图片按照一定的透明度融合在一起
    
  • Backbones部分

    v6版本之后,将网络的第一层(Focus模块)换成了一个6x6大小的卷积层。
    
  • Neck部分

    SPP -> SPPF
    PAN -> New CSP-PAN
    
  • head部分

    yolov3 head
    
  • 损失函数

    Classes loss,分类损失,采用的是BCE loss,注意只计算正样本的分类损失。
    Objectness loss,置信度误差,obj损失,采用的依然是BCE loss,注意这里的obj指的是网络预测的目标边界框与GT Box的CIoU。
    Location loss,定位损失,采用的是CIoU loss,注意只计算正样本的定位损失。
    
  • 其他

    消除Grid敏感度
    bx = (2*sigmod(tx) - 0.5) + cx
    by = (2*sigmod(ty) - 0.5) + cy
    那么就将原来的取值范围有[0, 1]变化到[-0.5, 1.5],也为后面使用相邻的网格预测点作为正样本奠定基础
    同时:
    bw = pw * (28sigmod(tw))**2
    bh = ph * (28sigmod(th))**2
    防止梯度爆炸,将范围调整到(0,4)也为后面的正负样本分配奠定基础
    

image
)

  • 正负样本匹配

    yolov5基于anchor based,在开始训练前,会基于训练集中gt(ground truth 框),通过k-means聚类算法,先验获得9个从小到大排列的anchor框。先将每个gt与9个anchor匹配(以前是IOU匹配,yolov5中变成shape匹配,计算gt与9个anchor的长宽比,如果长宽比小于设定阈值,说明该gt和对应的anchor匹配),
    
    如上图为yolov5的网络架构,yolov5有三层网络,9个anchor, 从小到大,每3个anchor对应一层prediction网络,gt与之对应anchor所在的层,用于对该gt做训练预测,一个gt可能与几个anchor均能匹配上。所以一个gt可能在不同的网络层上做预测训练,大大增加了正样本的数量,当然也会出现gt与所有anchor都匹配不上的情况,这样gt就会被当成背景,不参与训练,说明anchor框尺寸设计的不好。
    
    在训练过程中怎么定义正负样本呢,因为yolov5中负样本不参与训练,所以要增加正样本的数量。gt框与anchor框匹配后,得到anchor框对应的网络层的grid,看gt中心点落在哪个grid上,不仅取该grid中和gt匹配的anchor作为正样本,还取相邻的的两个grid中的anchor为正样本。
    

image

如上图所示,绿色的gt框中心点落在红色grid的第三象限里,那不仅取该grid,还要取左边的grid和下面的grid,这样基于三个grid和匹配的anchor就有三个中心点位于三个grid中心点,长宽为anchor长宽的正样本,同时gt不仅与一个anchor框匹配,如果跟几个anchor框都匹配上,所以可能有3-27个正样本,增大正样本数量。

补充:正负样本匹配

YOLOV6

模型整体框架:

image

yolov6的正负样本匹配

  • 参考: https://mp.weixin.qq.com/s/nhZ3Q1NHm3op8abdVIGmLA
  • yolov6的正负样本匹配策略同yolox,yolovx因为是anchor free,anchor free因为缺少先验框这个先验知识,理论上应该是对场景的泛化性更好,同时参见旷视的官方解读:Anchor 增加了检测头的复杂度以及生成结果的数量,将大量检测结果从NPU搬运到CPU上对于某些边缘设备是无法容忍的。
  • yolov6中的正样本筛选,主要分成以下几个部分:
  1. 基于两个维度来粗略筛选;
  2. 基于simOTA进一步筛选。
  • 具体步骤如下

image

tie标签的gt如图所示,找到gt的中心点(Cx,Cy),计算中心点到左上角的距离(l_l,l_t),右下角坐标(l_r,l_b),然后从两步筛选正样本:

1.第一步粗略筛选第一个维度是如果grid的中心点落在gt中,则认为该grid所预测的框为正样本,如图所示的红色和橙色部分,第二个维度是以gt的中心点所在grid的中心点为中心点,上下左右扩充2.5个grid步长范围内的grid,则默认该grid所预测的框为正样本,如图紫色和橙色部分。这样第一步筛选出31个正样本(注:这里单独一层的正样本,yolov6有三个网络层,分别计算出各层的正样本,并叠加)。

image

2.通过SimOTA进一步筛选:SimOTA是基于OTA的一种优化,OTA是一种动态匹配算法,具体参见旷视官方解读

SimOTA流程如下:

  1. 计算初筛正样本与gt的IOU,并对IOU从大到小排序,取前十之和并取整,记为b(用来决定改gt分配多少个正样本)。
  2. 计算初筛正样本的cos代价函数,将cos代价函数从小到大排列,取cos前b的样本为正样本。同时考虑同一个grid预测框被两个gt关联的情况,取cos较小的值,该预测框为对应的gt的正样本。

YOLOV7

模型的整体框架:

image

yolov7正负样本匹配

yolov7因为基于anchor based , 集成v5和v6两者的精华,即yolov6中的第一步的初筛换成了yolov5中的筛选正样本的策略,保留第二步的simOTA进一步筛选策略。

同时yolov7中有aux_headlead_head 两个head ,aux_head做为辅助,其筛选正样本的策略和lead_head相同,但更宽松。如在第一步筛选时,lead_head 取中心点所在grid和与之接近的两个grid对应的预测框做为正样本,如图绿色的grid, aux_head则取中心点以及周围的4个预测框为正样本。如下图绿色+蓝色区域的grid.

image

同时在第二步simOTA部分,lead_head 是计算初筛正样本与gt的IOU,并对IOU从大到小排序,取前十之和并取整,记为b。aux_head 则取前二十之和并取整。其他步骤相同,aux_head主要是为了增加召回率,防止漏检,lead_head再基于aux_head 做进一步筛选。

YOLOV8

YOLOv8总结:

  • Backbone部分:

    使用的依旧是CSP的思想,不过YOLOv5中的C3模块被替换成了C2f模块,实现了进一步的轻量化,同时YOLOv8依旧使用了YOLOv5等架构中使用的SPPF模块
    
  • Neck部分:

    PAN-FPN:毫无疑问YOLOv8依旧使用了PAN的思想,不过通过对比YOLOv5与YOLOv8的结构图可以看到,YOLOv8将YOLOv5中PAN-FPN上采样阶段中的卷积结构删除了,同时也将C3模块替换为了C2f模块
    
  • Head部分:

    Decoupled-Head(解耦合头):分类和回归两个任务的head不再共享参数
    

image

  • 损失函数:

    YOLOv8开始使用VFL Loss作为分类损失,后面相关代码被注释掉了,可以猜测,作者团队发现使用VFL和使用普通的BCE的最终效果是一样,没有明显优势,所以就还是采用了简单的、没有涉及痕迹的BCE。使用DFL Loss+CIOU Loss作为回归损失。
    
  • 样本匹配:

    YOLOv8抛弃了以往的IOU匹配或者单边比例的分配方式,而是使用了Task-Aligned Assigner匹配方式,与yolov6相同
    
  • 其他:

    YOLOv8抛弃了以往的Anchor-Base,使用了Anchor-Free的思想
    

    Anchor based and Anchor free(无锚VS有锚)

标签:head,gt,匹配,YOLOv1,检测,样本,grid,v8,anchor
From: https://www.cnblogs.com/sususuH/p/17438492.html

相关文章

  • 厚积薄发:毫米波雷达开发手册之大话恒虚警率检测
    写在前面​ 深知新手在接触毫米波雷达板硬件时需要花费的沉没成本,因此在行将告别毫米波雷达之际,总结这两年以来在毫米波雷达上的一些经验和教训。​ 本文档用于为实现基于AWR1243BOOST等单板毫米波雷达开发提供参考指南与解决方案,主要包括硬件配置、基础参数、信号模型、应用DEM......
  • 深入了解平均精度(mAP):通过精确率-召回率曲线评估目标检测性能
    平均精度(AveragePrecision,mAP)是一种常用的用于评估目标检测模型性能的指标。在目标检测任务中,模型需要识别图像中的不同目标,并返回它们的边界框(boundingbox)和类别。mAP用于综合考虑模型在不同类别上的准确度和召回率。基本知识IOU(IntersectionOverUnion)是一种基于Jaccard......
  • 模糊检测(转载)
    转载https://blog.csdn.net/baidu_31657889/article/details/84671927模糊检测      模糊估计分为两个步骤:首先是边缘检测,然后是模糊确定。此处模糊估计是通过计算当前像素点与领域内像素点均值之差来确定。我们用f(x,y)表示图片,其中。定义水平绝对差如下:整个图片的水......
  • 未授权访问漏洞检测工具(CVE-2023-29922)
    ===================================免责声明请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删除。0x01工具介绍PowerJob<=4.3.2......
  • YOLOv8目标检测实战:Android手机部署 (视频课程)
    课程链接:https://edu.51cto.com/course/33890.htmlYOLOv8目标检测基于先前YOLO版本的成功,引入了新功能和改进,进一步提升了性能和灵活性。本课程在Windows上手把手演示YOLOv8(YOLOv8n和YOLOv8s)目标检测在Android(安卓)手机进行部署的过程。内容包括:安装软件环境、安装PyTorch,克隆和......
  • C语言--检测号码是否合法
    输入号码,检测是否合法intIfTel(constchar*p,intlen){ inti=0; if(len!=13) //号码长度不合法 return1; if(p[0]!='8'&&p[1]!='6') //号码非86开头 return3; for(i=0;i<len;i++) { if(p[i]<'0'||p[i]>&#......
  • Elasticsearch8.4.3安装最新ik分词器elasticsearch-analysis-ik【v8.4.3版本】
     Elasticsearch8.4.3安装最新ik分词器elasticsearch-analysis-ik【v8.4.3版本】https://blog.csdn.net/u014282578/article/details/127815352......
  • 前端检测手机系统是iOS还是android(可实现根据手机系统跳转App下载链接)
    快速实现前端检测手机系统是iOS还是android(可实现根据手机系统跳转App下载链接);下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12652效果图如下:   实现代码如下:#使用方法####HTML代码部分```html<template><viewclass="conten......
  • 检测手机系统是iOS还是android(可实现根据手机系统跳转App下载链接)
    快速实现检测手机系统是iOS还是android(可实现根据手机系统跳转App下载链接);下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12652效果图如下:   实现代码如下:#使用方法####HTML代码部分```html<template><viewclass="content">......
  • 使用 OpenCV 进行轮廓检测 (Python/C++)第一部分
    什么是轮廓当我们连接一个对象边界上的所有点时,我们得到一个轮廓。通常,特定轮廓是指具有相同颜色和强度的边界像素。OpenCV使得在图像中查找和绘制轮廓变得非常容易。它提供了两个简单的功能:findContours()drawContours()此外,它有两种不同的轮廓检测算法:CHAIN_APPROX_SIMPLECHAIN_......