目标检测-One Stage-YOLOv4

文章目录

  • 前言
  • 一、目标检测网络组成
  • 二、BoF(Bag of Freebies)
    • 1. 数据增强
    • 2.语义分布偏差问题
    • 3.损失函数
      • IoU
      • GIoU
      • DIoU
      • CIoU
  • 三、BoS(Bag of Specials)
    • 增强感受野
    • 注意力机制
    • 特征融合
    • 激活函数
    • 后处理
  • 四、YOLO v4的网络结构和创新点
    • 1.缓解过拟合(BoF)
    • 2. 网络结构的改进(BoS)
    • 3. 训练(BoF)
    • 3. 后处理(BoS)
  • 总结


前言

自Yolov3结束,其作者不再在该系列进行研发,后续开启了工业界的狂潮,诸多公司开始研究目标检测算法的实时落地应用。

YOLOv4可以说是目标检测各种小技巧(tricks)的大总结,将其推向了工业界。

ps:YOLOv4算法是在原有YOLO目标检测架构的基础上,采用了近些年CNN领域中最优秀的优化策略,从数据处理、主干网络、网络训练、激活函数、损失函数等各个方面提出各种tricks总结,虽没有理论上的创新,但是将其应用推向高峰。文章如同目标检测的trick综述,尝试了各种优化算法,效果达到了实现FPS与Precision平衡的目标检测 new SOTA。

YOLOv4将技巧分为了bag of freebies(BoF)和bag of specials(BoS)两种,BoF指的是只增加训练的成本而不增加推理的成本的技巧,通常是预处理和后处理;BoS指的是只增加一点推理成本却可以显著提高模型效果的技巧,通常是模型结构上的变化。


提示:以下是本篇文章正文内容,下面内容可供参考

一、目标检测网络组成

总结了目标检测网络的组合和常见组件:包括输入、backbone、Neck(如特征融合网络)、Heads(检测网络)
在这里插入图片描述

在这里插入图片描述

二、BoF(Bag of Freebies)

指只改变训练策略或只增加训练成本,而不增加推理成本的方法

1. 数据增强

传统的处理手段如下:

  • 光学失真法:调整图像的亮度、对比度、色调、饱和度和噪声
  • 几何失真法:随机缩放、裁剪、翻转和旋转

上述数据增强方法都是逐像素调整,并且保留调整区域中的所有原始像素信息,更多的应用于图像分类领域,目标检测领域研究人员则将重点放在模拟对象遮挡问题上

  • CutOut和随机擦除(random erase):随机删除一个矩形区域(填充零/均值)
  • hide-and-seekgrid mask:随机或均匀地选择图像中的多个矩形区域,并将它们全部替换为零

如果将上述理念用于特征图(feature maps),则有如下方法:

  • DropOut:随机将某层特征图中的元素 置零
  • DropConnect:随机将某层的部分连接权重 置零
  • DropBlock:随机将某层特征图中的一些矩形区域 置零

此外,一些研究人员提出了将多个图像一起使用来进行数据增强的方法:

  • MixUp:随机选择两个样本,对它们的输入和标签进行线性插值,从而生成一个新的样本,其输入是两个原始样本输入的线性组合,标签也是对应标签的线性组合。 λ \lambda λ是一个从 Beta 分布中采样的超参数。通常, λ \lambda λ取一个较小的值,比如 0.2
    在这里插入图片描述
  • CutMix:从图像中生成掩码(mask),实质上是一个矩形块,将两幅图像的mask区域互换,对新的图像进行标签混合
    在这里插入图片描述
    此外,也有利用生成式方法的数据增强,如style transfer GAN

2.语义分布偏差问题

在处理语义分布偏差问题时,有两个非常重要的问题

  • 一是不同类别之间存在数据不平衡的问题
  • 二是独热码这种标签编码方式很难表达不同类别之间的关联度关系

Two Stage检测器中,通常通过的硬反例挖掘(hard negative example mining)在线硬例挖掘(online hard example mining)来解决数据不平衡问题,但实例挖掘方法不适用于One Stage检测器,因为这种检测器属于密集预测结构。何恺明大神提出了focal loss来解决此问题,关于focal loss,在目标检测-One Stage-RetinaNet中有介绍。

ps:

  • 硬负样本挖掘的目标是找到对当前模型来说相对难以分类的负样本,以便加强训练模型对这些困难样本的处理能力,处理流程是:在每轮训练中,模型会首先使用当前参数对数据进行预测。然后,从被错误分类的负样本中选择那些“难以置信”的样本,即模型对其置信度较高的负样本,将其用于更新模型参数。
  • 在线硬例挖掘的目标是找到对当前模型来说相对难以分类的样本,在训练过程中,每一步都实时选择那些难以处理的样本,而不是依赖于先前的训练轮次。

