首页 > 编程语言 >yolov4算法及其改进

yolov4算法及其改进

时间:2024-12-28 15:01:13浏览次数:3  
标签:yolov4 函数 mish 梯度 IOU FPN 改进 算法 激活

yolov4算法及其改进

1、yolov4介绍

在这里插入图片描述
改进点:

  • 输入端改进:Mosaic数据增加
  • 主干网络:CSPDarkNet53
  • Neck:SPP、PANet
  • 损失函数:CIOU
  • 激活函数:Mish激活函数
  • 样本匹配:增加了匹配样本的数量

2、mosaic与mish激活函数

2.1、mosaic数据增强

在这里插入图片描述
数据增强步骤:

  • 首先随机取4张图片
  • 分别对4张图片进行数据增广操作,并分别粘贴至与最终输出图像大小相等的掩模的对应位置
  • 进行图片的组合和框的组合

优点:

  • 丰富数据集:使用4张图片,随机缩放,随机分布进行拼接,大大丰富了目标检测的数据集,增加了很多小目标,让网络模型对小目标的稳健性变的更好
  • 减少GPU使用:mosaic增强训练时,可以在单图像尺度的情况下直接计算4张图片的数据,使得mini-batch size并不需要很大,即使用1个GPU就可以达到比较好的收敛效果

2.2、Mish激活函数

在这里插入图片描述
在这里插入图片描述
mish激活函数是自带正则的非单调激活函数,平滑的激活函数可以让模型获得更好的非线性,从而得到更好的准确性和泛化,Mish激活函数的数学表达式如上式。

首先函数和relu一样都是无正向边界的,可以避免梯度饱和,其次,mish函数时光滑的,并且在绝对值较小的负值区域允许一些负值。

注意,mish激活函数的计算复杂度比relu要高,在计算资源不足的情况下,可以考虑使用leakyrelu激活函数代替mish激活函数。

3、backbone网络框架的改进

CSPNet的概念:通过分割梯度流,使梯度流在不同路径中传播,这种传播的梯度信息更加丰富,此外,CSPnet可以打打减少计算量,提高推理速度以及精度

CSPNet的主要目的:可以实现更丰富的梯度组合,同时减少计算量。

实现方法:将基础层的特征层分割成两部分,然后通过提出的跨阶段分层结构进行合并来实现

基于CSPNet的目标检测器主要有以下3个优势:
1、增强学习能力:
2、移除计算瓶颈:
3、降低内存消耗:
在这里插入图片描述
transition层的含义和densenet类似,是一个1*1的卷积层而不是使用average pool
CSPNet设计了两种变体来展示这种梯度流截断如上图C、D
fusion first方式:先将2部分进行concat,然后进行输入到transion层,采用这种方式,可以使得大量梯度信息被重用,有利于网络学习
fusion last方式:先将部分特征输入transition层,然后再进行concat,这样梯度信息将被截断,损失了部分梯度重用,但是由于transition的输入维度比图c少,因此可以减少计算量

图b结合了图c和图d,提升了学习能力的同时也提高了一下计算复杂度

在这里插入图片描述
注:图中fusion last和fusion first位置互换

CSPDarkNet结合fusion last和fusion first的设计思想,设计了CSPResBlock,用于构建CSPDarkNet

CSPResBlock的基本组件Conv+bn+mish的形式,其中也包含了Resnet吸取的残差结构的思想,但是为了减低重复的梯度学习,设计者有使用了另一个shortcut和conv+bn+mish结合的形式,对特征进了一次提取,以增加梯度的丰富性。

由于跨越的卷积层比较多,大大降低了梯度学习的重复性,同时,在block的最后使用了concat进行特征融合,也大大增加了特征的鲁棒性,从而很大程度提升了模型的性能。

在这里插入图片描述
注:图中fusion last和fusion first位置互换

这里的CSPDarkNet53对于每一个stage的配置通darknet53一样,分别是1,2,8,8,4,依次对应下采样倍数为:2、4、8、16、32。

