深度学习目标检测_YOLOV4超详细解读

news2024/10/6 11:30:33

文章目录

  • 一. 前言
  • yolov4的创新点
    • 2.1 输入端的创新
      • 2.1.1数据增强
      • 2.1.2自对抗训练(SAT)
  • 2.2BackBone创新
    • Dropblock
    • 标签平滑
  • 损失函数
    • IOU Loss
    • GIOU Loss
    • DIOU Loss
    • CIOU Loss

一. 前言

作者AlexeyAB大神! YOLOv4 拥有43.5%mAP+65FPS ,达到了精度速度最优平衡,

作者团队:Alexey Bochkovskiy&中国台湾中央研究院

论文链接:

https://arxiv.org/pdf/2004.10934.pdf

代码链接:

GitHub - AlexeyAB/darknet: YOLOv4 / Scaled-YOLOv4 / YOLO - Neural Networks for Object Detection (Windows and Linux version of Darknet )
————————————————

在讲YOLOv4之前,先介绍一下两个包:Bag of Freebies(免费包)和Bag-of-Specials(特赠包)

Bag of Freebies:指的是那些不增加模型复杂度,也不增加推理的计算量的训练方法技巧,来提高模型的准确度

Bag-of-Specials:指的是那些增加少许模型复杂度或计算量的训练技巧,但可以显著提高模型的准确度

YOLOv4主要的贡献:

①构建了一个简单且高效的目标检测模型,该算法降低了训练门槛,这使得普通人员都可以使用 1080Ti 或 2080 Ti GPU 来训练一个超快,准确的(super fast and accurate)目标检测器。

②验证了最先进的 Bag-of-Freebies 和 Bag-of-Specials 方法在训练期间的影响

       BoF指的是

                    1)数据增强:图像几何变换(随机缩放,裁剪,旋转),Cutmix,Mosaic等

                    2)网络正则化:Dropout,Dropblock等

                    3) 损失函数的设计:边界框回归的损失函数的改进 CIOU               

        BoS指的是

                   1)增大模型感受野:SPP、ASPP等

                   2)引入注意力机制:SE、SAM

                   3)特征集成:PAN,BiFPN                                  

                   4)激活函数改进:Swish、Mish

                  5)后处理方法改进:soft NMS、DIoU NMS

③修改了最先进的方法,并且使其更为有效,适合单GPU训练。包括 CBN,PAN, SAM等,从而使得 YOLO-v4 能够在一块 GPU 上就可以训练起来。

yolov4的创新点

输入端的创新点:训练时对输入端的改进,主要包括Mosaic数据增强、cmBN、SAT自对抗训练

BackBone主干网络:各种方法技巧结合起来,包括:CSPDarknet53、Mish激活函数、Dropblock

Neck:目标检测网络在BackBone和最后的输出层之间往往会插入一些层,比如Yolov4中的SPP模块、FPN+PAN结构

Prediction:输出层的锚框机制和Yolov3相同,主要改进的是训练时的回归框位置损失函数CIOU_Loss,以及预测框筛选的nms变为DIOU_nms

2.1 输入端的创新

Yolov4对训练时的输入端进行改进,使得训练时在单张GPU上跑的结果也蛮好的。比如数据增强Mosaic、cmBN、SAT自对抗训练。

2.1.1数据增强

Yolov4中使用的Mosaic是参考2019年底提出的CutMix数据增强的方式,但CutMix只使用了两张图片进行拼接,而Mosaic数据增强则采用了4张图片,随机缩放随机裁剪随机排布的方式进行拼接。
在这里插入图片描述
为什么要进行Mosaic数据增强呢?
在平时项目训练时,小目标的AP一般比中目标和大目标低很多。而Coco数据集中也包含大量的小目标,但比较麻烦的是小目标的分布并不均匀。Coco数据集中小目标占比达到41.4%,数量比中目标和大目标都要多。但在所有的训练集图片中,只有52.3% 的图片有小目标,而中目标和大目标的分布相对来说更加均匀一些。

针对这种状况,Yolov4的作者采用了Mosaic数据增强的方式。

主要有2个优点:

1.丰富数据集:随机使用4张图片,随机缩放,再随机分布进行拼接,大大丰富了检测数据集,特别是随机缩放增加了很多小目标,让网络的鲁棒性更好。
2.batch不需要很大:Mosaic增强训练时,可以直接计算4张图片的数据,使得Mini-batch大小并不需要很大,一个GPU就可以达到比较好的效果。

2.1.2自对抗训练(SAT)

SAT全称:Self-adversarial-training。可以自己增加或者让网络增加噪音点来增加训练难度
在这里插入图片描述