为解决问题二,可将硬标签转换为软标签进行训练,这可以使模型更加鲁棒,同时为了获得更好的软标签,Islam等人引入了知识蒸馏的概念来设计标签精化网络。

ps:

  • 以独热码举例说明软硬标签,硬标签:[0, 1, 0],软标签:[0.1, 0.7, 0.2],一个模型经过训练后它输出的往往是软标签,软标签比硬标签具有更多的知识。

知识蒸馏

知识蒸馏就是把一个大模型的知识(软标签)迁移到小模型上,既要学习真实标签,也就是硬标签,还要学习大模型给的软标签,那么可将损失函数定义为:

L = t a r g e t h a r d + t a r g e t s o f t = α C E ( y , p ) + β C E ( q , p ) L = target_{hard } + target_{soft} = \alpha CE(y,p) + \beta CE(q,p) L=targethard+targetsoft=αCE(y,p)+βCE(q,p)

其中y是真实标签,p是小模型的预测,q是大模型的预测,CE是交叉熵损失, α \alpha α β \beta β是超参数

ps:

  • 需要注意的是,要是直接使用大模型softmax层的输出值作为q的话,会带来一个问题: 当softmax输出的概率分布熵相对较小时,负标签的值都很接近0,对损失函数的贡献非常小,小到可以忽略不计。
  • 因此在softmax函数中加入了温度变量(T),让每个类的预测差距不那么大:
    在这里插入图片描述

3.损失函数

  • 对于目标框的定位,之前的做法是将其看作回归问题,采用MSE作为损失函数(L1或L2),直接回归框的位置{ x c e n t e r , y c e n t e r w , h x_{center}, y_{center}w, h xcenter,ycenterw,h},如果是基于anchor的则是回归偏移量{ x c e n t e r o f f s e t , y c e n t e r o f f s e t , w o f f s e t , h o f f s e t x_{center} offset, y_{center} offset, w_{offset}, h_{offset} xcenteroffset,ycenteroffset,woffset,hoffset}

  • 这样直接估计BBox每个点的坐标值,就是将这些点视为自变量,但实际上并没有考虑对象本身的完整性(即未考虑bbox四个顶点之间的相关性),模型在训练过程中会更偏向于尺寸更大的物体

因此出现了基于IoU的loss,将目标框看成一个整体来回归,IoU loss的定义是先求出2个框的IoU,然后再求负对数,即
-ln(IoU),在实际使用中则常用如下公式:IoU Loss = 1-IoU。并产生了一系列改进的IoU Loss,其中主要是对IoU的改进,包括GIoU、DIoU、CIoU

IoU

IoU就是交集比上并集,如下图所示:
在这里插入图片描述
这种计算方法真实框和预测框交叉情况的算法有如下缺点:
在这里插入图片描述

  1. 如左图所示,当预测框与真实框完全没有交叠时,不管预测框离真实框多远,IoU都是一样的,但其实离真实框近的比离真实框远的要好一些。
  2. 如中图和右图所示,当交集和并集一致时,不同方向的预测框得到IoU是一样的,但其实右图比中图要好一点,因为中图的中心点对齐需要预测框的水平和垂直都发生比较大的变化,而右图只需要水平平移即可

GIoU

为了解决上述的两个缺点,有了GIoU( G I o U = I o U − 差集 / 最小外接矩形 GIoU= IoU − 差 集 / 最 小 外 接 矩 形 GIoU=IoU差集/最小外接矩形),如图所示
在这里插入图片描述
但GIoU仍存在问题:当预测框在真实框内部的时候,不管预测框在那个位置,GIoU都是一样的,但是下图的中图显然是优于左图和右图的,因为中图的水平和垂直方向的坐标已经对齐了,只需要改变长宽即可。
在这里插入图片描述

DIoU

为了解决上述缺点,出现了DIoU( D I o U = I o U − ( D i s t a n c e _ 2 ) / ( D i s t a n c e _ C ) DIoU= IoU- (Distance\_2) / (Distance\_C) DIoU=IoU(Distance_2)/(Distance_C)),如图所示
在这里插入图片描述
但是DIoU没有考虑长宽比
在这里插入图片描述

CIoU

最终诞生了CIoU

