热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从YOLOv4看模型优化方法

YOLOv4中相关优化方法1.Bagoffreebies(增加训练时间,不影响推理速度下提升性能)1.1数据增强:亮度、

YOLOv4中相关优化方法


1.Bag of freebies(增加训练时间,不影响推理速度下提升性能)


1.1 数据增强:


  • 亮度、对比度、色调、饱和度、噪音

  • 随机缩放、裁剪、翻转、旋转

  • 模拟遮挡

    • random erase or CutOut: 随机将图像中的矩形区域随机填充像素值或置零
    • MixUp:将两张图像按照一定比例因子进行叠加融合,该比例因子服从B分布。融合后的label包含两张图像的所有标签。
    • CutMix:从一张图中crop一块矩形图像到另一张图中,对应融合后图像的label也要进行更新。
    • 风格迁移GAN:通过GAN的方式扩增数据量
  • feature map层面的增强

    • DropOut:

      • 原理:前向传播的时候,让某个神经元的激活值以一定的概率1-p停止工作(输出值清0),bp更新权值时,不再更新与该节点相连的权值。
      • 作用:解决因参数过多导致的过拟合,多用于全连接层。
    • DropConnect:

      • 原理:输出节点中将每个与其相连的输入权值以1-p的概率清0(模型权重清零),DorpConnect为DorpOut的改进
      • dropout与dropconnect如下图:

    • 作用:针对卷积层正则化。


1.2 解决语义分布差异(类别不平衡)


  • Two Stage检测使用:

    • OHEM:

      • 优点:

        • 对于数据的类别不平衡问题不需要采用设置正负样本比例的方式来解决,这种在线选择方式针对性更强
        • 当数据集增大,算法可以在原来基础上提升更大
      • 核心:核心是选择一些hard example作为训练的样本从而改善网络参数效果,hard example指的是有多样性和高损失的样本

      • 原理:(基于fast rcnn改进)hard example是根据每个ROI的损失来选择的,选择损失最大的一些ROI。首先,ROI经过ROI plooling层生成feature map,然后进入只读的ROI network得到所有ROI的loss;然后根据损失排序选出hard example,并把这些hard example作为下面那个ROI network(从图中可知两个RoI Network是参数共享的)的输入进行训练。下面为OHEM原理图:

    • RFB-Net

      • 背景:在one stage检测中尽可能地增加backbone感受野
      • 原理:借鉴了inception结构的并行结构,并对不同大小卷积核后加上不同空洞率的空洞卷积(卷积核为kxk,空洞率为k)(作者认为这样做对kernels的大小和离心率之间的关系进行了建模)
      • 图示

  • ASFF(自适应尺度融合)

    • 原理:首先通过FPN产生level1-level3不同尺度的特征图,作者使用ASFF(adaptively spatial feature fusion)思想进行融合,思想就是level1-level3个尺度图分别再融合成3个对应尺度的特征图,融合的权重自适应调整。拿ASFF-1作为例子,首先将3个尺度的图都resize到level1尺度大小,然后学习一个融合权重(使用softmax 做不同feature map加权),这样可以更好地学习不同特征尺度对于预测特征图的贡献。
    • 原理图

  • BiFPN模块–来自EfficientDet

    • 模块结构:BiFPN是对PANet的改动,提出了三个优化
      • 删掉那些只有一个输入边的节点,因为只有一个输入边的节点就没有特征融合,对特征网络的贡献少
      • 添加了从原始输入到输出节点的边(同一级别的输入输出)
      • 把双向路径看作是一个特征网络层,就可以多次重复特征层得到更多的特征融合。(就是图中f子图,可以把f图当作一个层,可以多次重复,前一层的5个输出(

        • 特点:Swish函数可以看做是介于线性函数与ReLU函数之间的平滑函数,模型效果优于ReLU
      • Hard-Swish

        • 公式:
          h−swish(x)=x∗ReLU6(x+3)6h-swish(x)=x*\frac{ReLU6(x+3)}{6} hswish(x)=x6ReLU6(x+3)

        • 曲线:

        • 特点:针对量化模式下对Swish的改进(Sigmoid比ReLU6耗时),使用ReLU6替换sigmoid

      • Mish:

        • 公式:

        Mish=x∗tanh(ln(1+ex))Mish= x*tanh(ln(1+e^x)) Mish=xtanh(ln(1+ex))

        • 曲线:

        • 特点:Mish激活函数比ReLU等激活函数更加平滑,训练更稳定精度有提升,有望替换ReLU,只是计算更复杂.


      2.5 后处理(anchor free无)


      • NMS

      • soft NMS:

        • 特点: 对于重叠框中除置信度最高的框外,将其余框的置信度用稍低一点的置信度来代替原有置信度,而不是像NMS直接将iou超过阈值的框置信度置零.这种方式可以有效地增加重叠目标的召回.具体如何降低置信度的方式如下图公式:

      • DIoU NMS:

        • 特点: 基于soft NMS进行改进.将bbox中心点之间的距离信息考虑到置信度更新中来,将中心点距离信息作为soft NMS公式的偏执项.

推荐阅读
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Gitlab接入公司内部单点登录的安装和配置教程
    本文介绍了如何将公司内部的Gitlab系统接入单点登录服务,并提供了安装和配置的详细教程。通过使用oauth2协议,将原有的各子系统的独立登录统一迁移至单点登录。文章包括Gitlab的安装环境、版本号、编辑配置文件的步骤,并解决了在迁移过程中可能遇到的问题。 ... [详细]
  • 本文介绍了如何使用n3-charts绘制以日期为x轴的数据,并提供了相应的代码示例。通过设置x轴的类型为日期,可以实现对日期数据的正确显示和处理。同时,还介绍了如何设置y轴的类型和其他相关参数。通过本文的学习,读者可以掌握使用n3-charts绘制日期数据的方法。 ... [详细]
author-avatar
yangxinhui2602905795
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有