重磅更新!YoloV4最新论文!解读yolov4框架

2023-11-03

论文地址和代码

https://arxiv.org/abs/2004.10934v1

代码:https://github.com/AlexeyAB/darknet

本篇博文是对YOLOv4论文的翻译和框架解读!并且有PDF版本可供下载!——YOLOv4阅读笔记(附思维导图)!YOLOv4: Optimal Speed and Accuracy of Object Detection(点击跳转)

摘要:

据说有许多功能可以提高卷积神经网络(CNN)的准确性。 需要在大型数据集上对这些特征的组合进行实际测试,并对结果进行理论证明。 某些功能仅在某些模型上运行,并且仅在某些问题上运行,或者仅在小型数据集上运行; 而某些功能(例如批归一化和残差连接)适用于大多数模型,任务和数据集。 我们假设此类通用功能包括加权残差连接(WRC),跨阶段部分连接(CSP),跨小批量标准化(CmBN),自对抗训练(SAT)和Mish激活。 我们使用以下新功能:WRC,CSP,CmBN,SAT,Mish激活,马赛克数据增强,CmBN,DropBlock正则化和CIoU丢失,并结合其中的一些功能来实现最新的结果:43.5%的AP(65.7 在Tesla V100上,MS COCO数据集的实时速度约为65 FPS。

 核心中的核心:作者将Weighted-Residual-Connections(WRC), Cross-Stage-Partial-connections(CSP), Cross mini-Batch Normalization(CmBN), Self-adversarial-training(SAT),Mish-activation Mosaic data augmentation, DropBlock, CIoU等组合得到了爆炸性的YOLOv4,可以吊打一切的YOLOv4.在MS-COCO数据上:43.5%@AP(65.7%@AP50)同时可以达到65fps@TeslaV100.

 

贡献

作者设计YOLO的目的之初就是设计一个快速而高效的目标检测器。该文的贡献主要有以下几点:

  • 设计了一种快速而强有力的目标检测器,它使得任何人仅需一个1080Ti或者2080Ti即可训练这样超快且精确的目标检测器你;

  • (不会翻译直接上英文)We verify the influence of SOTA bag-of-freebies and bag-of-specials methods of object detection during detector training

  • 作者对SOTA方法进行改进(含CBN、PAN,SAM)以使其更适合单GPU训练

方法

作者在现有实时网络的基础上提出了两种观点:

  • 对于GPU而言,在组卷积中采用小数量的groups(1-8),比如CSPResNeXt50/CSPDarknet53;

  • 对于VPU而言,采用组卷积而不采用SE模块。

网路结构选择

网络结构选择是为了在输入分辨率、网络层数、参数量、输出滤波器数之间寻求折中。作者研究表明:CSPResNeXt50在分类方面优于CSPDarkNet53,而在检测方面反而表现要差

网络主要结构确定了后,下一个目标是选择额外的模块以提升感受野、更好的特征汇聚模块(如FPN、PAN、ASFF、BiFPN)。对于分类而言最好的模型可能并不适合于检测,相反,检测模型需要具有以下特性:

  • 更高的输入分辨率,为了更好的检测小目标;

  • 更多的层,为了具有更大的感受野;

  • 更多的参数,更大的模型可以同时检测不同大小的目标。

一句话就是:选择具有更大感受野、更大参数的模型作为backbone。下图给出了不同backbone的上述信息对比。从中可以看到:CSPResNeXt50仅仅包含16个卷积层,其感受野为425x425,包含20.6M参数;而CSPDarkNet53包含29个卷积层,725x725的感受野,27.6M参数。这从理论与实验角度表明:CSPDarkNet53更适合作为检测模型的Backbone

在CSPDarkNet53基础上,作者添加了SPP模块,因其可以提升模型的感受野、分离更重要的上下文信息、不会导致模型推理速度的下降;与此同时,作者还采用PANet中的不同backbone级的参数汇聚方法替代FPN。

最终的模型为:CSPDarkNet53+SPP+PANet(path-aggregation neck)+YOLOv3-head = YOLOv4.

Tricks选择

为更好的训练目标检测模型,CNN模型通常具有以下模块:

  • Activations:ReLU、Leaky-ReLU、PReLU、ReLU6、SELU、Swish or Mish

  • Bounding box regression Loss:MSE、IoU、GIoU、CIoU、DIoU

  • Data Augmentation:CutOut、MixUp、CutMix

  • Regularization:DropOut、DropPath、Spatial DropOut、DropBlock

  • Normalization:BN、SyncBn、FRN、CBN

  • Skip-connections:Residual connections, weighted residual connections, Cross stage partial connections

作者从上述模块中选择如下:激活函数方面选择Mish;正则化方面选择DropBlock;由于聚焦在单GPU,故而未考虑SyncBN。

其他改进策略

为使得所涉及的检测器更适合于单GPU,作者还进行了其他几项额外设计与改进:

  • 引入一种新的数据增广方法:Mosaic与自对抗训练;

  • 通过GA算法选择最优超参数;

  • 对现有方法进行改进以更适合高效训练和推理:改进SAM、改进PAN,CmBN。

 

 

YOLOv4

总而言之,YOLOv4包含以下信息:

  • Backbone:CSPDarkNet53

  • Neck:SPP,PAN

  • Head:YOLOv3

  • Tricks(backbone):CutMix、Mosaic、DropBlock、Label Smoothing

  • Modified(backbone): Mish、CSP、MiWRC

  • Tricks(detector):CIoU、CMBN、DropBlock、Mosaic、SAT、Eliminate grid sensitivity、Multiple Anchor、Cosine Annealing scheduler、Random training shape

  • Modified(tector):Mish、SPP、SAM、PAN、DIoU-NMS

Experiments

模型的好坏最终还是要通过实验来验证,直接上对比表:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重磅更新!YoloV4最新论文!解读yolov4框架 的相关文章

  • pm2 进程管理工具,相关命令

    1 pm2需要全局安装 npm install g pm2 2 进入项目根目录 2 1 启动进程 应用 pm2 start bin www 或 pm2 start app js 2 2 重命名进程 应用 pm2 start app js n
  • minicom安装、配置和使用

    在开发过程中 我们经常需要通过串口连接Android开发板的底层系统 Linux QNX 等 minicom是一个常用串口连接终端软件 在命令行终端下通过文本界面进行操作使用 安装 sudo apt install minicom 配置 首

随机推荐

  • BufferedReader与FileReader及FileInputStream

    BufferedReader 是缓冲字符输入流 它继承于Reader BufferedReader 的作用是为其他字符输入流添加一些缓冲功能 BufferedReader的作用 从字符输入流中读取文本 缓冲各个字符 从而实现字符 数组和行的
  • C# Ocr离线式识别,文字提取,(附源码下载)

    源代码下载 效果图 文字内容提取后填充 JObject obj ocr GeneralBasic bt ops this richTextBox1 Text string str if obj Count gt 0 JArray jo JA
  • LeetCode - 移除元素

    一 题目描述 给定一个数组 nums 和一个值 val 你需要原地移除所有数值等于 val 的元素 返回移除后数组的新长度 不要使用额外的数组空间 你必须在原地修改输入数组并在使用 O 1 额外空间的条件下完成 元素的顺序可以改变 你不需要
  • GBase8a MPP Cluster 安装部署——操作系统配置建议

    编写目的 本文档面向GBase 8a产品的售后人员 用户使用人员 以及广大GBase 8a感兴趣的技术人员 以便用于指导其更好的完成GBase8a MPP Cluster 安装部署工作 对硬件配置 网络环境 操作系统及软件配置等系统实施过程
  • vue 接口数据返回之后再渲染页面_Vue怎么让数据请求成功以后再渲染页面?

    需求如下 进入页面有一个检测按钮 点击即可向后端请求数据 进入页面如果不点击检测 则显示如下 点击检测 如果返回的是正常的状态则显示 如果返回的状态是异常 则显示 目前有个BUG 就是点击检测的时候 先从变为 然后马上变为 因为逻辑里面我是
  • IJCAI2023 Summary Reject公布

    点击文末公众号卡片 找对地方 轻松参会 北京时间2023年2月25日上午6点四十左右 cmt上状态已变 分为awaiting list 和reject 此前不少人预测2月24日晚上八点或凌晨两点左右出 截至2023年2月25日 7 16 a
  • 调用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()时遇到的一些问题

    之前在其他地方写的 一直要求手机验证 之前能跳过 麻烦点就麻烦点了 今天编辑文章的时候直接不能改了 无奈 如果手动调用 TransactionAspectSupport currentTransactionStatus setRollbac
  • mybatis获取插入数据时自动生成的主键id

    mapper文件 void insert Map
  • LaTeX

    简介 首先要介绍一下我用的Visio文件转为 eps的办法 vsd 文件 利用Visio打开 然后另存为 选择存为 pdf文件 pdf文件 利用Inkscape打开 然后另存为 选择存为 eps格式 之前一直用visio2010版 然后按照
  • 【React+TS】从零开始搭建react+typescript+router+redux+less+px2rem自适应+axios反向代理+别名@+Antd-mobile

    一 通过create react app脚手架创建项目 npx create react app testproject template typescript 在vscode中打开项目 可以看到顺利生成了react项目且组件的后缀为tsx
  • Java web项目创建笔记23 之《spring整合xxl-job》

    xxl job是一款功能强大的分布式任务调度系统 部署方法按照官网写的说明即可 https www xuxueli com xxl job 1 下载release版本代码 https github com xuxueli xxl job r
  • 先电Openstack云平台搭建【超级详细】【附带镜像】

    前言 大二上学期学习Openstack 苦于百度与CSDN上没有对应版本的教程 学的十分艰难 在此 将我的Openstack云平台搭建过程写出 留给新手学习 准备工作 VMware Workstation Pro 虚拟机 我使用版本 15
  • C++模板,模板具体化,特例化

    1 模板重载原则 函数同名 重载 时 调用优先级通常为 普通函数 gt 显式具体化 template specilazation gt 显式实例化 gt 一般模版函数 但更一般而言 有两条规则 1 gt 如果各自函数形参和调用处的实参 并非
  • Java锁的基本用法

    文章目录 Java锁的基本用法 synchronized和lock synchronized 首先在没有加锁的情况下 加锁的情况 Lock 首先在没有加锁的情况下 加锁的情况下 线程的通信 synchronized 通过wait和notif
  • Js 代替eval的方法 字符串转对象

    js中常用eval 函数将一个字符串当作一个JavaScript表达式一样去执行 但在安全漏洞上是存在隐患的 现找到eval函数的替代方法 let a custId 9860131056 custName custAdd const res
  • Apache Flink 使用DataStream API进行数据处理

    问题导读1 流处理和批处理分别入口是什么 2 对于本地和远程运行程序 都可以使用哪个函数 3 Flink数据源分为哪两类 4 Flink DataStream和DataSet source都是基于什么格式 5 Flink中kafka sou
  • 货币兑换(指针与常量)

    货币兑换 指针与常量 题目描述 设定以下汇率常量 美元汇率为6 2619 表示1美元兑换6 2619元人民币 欧元汇率为6 6744 表示1欧元兑换6 6744元人民币 日元汇率为0 0516 表示1元日元兑换0 0516元人民币 港币汇率
  • matlab 矩阵列乘系数,matlab 给某一列乘上一个系数

    矩阵M是一个 mxn 的矩阵 现在要给M矩阵的第一列都要乘上10 使其第一列扩大10倍 那肿么做呢 我第一时间用的是 M 1 M 1 10 错误的 但是这个错了 结果是不对的 这里要用点乘才行 所以正确的写法是 M 1 M 1 10 正确写
  • Qt 实现简易串口助手

    界面预览 代码如下 h文件 pragma once include
  • 重磅更新!YoloV4最新论文!解读yolov4框架

    论文地址和代码 https arxiv org abs 2004 10934v1 代码 https github com AlexeyAB darknet 本篇博文是对YOLOv4论文的翻译和框架解读 并且有PDF版本可供下载 YOLOv4