C I o U = I o U − D i s t a n c e _ 2 2 D i s t a n c e _ C 2 − v 2 1 − I o U + v CIoU=IoU−\frac{Distance\_2^2}{Distance\_C^2}− \frac{v^2}{1−IoU+v} CIoU=IoUDistance_C2Distance_221IoU+vv2

其中,v是长宽比的一致性参数,定义为
v = 4 π ( a r c t a n w g t h g t − a r c t a n w p r e d h p r e d ) 2 v=\frac{4}{π}(arctan \frac{w_{gt}}{h_{gt}} − arctan \frac{w_{pred}}{h_{pred}})^2 v=π4(arctanhgtwgtarctanhpredwpred)2

三、BoS(Bag of Specials)

指只增加一点推理成本,而使精度显著增加的方法

对于那些只会少量增加推理成本但能显著提高对象检测精度的插件模块和后处理方法,我们称之为“特殊包”。一般来说,这些插件模块用于增强模型中的某些属性,如扩大感受野、引入注意力机制或增强特征集成能力等,后处理是筛选模型预测结果的一种方法。

增强感受野

  • 可用于增强感受野的常见模块有:SPP(空间金字塔池化)、ASPPRFB

ps:SPP的输出是一维张量,不适用于全卷积网络,因此YOLOv3采用了核为k的max-pooling( k = {1; 5; 9; 13},stride=1),在这种设计下,相对较大的k×k最大池化有效地增加了主干特征的感受野

注意力机制

  • 注意力常见模块有:Squeeze-and-Excitation (SE)Spatial Attention Module (SAM)

ps:

  • SE模块可以将ResNet50在ImageNet图像分类任务中的能力提高1%(top-1的准确度),只需增加2%的计算工作量,但在GPU上,它通常会增加约10%的推理时间,因此更适合用于移动设备

  • SAM模块可以将ResNet50-SE在ImageNet图像分类任务中的能力提高0.5%(top-1的准确度),只需要增加0.1%的额外计算量。最棒的是,它根本不会影响GPU上的推理速度。作者改进了SAM模块
    在这里插入图片描述

特征融合

  • 最早使用skip connectionhyper-column将低级物理特征集成到高级语义特征
  • 多尺度特征融合方法:FPNSFAMASFFBiFPNPANet

激活函数

  • ReLULReLUPReLUReLU6标度指数线性单元(SELU)Swishhard SwishMish

ps:

  • ReLU用于解决传统tanh和sigmoid激活函数中经常遇到的梯度消失问题
  • LReLU和PReLU的主要目的是解决当输出小于零时ReLU的梯度为零的问题
  • ReLU6和hard Swish,它们是专门为量化网络设计的
  • 对于神经网络的自归一化,提出了SELU激活函数来满足这一目标

后处理

  • R-CNN中添加了分类置信度得分作为参考,并根据置信度得分的顺序,按照高分到低分的顺序进行贪婪NMS

  • 软NMS,考虑了对象的遮挡可能导致具有IoU分数的贪婪NMS的置信度分数下降的问题。

  • DIoU NMS开发人员的思路是在软NMS的基础上,将中心点距离的信息添加到BBox筛选过程中。

值得一提的是,由于上述后处理方法都没有直接参考捕获的图像特征,因此在后续开发无anchor方法时不再需要后处理

四、YOLO v4的网络结构和创新点

1.缓解过拟合(BoF)

  • CutMix:基于MixUp,区别在于不对影像进行线性插值,而是将从影像中随机裁剪一块影像到另一张影像上
  • Mosaic:把4张图片,通过随机缩放、随机裁减、随机排布的方式进行拼接
  • Class label smoothing:即将硬标签转为软标签
  • DropBlock正则化和CmBN归一化

2. 网络结构的改进(BoS)

ps:将Darknet53修改为CSPDarknet53

  • backbone
    • 1)卷积块从CBL->CBM(激活函数从Leaky relu改为Mish);
    • 2)Res残差块改成了CSP残差块(Cross-stage partial connections),增加了一路CBM
    • 3)在特征融合时,加入了加权残差连接(MiWRC)-对每个残差连接加上一个可学习的系数,可使得模型能在训练初期更加稳定,进而促进整个训练过程
  • neck
    • 1)新增SPP模块,增大感受野;
    • 2)改进PAN结构,从add改为concat,且输出特征金字塔尺寸由从小到大变为从大到小,这主要是为了增加特征融合性,使feature map中融合更多层的信息

ps:
在这里插入图片描述

在这里插入图片描述