2.2BackBone创新

Dropblock

Yolov4中使用的Dropblock,其实和常见网络中的Dropout功能类似,也是缓解过拟合的一种正则化方式。

Dropblock在2018年提出,论文地址:https://arxiv.org/pdf/1810.12890.pdf

传统的Dropout很简单,一句话就可以说的清:随机删除减少神经元的数量,使网络变得更简单。

dropout主要作用在全连接层,而dropblock可以作用在任何卷积层之上
在这里插入图片描述

而Dropblock和Dropout相似,比如下图:
在这里插入图片描述
中间Dropout的方式会随机的删减丢弃一些信息,但Dropblock的研究者认为,卷积层对于这种随机丢弃并不敏感,因为卷积层通常是三层连用:卷积+激活+池化层,池化层本身就是对相邻单元起作用。而且即使随机丢弃,卷积层仍然可以从相邻的激活单元学习到相同的信息。

因此,在全连接层上效果很好的Dropout在卷积层上效果并不好。

所以右图Dropblock的研究者则干脆整个局部区域进行删减丢弃。

这种方式其实是借鉴2017年的cutout数据增强的方式,cutout是将输入图像的部分区域清零,而Dropblock则是将Cutout应用到每一个特征图。而且并不是用固定的归零比率,而是在训练时以一个小的比率开始,随着训练过程线性的增加这个比率。

在特征图上一块一块的进行归0操作,去促使网络去学习更加鲁棒的特征

为了保证Dropblock后的特征图与原先特征图大小一致,需要和dropout一样,进行rescale操作

Dropblock的研究者与Cutout进行对比验证时,发现有几个特点:

优点一:Dropblock的效果优于Cutout

优点二:Cutout只能作用于输入层,而Dropblock则是将Cutout应用到网络中的每一个特征图上

优点三:Dropblock可以定制各种组合,在训练的不同阶段可以修改删减的概率,从空间层面和时间层面,和Cutout相比都有更精细的改进。

Yolov4中直接采用了更优的Dropblock,对网络的正则化过程进行了全面的升级改进。

标签平滑

神经网络最大的缺点就是太自信(过拟合),毕竟每个东西都是由原子组成,多多少少有一些相似,所以不要让模型太过绝对,拿下面图片距举例,虽然我们预测的是猫,但是让狗的概率不至于为0,留一丝喘息的余地,日后好相见,当然大概率还是猫。
在这里插入图片描述
使用之前(左)和使用之后的区别(右),明显右边的聚类更好一些。
在这里插入图片描述

损失函数

CIOU_loss-目标检测任务的损失函数一般由分类损失函数和回归损失函数两部分构成,回归损失函数的发展过程主要包括:最原始的Smooth L1 Loss函数、2016年提出的IoU Loss、2019年提出的GIoU Loss、2020年提出的DIoU Loss和最新的CIoU Loss函数。

IOU Loss

在这里插入图片描述
IoU Loss-所谓的IoU Loss,即预测框与GT框之间的交集/预测框与GT框之间的并集。这种损失会存在一些问题,具体的问题如下图所示,(1)如状态1所示,当预测框和GT框不相交时,即IOU=0,此时无法反映两个框之间的距离,此时该 损失函数不可导,即IOU_Loss无法优化两个框不相交的情况。(2)如状态2与状态3所示,当两个预测框大小相同时,那么这两个IOU也相同,IOU_Loss无法区分两者相交这种情况。
在这里插入图片描述

GIOU Loss

GIOU_Loss-为了解决以上的问题,GIOU损失应运而生。GIOU_Loss中增加了相交尺度的衡量方式,缓解了单纯IOU_Loss时存在的一些问题。
在这里插入图片描述
GIOU引入了最小封闭形状C(C是把A和B包含在内的最小矩形),在不重叠的情况下能让预测框尽可能的朝着真实框前进。
我们再看这个公式的最后一部分,意思是C减去A和B的并集再除以C,当然分子的值越小越好,最好为0。
L G I o U = 1 − I o U + ∣ C − B ∪ B g t ∣ ∣ C ∣ L_{GIoU} = 1-IoU + \frac{|C-B \cup B^{gt}|}{|C|} LGIoU=1IoU+CCBBgt
在这里插入图片描述
但是GIOU Loss也有一定的缺陷,就是当遇到预测框完全在真实框里面的时GIOU就和IOU一样了,不能确定哪个框更好了。
在这里插入图片描述

DIOU Loss