SPP
在这里插入图片描述
yolov4使用了spp的思想,在backbone尾部使用了spp结构实现了局部特征和全局特征的融合,扩大了感受野,丰富最终特征图的表达能力,进而提高map。
在这里插入图片描述

spp模块的特点如下:
1、由于对输入图像的不同纵横比和不同尺寸,spp同样可以处理,所以提高了图像的尺度不变和降低了过拟合

2、实验表明训练图像尺寸的多样性比单一尺寸的训练图像更容易使得网络收敛

3、spp对于特定的cnn网络设计和结构都是独立的(只要把spp放在最后一层卷积层后面,对网络的结构是没有影响的,它只是替换了原来的pooling层)

4、不仅可以用于图像分类而且可以用来目标检测

4、PAN-FPN的介绍

在这里插入图片描述
FPN是自顶向下将高层的强语义特征传递下来,对整个特征金子塔进行增强,但是FPN只增强语义信息,对定位信息没有很好的传递,因此YOLOV4增加了PAN来增强定位信息的传递。

FPN+PAN借鉴的是PANet,主要应用于图像分割领域,如上图所示,FPN采用自顶向下,将高层的强语义特征传递下来,而PAN+FPN针对这一点,在FPN的后面添加一个自底向上的金字塔,这样的操作是对FPN的补充,将底层的强定位特征传递上去。这样不仅能增强高级语义信息,还能增强定位信息。

5、样本匹配和损失函数

5.1、样本匹配

在这里插入图片描述
对于YOLOV4,与YOLOV3不同,只要大于IOU阈值的anchor box,就认为正样本,原本在yolov3中被忽略的,在YOLOV4只统统被认为正样本。

GT需要利用MAX iou原则分配到不同的预测层yolo-head上去,然后在每个层上单独计算正负样本和忽略样本

5.2、YOLOV4损失函数

在这里插入图片描述
MSE LOSS 主要问题是导数变化不稳定,后来提出了IOU一系列函数
主要有IOU=>GIOU=>DIOU=>CIOU,IOU表达式如上图:

但是IOU存在2个问题如下图:
在这里插入图片描述
1、当IOU为0时,无法反应两个框距离的远近,此时损失函数不可导
2、两个预测框大小相同,2个IOU也相同,但是无法区别

5.2.1、GIOU loss

在这里插入图片描述

C为最大外接矩阵 ,红色区域为差集A,可以区分以下两种情况

在这里插入图片描述
同时也存在以下问题:
在这里插入图片描述
交集相同,并集也相同。

5.2.2、DIOU loss

认为好的目标框回归函数应该考虑3个重要几何因素:重叠面积,中心点距离,长宽比

在这里插入图片描述
DIOU loss = 1 - IOU + 欧氏距离

DIOU问题
在这里插入图片描述
如上图所示,预测框和真实目标框的中心点距离是相同的,但是DIOU没有引入长宽比,因此无法解决这个问题。

5.2.3、CIOU Loss

在这里插入图片描述
YOLOV4采用CIOU Loss做Bounding box的回归损失韩式,而分类损失和目标损失都使用的是交叉熵损失,对于回归损失,数学表达式如上。

式中d,c分别表示预测结果与标注结果中心点的欧式距离和框的对角线距离,w和h表示预测框的宽高。这样CIOU loss将目标回归函数应该考虑的3个重要几何因素都考虑了:重叠面积,中心点距离,长宽比。

对于分类和目标损失,数学表达式如下:
在这里插入图片描述

标签:yolov4,函数,mish,梯度,IOU,FPN,改进,算法,激活
From: https://blog.csdn.net/m0_38113054/article/details/144753485