3. 训练(BoF)

  • 边框回归loss的修改:MSE改为CIOU loss
  • 学习率衰减策略:余弦退火(Cosine annealing scheduler)
  • 自对抗训练(Self-Adversarial Training,SAT):实质上代表了一种新的数据增强技术

ps:SAT技术分为 2 个训练阶段:

  1. 为了最小化成本函数,神经网络会改变原始图像而不是网络权重。与通常的方法相反,这实际上会降低网络性能,或者简单地说,模型会对自己进行“对抗性攻击”,改变原始图像以产生图像上没有所需对象的欺骗。
  2. 使用第一阶段修改后的图像用于在第二次迭代中训练网络。通过这种方式,能够减少过拟合并使模型更具通用性。

3. 后处理(BoS)

  • 在训练的时候用的是CIOU,但是在做nms的时候,用的DIOU。用DIOU可以把一些重叠度很高的框,但表示不同物体的给保留下来

总结

在目标检测的所有tricks中,一些专门针对某些模型,专门针对某些问题,或仅针对小规模数据集进行操作;而另一些tricks,如批处理规范化和残差连接,适用于大多数模型、任务和数据集。

YOLOv4假设这些通用tricks包括加权残差连接(WRC)、跨阶段部分连接(CSP)、跨小批量归一化(CmBN)、自对抗性训练(SAT)和Mish激活。

YOLOv4使用了如下tricks:WRC、CSP、CmBN、SAT、Mish激活、Mosaic数据增强、CmBN,DropBlock正则化和CIoU loss,并将其中一些功能结合起来,实现了SOTA:在Tesla V100上,针对MS COCO数据集的AP为43.5%(AP50为65.7%),实时速度为~65 FPS

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/233143.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抽丝剥茧设计模式