L D I o U = 1 − I o U + ρ 2 ( b , b g t ) c 2 L_{DIoU} = 1-IoU + \frac{\rho^2(b,b^{gt})}{c^2} LDIoU=1IoU+c2ρ2(b,bgt)
b: 预测框
b{gt}: 真实框
ρ \rho ρ :欧式距离
公式最后一部分的分子表示真实框和预测框中心点的欧式距离,图中d。
分母是能覆盖预测框与真实框的最小BOX的对角线长度,图中c
两个框越重合的时候,d值越小,当两个框重合时,d值为0。
在这里插入图片描述
DIOU直接优化距离,网络收敛速度更快,并且解决了GIOU的问题。也是用的比较多的方法。下面两张图片是为了好理解:在这里插入图片描述在这里插入图片描述
如下图所示,当真实框包裹预测框时,此时预测框的中心点的位置都是一样的,因此按照DIOU_Loss的计算公式,三者的值都是相同的。为了解决这个问题,CIOU_Loss应运而生。
在这里插入图片描述

CIOU Loss

L C I o U = 1 − I o U + ρ 2 ( b , b g t ) c 2 + α ν L_{CIoU} = 1-IoU + \frac{\rho^2(b,b^{gt})}{c^2}+\alpha\nu LCIoU=1IoU+c2ρ2(b,bgt)+αν
ν = 4 π 2 ( arctan ⁡ ω g t h g t − arctan ⁡ ω h ) 2 \nu=\frac{4}{\pi^2}(\arctan\frac{\omega^{gt}}{h^{gt}}-\arctan\frac{\omega}{h})^2 ν=π24(arctanhgtωgtarctanhω)2
α = ν ( 1 − I o U ) + ν \alpha=\frac{\nu}{(1-IoU)+\nu} α=(1IoU)+νν

一个好的损失函数要考虑3方面因素:重叠面积,中心点距离,长宽比
在DIOU的时候已经把重叠面积和中心点距离考虑进去了,现在还差一个长宽比 ν \nu ν。当真实框长宽比 ω g t h g t \frac{\omega^{gt}}{h^{gt}} hgtωgt与预测框长宽比 ω h \frac{\omega}{h} hω一直时最后一项为0,其中 α \alpha α可以看做权重参数。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C语言(利用函数将字符串转换为数字和数子转换字符串)

目录 1.atoi(字符串转换为int类型) 2.atof(字符串转换为float类型) 3.atol(字符串转换为long类型) 4.strtol(字符串转换为long类型,但可以选择转换的进制,以及标记结束字符地址) 5.strtod(字符串转换为double类型,可以标记结束字符地址) 6.整数和浮点数转换为…

项目进度经常超时怎么办?项目经理如何有效管理项

当项目延期,我们要先找根因,再根据根因制定具体针对性措施。如果是故障,第一时间是以修复问题为主,然后去找原因,最终给出对应的措施。 对于项目进度,那首先要去了解延期的原因,是计划制定的不…

vite 项目切换不同依赖项的分支,运行加载缓慢问题的解决方案(Pre-bundling dependencies)

前言 当我们在首次使用 yarn dev 命令启动 vite 时,或者 切换分支,依赖项发生变化时 会发现项目启动时相当的慢,大概要十几分钟,而且控制台终端打印了如下信息: Pre-bundling dependencies: this will be run only …

vivo官网App模块化开发方案-ModularDevTool

作者:vivo 互联网客户端团队- Wang Zhenyu 本文主要讲述了Android客户端模块化开发的痛点及解决方案,详细讲解了方案的实现思路和具体实现方法。 说明:本工具基于vivo互联网客户端团队内部开源的编译管理工具开发。 一、背景 现在客户端的业…

【Jqgrid分页勾选保存】三步实现表格分页勾选(取消勾选)保存(附源码)

目录1、创建临时存储数组,初始化赋值2、单行选中与取消,调整数组3、全选与取消全选,调整数组4、输出数组保存5、片尾彩蛋【写在前面】表格可以说是在我们的web页面中是最常见的,之前我们介绍过layui表格翻页勾选的实现过程&#x…

到2030年,边缘计算潜在市场将增长至4450亿美元!

国际电信咨询公司STL Partners近日出了一份边缘计算关键数据统计,重点介绍了九项边缘计算统计数据,边小缘着手翻译了一下这些数据,这些数据预测显示了边缘计算市场的增长潜力,以及边缘部署数量最多的垂直行业和地区。1.到2030年&a…

java Spring aop入门准备工作

首先 Spring 框架一般都是基于 Aspect]实现 AOP 操作 然后就会带出问题 什么是 Aspect 首先 Aspect并不属于Spring 他是一个单独的AOP框架 离开Spring他也能单独运行 但在Spring开发中 我们常用他来配合Spring完成AOP操作 所以说 我们是要 基于Aspect去配合Spring完成AOP操作…

