目标检测——YOLOv4算法解读

论文:YOLOv4:Optimal Speed and Accuracy of Object Detection
作者:Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao
链接:https://arxiv.org/pdf/2004.10934.pdf
代码:https://github.com/AlexeyAB/darknet

YOLO系列其他文章:

  • YOLOv1通俗易懂版解读
  • SSD算法解读
  • YOLOv2算法解读
  • YOLOv3算法解读
  • YOLOv5算法解读

文章目录

  • 1、算法概述
  • 2、YOLOv4细节
    • 2.1 Selection of architecture
    • 2.2 Mosaic data augmentation
    • 2.3 Self-Adversarial Training (SAT)
    • 2.4 CmBN
    • 2.5 修改SAM和PAN结构
    • 2.6 使用的BoF和BoS
  • 3、实验


1、算法概述

到2020年,有大量的改进手段和优化方式对提升网络精度有帮助,但有些只针对于特定数据集有用,有些改进却是针对所有数据集、所有任务通用的,比如:batch-normalization和残差连接。YOLOv4正是采用这些通用特征如:带权重的残差连接(Weighted-Residual-Connections, WRC),跨阶段部分连接(Cross-Stage-Partial-connections, CSP),跨小批量归一化(Cross mini-Batch Normalization, CmBN)、自我对抗训练(Self-adversarial-training, SAT),Mish激活函数,马赛克数据增强(Mosaic data augmentation),DropBlock regularization和CIoU损失函数,结合这一系列改进措施在Tesla V100显卡上实现了在MS COCO数据集上43.5%AP(65.7% AP50)的性能,并且推理速度为65FPS。相比YOLOv3在AP指标上有了非常大的提升。如图:
在这里插入图片描述
YOLOv4的主要贡献如下:
1、构建了一个简单高效的目标检测算法,降低了训练门槛,可以使用1080Ti或2080Ti GPU就能训练起来;
2、验证了直到本算法提出之前的最先进的Bag-of-Freebies和Bag-of-Specials方法的有效性。
3、修改了最先进的方法,使其更有效,更适合单GPU训练,包括CBN,PAN,SAM等。

在这之前先解释一下Bag-of-Freebies和Bag-of-Specials

  • Bag-of-Freebies:按照字面翻译是免费包的意思,指通过开发更好的训练策略或只增加训练成本的方法,使目标检测器在不增加推理成本的情况下获得更好的精度。目标检测方法中经常采用的符合免费包定义的是数据增强,有图像几何变换(随机缩放,裁剪,旋转),Cutmix,Mosaic等;网络正则化:Dropout,Dropblock等;损失函数的设计:比如边界框回归的损失函数改进CIoU。
  • Bag-of-Specials:指那些只增加少量推理成本,却能显著提高目标检测精度的插件模块和后处理方法,作者称之为“特品包”。一般来说,这些插件模块是为了增强模型中的某些属性,如扩大接受野SPP、ASPP等;引入注意机制SE、SAM模块;增强特征集成能力PAN、BiFPN;激活函数的改进Swish、Mish等;后处理方法改进如soft NMS、DIoU NMS对模型预测结果进行筛选。

其次作者总结了现如今检测算法的网络结构,给一阶段算法(比如YOLO, SSD, RetinaNet等)和二阶段算法(比如R-CNN系列)画了统一的网络结构图,很有参考意义,如下所示:
在这里插入图片描述


2、YOLOv4细节

2.1 Selection of architecture

在这里插入图片描述
虽然CSPResNext50分类性能比CSPDarknet53要好,但对于检测任务而言,后者比前者表现更好;对于感受野而言,CSPDarknet53虽然没有EfficientNet-B3大,但比后者推理速度快3倍左右。综合来看,作者最后选择了CSPDarknet53[1]作为主干网络,在主干最后加上SPP[2]扩大感受野,通过PAN[3]增强特征融合再接上YOLOv3[4]的检测头最后得到YOLOv4。其完整结构如下图[5]所示:
在这里插入图片描述

2.2 Mosaic data augmentation

马赛克数据增强是将4张图片合成一张图片,相对于CutMix只是混合了两张图片,这可以使得网络一次性在一张图片上见到更多的信息,也使得可以设置小的batchsize,从而使得单张显卡一次迭代可以见到之前4倍batchsize数量的图片信息。
在这里插入图片描述

2.3 Self-Adversarial Training (SAT)

自我对抗训练也代表了一种新的数据增强技术,可以在两个前向后向传播阶段操作。在第一阶段,神经网络改变原始图像,不改变网络权重。通过这种方式,神经网络对自己进行对抗性攻击,改变原始图像以制造图像上没有期望对象的欺骗。在第二阶段,训练神经网络以正常方式检测修改后的图像上的物体。