Singleton 单例 饿汉式 最简单的方式 /*** 饿汉式* 类加载到内存后,就实例化一个单例,JVM保证线程安全* 简单实用,推荐使用!* 唯一缺点:不管用到与否,类装载时就完成实例化* Class.forName(""…

命令行模式的rancher如何安装?

在学习kubectl操作的时候,发现rancher也有命令行模式,学习整理记录此文。 说明 rancher 命令是 Rancher 平台提供的命令行工具,用于管理 Rancher 平台及其服务。 前提 已经参照前文安装过了rancher环境了,拥有了自己的k8s集群…

redis可视化工具 RedisInsight

redis可视化工具 RedisInsight 1、RedisInsight是什么2、下载RedisInsight3、使用RedisInsight4、其他redsi可视化工具 1、RedisInsight是什么 RedisInsight 是一个用于管理和监控 Redis 数据库的图形用户界面(GUI)工具。它是由 Redis Labs 开发的&…

Java版商城:Spring Cloud+SpringBoot b2b2c实现多商家入驻直播带货及 免 费 小程序商城搭建的完整指南

随着互联网的快速发展,越来越多的企业开始注重数字化转型,以提升自身的竞争力和运营效率。在这个背景下,鸿鹄云商SAAS云产品应运而生,为企业提供了一种简单、高效、安全的数字化解决方案。 鸿鹄云商SAAS云产品是一种基于云计算的软…

STM32---中断

中断框图 一.中断 中断:当有中断请求时,CPU会停止处理当前的任务,转而去处理中断任务。 中断输入线有19/20根(互联型号20根)。 分类:系统异常(10个)和外部中断(60个&…

Java环境准备:JDK与IDEA

新手小白学Java–环境准备篇 文章目录 新手小白学Java--环境准备篇第1节 JDK的下载与安装第2节 IDEA的下载与安装第3节 使用IDEA创建第一个Java项目第4节 使用小技巧查看电脑的操作系统版本显示出文件的后缀名IDEA 修改字体大小IDEA 修改显示主题色IDEA 修改单行注释的颜色IDEA…

how2heap-2.23-11-poison_null_byte

什么是poison_null_byte 当然不止这一种&#xff0c;下面最简单的形式 #include <malloc.h> int main() {char * a malloc(0x200);char * b malloc(0x200);size_t real_size malloc_usable_size(a);a[real_size] 0;return 0; }影响&#xff1a; chunk a&#xff0…

二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)

讲了这么多数据结构相关的知识(可以看我的数据结构文章专栏): 抓紧刷题巩固一下了 目录 1.单值二叉树 题目描述 思路1 代码1 思路2 代码2 2.相同的树 题目描述 思路 代码 3.二叉树的前序遍历 代码 思路 1.单值二叉树 965. 单值二叉树 - 力扣&#xff08;LeetCod…

【数据库】CRUD常用函数UNION 和 UNION ALL

文章目录 一、CRUD二、函数2.1 字符函数 (Character Functions):2.2 数字函数 (Numeric Functions):2.3 日期函数 (Date Functions):2.4 流程控制函数:2.5 聚合函数: 三、UNION 和 UNION ALL3.1 UNION&#xff1a;3.2 UNION ALL3.3 注意事项 一、CRUD CRUD 是指数据库操作的四…

018、通用集合类型

Rust标准库包含了一系列非常有用的被称为集合的数据结构。大部分的数据结构都代表着某个特定的值&#xff0c;但集合却可以包含多个值。 与内置的数组与元组类型不同&#xff0c;这些集合将自己持有的数据存储在了堆上。这意味着数据的大小不需要在编译时确定&#xff0c;并且可…

第11课 利用windows API捕获桌面图像并通过FFmpeg分享

在上一章&#xff0c;我们已经实现了一对一音视频对话功能。在实际应用中&#xff0c;我们常需要把自己的电脑桌面分享给他人以实现桌面共享功能&#xff0c;这种功能在视频会议、在线教学等场景中很常见&#xff0c;这种功能如何实现呢&#xff1f;这节课我们就来解决这个问题…

初识Linux shell

Linux初探 Linux系统可以划分为4个部分&#xff1a; Linux内核&#xff1a;Linux系统的核心&#xff0c;控制着系统的所有硬件和软件&#xff0c;在必要时分配硬件&#xff0c;并根据需要执行软件。 内核主要功能&#xff1a; 系统内存管理&#xff1a;内核通过硬件上称为交换…

VS+QT五子棋游戏开发

1、首先安装好VS软件和QT库&#xff0c;将其配置好&#xff0c;具体不在此展开说明。 2、文件结构如下图&#xff1a; 3、绘制棋盘代码&#xff0c;如下&#xff1a; void Qwzq::paintEvent(QPaintEvent* event) {QPainter painter(this);painter.setRenderHint(QPainter::An…

VMware Workstation虚拟机CentOS 7.9 配置固定ip的步骤

VMware Workstation虚拟机CentOS7.9配置固定ip的步骤 编辑虚拟机 打开VMware Workstation。 选择要配置的虚拟机&#xff0c;但不要启动它。 点击“编辑虚拟机设置”&#xff08;Edit virtual machine settings&#xff09;。 选择“网络适配器”&#xff08;Network Adapter&…

ArcGIS制图技巧总结

Part 1 制图综述 1.1 制图的目的 随着GIS在各行各业的深入应用&#xff0c;各信息化部门和生产单位都逐渐建立起自己的GIS的应用&#xff0c;同时积累了大量的地理数据。随着应用深度和广度的推进&#xff0c;针对数据建立专题应用越来越迫切&#xff0c;对行业专题制图的需…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第五天-Linux消息共享内存练习题(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

Qt优秀开源项目之二十:RedPanda-CPP(小熊猫C++)

小熊猫C是跨平台、轻量易用的开源C/C集成开发环境。 官网&#xff1a;http://royqh.net/redpandacpp github&#xff1a;https://github.com/royqh1979/RedPanda-CPP 小熊猫C&#xff08;原名小熊猫Dev-C 7)是基于Qt开发的Dev-C替代版本。和经典的Dev-C 5.11、新的Embarcadero …

海外跨境独立站和代购系统存在必然联系?独立站建站初期,以及如何运营好独立站。

海外跨境独立站和代购系统在多个方面存在差异&#xff1a; 定位&#xff1a;独立站是拥有独立域名&#xff0c;自主宣传推广媒体与渠道的新型网站&#xff0c;更侧重于培养买家&#xff0c;做品牌建设&#xff0c;相当于个体经营专卖店。而代购系统是利用先进的技术和流程管理…

HTML---JavaScript操作DOM对象

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 本章目标 了解DOM的分类和节点间的关系熟练使用JavaScript操作DOM节点 访问DOM节点 能够熟练的进行节点的创建、添加、删除、替换等 能够熟练的设置元素的样式 能够灵活运用JavaScript获取元素…

【北邮国院大四上】Business Technology Strategy 企业技术战略

北邮国院电商大四在读&#xff0c;本笔记仅为PPT内容的整理与翻译&#xff0c;并不代表本课程的考纲及重点&#xff0c;仅为本人复习时方便阅读与思考之作。 写在前面 大家好&#xff0c;欢迎来到大学期间的最后一门课程&#xff0c;本门课程是中方课&#xff0c;所以很庆幸的…