压力应变电桥信号隔离放大变送器差分输入0-±10mV/0-±20mV转0-20mA/0-10v

概述:DIN11 IPO 压力应变桥信号处理系列隔离放大器是一种将差分输入信号隔离放大、转换成按比例输出的直流信号导轨安装变送模块。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等行业。此系列模块内部嵌入了一个高效微功率的电源,向输入…

ChatGPT入门案例|商务智能对话客服(二)

ChatGPT是人工智能研究实验室OpenAI新推出的一种人工智能技术驱动的自然语言处理工具,使用了Transformer神经网络架构,也是GPT-3.5架构,这是一种用于处理序列数据的模型,拥有语言理解和文本生成能力,尤其是它会通过连接…

day41【代码随想录】动态规划之01背包问题

文章目录前言 01背包一、二维dp数组01背包1.1 确定dp数组以及下标的含义1.2 确定递推公式1.3 初始化1.4 遍历顺序1.5推导dp数组1.6 完整代码二、一维dp数组01背包(滚动数组)2.1 确定dp数组以及下标的含义2.2 确定递推公式2.3 初始化2.4 遍历顺序&#xf…

移动应用开发环境搭建Andriod Studio

文章目录提示:虚拟化的开启零 java环境准备一 下载和安装Android Studio1.1 默认方式安装操作1.2 自定义安装方式1.3 StartService 失败问题解决二 第一个程序2.1 创建一个新项目2.2 下载和创建模拟器2.3 启动模拟器2.4 运行提示:虚拟化的开启 记得提前…

大神之路-起始篇 | 第17章.计算机科学导论之【计算理论】学习笔记

欢迎关注「全栈工程师修炼指南」公众号点击 👇 下方卡片 即可关注我哟!设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习!涉及 企业运维、网络安全、应用开发、物联网、人工智能、大数据 学习知识“ 花开堪折直须折,莫待无花空折…

2023年浙江水利水电施工安全员精选真题题库及答案

百分百题库提供水利水电施工安全员考试试题、水利水电施工安全员考试预测题、水利水电施工安全员考试真题、水利水电施工安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 119.下列关于大模板按照的说法正确的是&#x…

#459 津津有味:北方人对饺子的痴迷可能是刻进骨子里的

点击文末“阅读原文”即可收听本期节目剪辑、音频 / 卷圈 编辑 / SandLiu 卷圈 监制 / 姝琦 文案 / 粒粒 产品统筹 / bobo 录音间 / 声湃轩活着不端饺子碗,哭天抹泪没人管。你一定见识过铺天盖地的对“北方人一过节就吃饺子”的调侃。但饺子就是很好吃这件事&am…

ARM uboot 源码分析4 -启动第二阶段

一、start_armboot 函数简介 1、一个很长的函数 (1) 这个函数在 uboot/lib_arm/board.c 的第 444 行开始到 908 行结束。 (2) 450 行还不是全部,因为里面还调用了别的函数。 (3)为什么这么长的函数,怎么不分成两三个函数?主要因为这个函数…

100种思维模型之非sr思维模型-012

什么是sr? sr是stimulus-response的缩写,意思是刺激反应。 那么非sr思维模型就是非刺激反应思维模型的意思。 今天我们来聊聊非sr思维模型——一个提醒我们思考,提醒我们任何时刻都有选择权的思维模型。 本文依然从三个方面进行介绍,何谓…

你是真的“C”——详解结构体知识点

你是真的“C”——详解结构体知识点😎前言🙌什么是结构体?🙌1. 结构体的声明🙌1.1 结构的基础知识1.2 结构的声明1.3 结构成员的类型1.4 结构体变量的定义和初始化2. 结构体成员的访问🙌3结构体传参&#x…

推荐领域新人必看书籍:《推荐系统实践》

这本书非常适合推荐领域的新手,因为这本书的主要目的更接近于科普,而不是描述具体的推荐算法。什么是推荐系统?如果有一位你喜欢的女士约你一起外出,肯定不需要别人推荐你是否赴约吧!(信息量太小则不需要被…

VS Code中的GIT操作

一、前言 我们在进行项目开发时都免不了与GIT打交道,但是面对各种的难记的GIT命令总是手足无措;还好编译器中内置了GIT的仓库的一系列操作,掌握了可视化的操作就不用担心记不住GIT命令符了。下面主要介绍VS Code中具体的操作: 二…

【安全】Nginx实现反向代理负载均衡

基础概念 什么是负载均衡? 负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求;即把请求均匀的分摊给上游的应用服务器。最基本的配置方式便是轮询: 负载均衡策略 策略 轮询 根据请求顺序分配 weight …