2.4 CmBN

CmBN是CBN[6]修改后的版本,全称为Cross mini-Batch Normalization(CmBN)。BN是对当前mini-batch进行归一化。CBN是对当前以及当前往前数3个mini-batch的结果进行归一化,而CmBN则是仅仅在这个Batch中进行累积。如下图所示:
在这里插入图片描述

2.5 修改SAM和PAN结构

在这里插入图片描述
在这里插入图片描述

2.6 使用的BoF和BoS

  • Backbone使用的BoF:CutMix和Mosaic数据增强,DropBlock正则化,类别标签平滑(Class label smoothing)
  • Backbone使用的BoS:Mish激活函数,CSP连接,多输入加权残差连接(Multi-input weighted residual connections, MiWRC)
  • Detector使用的BoF:CIoU-loss,CmBN,DropBlock正则化,Mosaic数据增强,自对抗训练,消除网格敏感性(参考https://github.com/ultralytics/yolov3),一个gt框匹配多个anchor,余弦退火学习策略(Cosine annealing scheduler),采用遗传算法选择最优超参数,随机训练尺寸
  • Detector使用的BoS:Mish激活函数,SPP模块,SAM模块,PAN模块,DIoU-NMS

3、实验

作者在ImageNet(ILSVRC 2012 val)数据集上做分类测试,在MS COCO(test-dev 2017)数据集上做检测测试。分类数据集主要用于前期的数据增强消融实验,检测数据集用于评估检测指标。如下图所示,是YOLOv4与当前最新水平的检测算法对比结果
在这里插入图片描述


参考文献:
[1] Chien-Yao Wang, Hong-Yuan Mark Liao, Yueh-Hua Wu, Ping-Yang Chen, Jun-Wei Hsieh, and I-Hau Yeh. CSPNet: A new backbone that can enhance learning capability of cnn. Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition Workshop (CVPR Workshop),2020.2,7
[2] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun.Spatial pyramid pooling in deep convolutional networks for visual recognition. IEEE Transactions on Pattern Analysis and Machine Intelligence (TPAMI), 37(9):1904–1916, 2015. 2, 4, 7
[3] Shu Liu, Lu Qi, Haifang Qin, Jianping Shi, and Jiaya Jia. Path aggregation network for instance segmentation. In Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pages 8759–8768, 2018.1, 2, 7
[4] Joseph Redmon and Ali Farhadi. YOLOv3: An incremental improvement. arXiv preprint arXiv:1804.02767, 2018. 2, 4, 7, 11
[5] Terven J, Cordova-Esparza D. A comprehensive review of YOLO: From YOLOv1 and beyond. arXiv 2023[J]. arXiv preprint arXiv:2304.00501
[6] Zhuliang Yao, Yue Cao, Shuxin Zheng, Gao Huang, and Stephen Lin. Cross-iteration batch normalization. arXiv preprint arXiv:2002.05712, 2020.1,6

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

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

相关文章

如何使用Excel进行设备管理:巡检、维修、保养、备件管理

在现代企业运营中,设备管理是维持生产效率和保障生产安全的关键环节。良好的设备管理包括设备的巡检、维修、保养和备件管理等多个方面。随着信息技术的发展,许多企业开始利用电子化工具来提高设备管理的效率和准确性。其中,Excel作为一款功能…

旅游行业分析及媒体邀约资源汇总

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 酒店旅游行业分析及媒体邀约资源汇总是两个相对独立但又相互关联的领域。下面将分别对这两个方面进行概述。 酒店旅游行业分析 1. 市场概况 市场规模:评估市场的总价值、增长…

react中使用antdesign组件库的table组件实现自定义筛选菜单

需求如下: 这是一个表格的表头信息,实现这几列的筛选。 涉及到的筛选有:自定义选择项,动态生成选择项,自定义筛选菜单展示 1、依据antdesign官方给出的例子实现的,比如第一列,使用的是&#x…

阿里云RDS MySQL与自建MySQL数据库进行主从同步(GTID方式)

1、创建数据库,dump阿里云RDS数据,导入到自建MySQL 阿里云RDS的配置几乎不用动,只需从RDS开一个只读的账号出来。 在ECS服务器上远程导出RDS的数据库,执行下面命令,记得将[]内容替换掉 mysqldump -h http://***.mys…

安装vcenter管理esxi

安装vcenter管理esxi虚拟化操作系统 文章目录 安装vcenter管理esxi虚拟化操作系统1.安装vcenter2.vcenter的应用 1.安装vcenter esxi虚拟机具体安装步骤请参考上一篇文章,vcenter软件包需自己到网上下 2.vcenter的应用

电机学(笔记一)

磁极对数p: 直流电机的磁极对数是指电机定子的磁极对数,也等于电机电刷的对数。它与电机的转速和扭矩有直接关系。一般来说,极对数越多,电机转速越低,扭矩越大,适用于低速、高扭矩的场合;相反&…

Java-JVM 虚拟机原理调优实战

一、基础 栈帧(Stack Frame)栈空间的 基本元素,用于 方法的调用和方法的执行的数据结构 堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或对象后&#xff0c…

MATLAB的使用(一)

一,MATLAB的编程特点 a,语法高度简化; b,脚本式解释型语言; c,针对矩阵的高性能运算; d,丰富的函数工具箱支持; e,通过matlab本体构建跨平台; 二,MATLAB的界面 工具栏:提供快捷操作编辑器…

2024年腾讯云服务器租用价格表_1个月一年3年5年和1小时费用表

腾讯云服务器租用优惠价格表:轻量应用服务器2核2G3M价格61元一年、2核2G4M价格99元一年,540元三年、2核4G5M带宽165元一年,2核4G5M带宽756元三年、轻量4核8G12M服务器646元15个月,轻量4核16G12M服务器32元1个月、312元一年&#x…

RabbitMQ介绍及搭建

架构 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件,使用erlang语言编写,依赖Erlang环境运行。 Broker:运行消息队列服务进程的节点,包含Exchange、Queue; Producer:消…

Java进阶 Maven基础

资料格式 配置文件 com.itheima Java代码 Statement stat con.createStatement(); 示例 com.itheima 命令 mvn test - Maven简介 传统项目管理状态分析 Maven 是什么 Maven的本质是一个项目管理工具,将项目开发过程抽象成一个项目对象模型(POM&…

HTTP 工作流程请求响应 - 面试常问

文章目录 HTTP 工作流程请求和响应格式HTTP请求格式请求行:请求头部字段:空行:消息正文(请求正文): HTTP响应格式状态行:响应头部字段:空行: HTTP方法HTTP状态码常用HTTP…

yocto编译测试

源码下载 git clone -b gatesgarth git://git.yoctoproject.org/poky lkmaolkmao-virtual-machine:~/yocto$ git clone -b gatesgarth git://git.yoctoproject.org/poky Cloning into poky... remote: Enumerating objects: 640690, done. remote: Counting objects: 100% (13…

整型数组按个位值排序 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 100分 题解: Java / Python / C 题目描述 给定一个非空数组(列表),其元素数据类型为整型,请按照数组元素十进制最低位从小到大进行排序,十进制最低位相同的元素&#xf…

四.排序(冒泡/选择)

目录 11-排序介绍 常见排序算法: 12-冒泡排序介绍 代码要求: 思路: 13-冒泡排序 代码: 14-选择排序 简单写法: 好的写法: 11-排序介绍 排序:将一组“无序”的记录序列调整为“有序”的记录序列。 列表排序:将无序列表变为有序列表 输入&#…

CentOS 7 编译安装 Nginx

CentOS 7 编译安装 Nginx 背景下载 Nginx 源码包安装依赖包编译添加环境变量添加守护查考文献 背景 一开始使用 docker 搭建了一个 web 服务器,但是由于 docker 不太方便的部署 TLS 证书,故使用 Nginx 做反向代理,实现 https 连接。 下载 N…

C#进阶实践项目(俄罗斯方块)

CSharp进阶实践项目--俄罗斯方块 1.需求分析 2.复用贪吃蛇开始等场景切换的代码 (自己写一遍,不难!!!) 入口: 更新接口: Game 类: BeginOrEndBaseScene 类:…

【Flink】Flink 中的时间和窗口之窗口API使用

1. 窗口的API概念 窗口的API使用分为按键分区和非按键分区,在定义窗口操作之前,首先就要确定好是基于按键分区Keyed的数据流KeyedStream来开窗还是基于没有按键分区的DataStream上开窗。 1.1 按键分区窗口(Keyed Windows) 按键…

Android视角看鸿蒙第六课(module.json5中的各字段含义之pages)designWidth的用法

Android视角看鸿蒙第六课(module.json5中的各字段含义之pages) 导读 前面几篇文章,我们陆续分析了entry->src->main下的module.json5中的各个字段的含义及作用。目前剩余pages和abilities两个字段,本篇文章一起来了解pages。 过程有错…

用Stable Diffusion生成同角色不同pose的人脸

随着技术的不断发展,我们现在可以使用稳定扩散技术(Stable Diffusion)来生成同一角色但不同姿势的人脸图片。本文将介绍这一方法的具体步骤,以及如何通过合理的提示语和模型选择来生成出更加真实和多样化的人脸图像。 博客首发地…