相关文章

  • yolov5及其算法改进
    yolov5及其算法改进1、YOLOV5目标检测简介2、前处理2.1、自适应Anchor计算2.2、自适应计算Anchor的流程如下:2.3、图像自适应3、YOLOV4与YOLOV5的架构区别3.1、SiLU激活函数3.2、CSPBlock结构图3.3、yolov5的spp改进4、正负样本匹配与损失函数4.1、坐标表示4.2、正......
  • 强化学习算法:soft actor-critic (SAC)—— SAC中的alpha_losse是什么?
    官方实现地址:https://openi.pcl.ac.cn/devilmaycry812839668/softlearning在SAC算法的官方实现中有一个论文中没有介绍的部分,这就是SAC中的alpha_losse,在SAC论文中alpha是以超参数的形式存在的,但是在论文作者发布的具体实现的代码中关于这个alpha却给出了一种计算方法,该方法可......
  • 基于 Python +线性回归算法 的 股票价格预测
    以下是一个基于Python控制台的股票价格预测程序,适合作为课程设计作业。程序基于机器学习模型(如线性回归),实现对股票价格的预测,并支持用户通过控制台输入或加载历史数据进行操作。功能描述数据加载:用户可输入股票历史价格数据,或从文件中加载CSV数据。数据可视化:显示......
  • node.js基于协同过滤算法的企业入职评测系统服务端程序+论文 可用于毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容一、选题背景关于企业入职评测系统的研究,现有研究主要以传统的评测模式为主,如单纯依靠简历筛选、简单面试等方式进行人员筛选1。专门针对利用协同过滤算法构建企业入......
  • 强化学习算法:soft actor-critic (SAC)—— 官方发布的核心代码
    完整的官方代码地址如下:https://openi.pcl.ac.cn/devilmaycry812839668/softlearning核心代码实现:点击查看代码fromcopyimportdeepcopyfromcollectionsimportOrderedDictfromnumbersimportNumberimportnumpyasnpimporttensorflowastfimporttensorf......
  • 网络流 Dinic 算法笔记
    网络流Dinic算法笔记步骤建图,初始时令反向边权值为零,之后将该边每次用去的权值累计赋值给该反向边。分层,每次只能找下一个层的点。每次多向找增广路,并将跑满的边去掉,之后再去跑残量网络,直到榨干所有可用管道。大致就这样,然后注意时时减脂优化。code#include<bits/stdc+......
  • 【算法一周目】从时光的边缘看世界:前缀和揭示的算法真谛
    文章目录1.一维前缀和2.二维前缀和3.寻找数组的中心下标4.除自身以外数组的乘积5.和为k的子数组6.和可被k整除的子数组7.连续数组8.矩阵区域和1.一维前缀和题目链接:【模板】一维前缀和题目描述:给定一个长度为n的整数数组arr和q个查询,每个查询由两个整数l......
  • Java动态规划算法
    ①动态规划动态规划(DynamicProgramming,DP)是运筹学的一个分支,是求解决策过程最优化的过程。20世纪50年代初,美国数学家贝尔曼(R.Bellman)等人在研究多阶段决策过程的优化问题时,提出了著名的最优化原理,从而创立了动态规划。动态规划的应用极其广泛,包括工程技术、经济、工业生产......
  • 遗传算法——附python实现与各方法的作用与修改
    前言遗传算法是数学建模中非常重要的一种搜索和优化算法,掌握遗传算法的精髓除了在竞赛中具有优势以外,更主要的是在解决实际问题的时候提供了一种全新的思路,通过将现实中的某种模式转换成算法,并用以解决某种问题的这种思路,或许是算法创新,提高效率的另一条路。本文将会介绍......
  • 代码随想录算法训练营第六十天|Bellman_ford队列优化法(SPFA)、bellman_ford之判断负
    前言打卡代码随想录算法训练营第49期第六十天(づ◕‿◕)づ首先十分推荐学算法的同学可以先了解一下代码随想录,可以在B站卡哥B站账号、代码随想录官方网站代码随想录了解,卡哥清晰易懂的算法教学让我直接果断关注,也十分有缘和第49期的训练营大家庭一起进步。Bellman_ford队......