【YOLO系列】 YOLOv4思想详解
前言
以下内容仅为个人在学习人工智能中所记录的笔记,先将目标识别算法yolo系列的整理出来分享给大家,供大家学习参考。
本文未对论文逐句逐段翻译,而是阅读全文后,总结出的YOLO V4论文的思路与实现路径。
若文中内容有误,希望大家批评指正。
资料下载
YOLO V4论文下载地址:YOLOv4: Optimal Speed and Accuracy of Object Detection
项目地址:YOLO V4
回顾:
YOLO V1:【YOLO系列】YOLO V1论文思想详解
YOLO V2:【YOLO系列】YOLO V2论文思想详解
YOLO V3:【YOLO系列】 YOLOv3论文思想详解
大家可以发现YOLO V4论文的作者变成Alexey Bochkovskiy了,YOLO V1-3的作者都是Joseph Redmon, Ali Farhadi,不过不影响,YOLO V4作者提出了一大堆措施来提高YOLO的性能,我们这就来看看。
一、YOLO V4思想
1、在训练阶段,YOLO V4使用Mosaic数据增强来提升模型的训练速度和网络精度。它利用CmBN和SAT自对抗训练来提升网络的泛化性能。
2、在Backbone网络中,YOLO V4使用了CSPDarkNet53作为基准网络,并利用Mish激活函数代替原始RELU激活函数,同时增加Dropblock模块来进一步提升模型的泛化能力。
3、在Neck网络中,YOLO V4利用SPP模块融合不同尺度大小的特征图。同时,利用自底向上的PAN特征金字塔提升网络的特征提取能力。
4、作者将YOLO V4分成了Two-Stage 检测器,即在Head部分使用了两级Prediction方法,一级目标检测器为Dense Prediction,用于生成密集的bbox,二级目标检测器为Sparse Prediction,用于对一级检测器生成的bbox进行精细调整;还利用CIOU_Loss来代替Smooth L1 Loss函数,并利用DIOU_nms来代替传统的NMS操作,从而进一步提升算法的检测精度。
二、YOLO V4详解
1、Bag of freebies(BOF)
(1)BOF介绍
作者将只改变训练策略或只增加训练成本的方法称为“bag of freebies”,而在目标检测方法中经常采用的bag of freebies包括数据增强、标签分布、损失函数。
1)Data augmentation
数据增强的目的是增加输入图像的可变性,使所设计的目标检测模型对来自不同环境的图像具有更高的鲁棒性。常用的方法包括光度失真和几何失真处理两方面,处理光度失真时,可以调整图像的亮度、对比度、色调、饱和度和噪点。处理几何失真,可以采用随机缩放、裁剪、翻转和旋转等方法(以上一些方法在YOLO V3中已经使用了)。
作者也介绍了其他数据增强的方法,包括:random erase、CutOut、hide-and-seek、grid mask、DropOut、DropConnect、DropBlock、Mixup、CutMix、GAN
2)Data balance(label distribution)
对于不同类别之间存在数据不平衡的问题的解决方法,作者认为也属于bag of freebies。
对于这类问题,作者介绍了hard negative example mining、online hard example mining、focal loss等解决办法。
3)Objective function of bbox regression
关于这个问题,作者介绍了GIOU loss、DIOU loss、CIOU loss等方法。
2、Bag of specials(BOS)
(1)BOS介绍
作者将只增加少量推理成本,却能显著提高目标检测精度的plugin 模块和post-processing方法称为“bag of specials”。plugin模块是为了增强模型中的某些属性,比如扩大感受野(enlarging receptive field)、引入注意机制(attention mechanism)或者增强特征集成能力(feature integration capability)等,post-processing主要用于对模型预测结果进行筛选。
1)Enhance receptive field
SPP、ASPP、RFB
2)Attention mechanism
Squeeze-and-Excitation(SE)、Spatial attention module(SAM)
3)Feature integration
SFAM、ASFF、BiFPN
4)Activation function
ReLU、LReLU、PReLU、ReLU、SELU、Swish、hard-Swish、Mish
5)Post-processing
DIOU-NMS
3、YOLO V4 方法论
(1)基本目标
基于神经网络在生产系统中的快速运行和并行计算的优化,而不是以低计算量为理论指标(BFLOP)。
于是,作者提出了两种Real-time的神经网络:
For GPU:在卷积层中使用少量的(1-8)的CSPResNeXt50/CSPDarknet53
For VPU:使用分组卷积,但是避免使用SE模块,包括EfficientNet-lite / MixNet / GhostNet / MobileNetV3
(2)模型的选择
这里的模型(architecture)可以理解为作者在为搭建YOLO V4时所选择的backbone、neck、head。
目标一:在输入网络分辨率、卷积层数、参数数量(filter_size²* filters * channel/groups)和输出层数之间找到最佳平衡;
目标二:选择额外的blocks来增加感受野,并从不同的backbone为不同的检测级别选择参数聚合的最佳方法。
由于一个最佳的分类器不一定是一个最佳的detector,因此在文中作者提出了对detector的要求如下:
1)更高的输入网络尺寸(分辨率)-用于检测多个小尺寸的对象
2)更多的层-用于更高的接受域以覆盖增加的输入网络尺寸
3)更多的参数-用于更大的模型能力,以检测单个图像中不用尺寸的多个对象
而不同大小感受野的影响主要如下:
1)直到目标大小——允许看到整个对象
2)直到网络大小——允许查看对象周围的环境
3)超过网络大小——增加图像点和最终激活函数之间的连接数量
基于以上内容,最后作者通过实验选择了CSPDarknet53(Backbone)+SPP block+PANet作为在backbone与detector的参数聚合方法(Neck)+YOLO V3的head搭建了YOLO V4模型(Head)。
(3)额外的提升
为了使所设计的detector更适合在单GPU上进行训练,作者进行了额外的设计和改进,具体如下:
数据增强:Mosaic、Self-Adversarial Training(SAT)
应用遗传算法选择最优的超参数
修改过的SAM、PAN和Cross mini-Batch Normalization(CmBN)
(4)YOLO V4
1)Backbone、Neck、Head
Backbone: CSPDarknet53
Neck: SPP、PAN
Head: YOLO V3
2)YOLO V4中的BOF
a. BOF for backbone
CutMix and Mosaic data augmentation,DropBlock regularization, Class label smoothing
b. BOF for detector
CIOU-loss, CmBN, DropBlock regularization, Mosaic data augmentation, Self-Adversarial Training(SAT), Eliminate grid sensitivity, Using multiple anchors for a single ground truth, Cosine annealing scheduler, Optimal hyperparameters, Random training shapes
3)YOLO V4中的BOS
a. BOS for backbone
Mish activation, Cross-stage partial connections (CSP), Multiinput weighted residual connections (MiWRC)
b. BOS for detector
Mish activation, SPP-block, SAM-block, PAN path-aggregation block, DIOU-NMS
三、YOLO V4中策略详解
1、Backbone
CSPDarknet53是借鉴了CSPNet(Cross stage partial networks,跨阶段局部网络)的思想,再加上YOLO V3中的Darknet53网络进行改进而形成的全新的主干网络结构。
(1)CSPNet
CSPNet的提出主要是为了解决以下三个问题:
1、加强CNN的学习能力
2、消除计算瓶颈
3、减少内存成本
CSPNet的思想就是将基础层的特征图分成两部分,一部分经过密集块和过渡层,然后将另一部分与传输的特征映射结合到下一阶段。它可以与ResNet、ResNeXt、DenseNet等网络结合形成新的网络。下图为CSPNet与DenseNet结合后的网络结构图。
关于CSPNet的其他内容,大家可以下载论文CSPNet: A New Backbone that can Enhance Learning Capability of CNN 自行阅读,也是YOLO V4的作者写的(自产自销啦~)。
(2)CSPDarknet53
在这里给大家推荐一个网络可视化软件:Netron,大家可以自行下载安装后,导入模型配置文件就可以。
网页版:Netron
桌面版:Netron
CSPDarknet53主要有5个DownSample结构组成,每个DownSample结构包含ConvBNMish和ResBlock,最后3个DownSample结构负责输出特征图进行下一阶段的处理。
在CSPDarknet的卷积网络中所使用的激活函数为Mish函数(什么是Mish函数,请看【YOLO系列】 YOLOv4之Mish函数)
下图为 CSPDarknet53网络
2、Neck
(1)SPP
SPP(Spatial Pyramid Pooling,空间金字塔池化)是何凯明大神提出用于解决R-CNN中速度慢问题的方法。主要思想是将同一个特征图进行不同的池化,然后将池化后的特征图拼接在一起,这样解决不同尺寸的特征图如何连接全连接层。
在YOLO V4中,通过DownSample3后的特征图经过3个卷积后,分别使用了池化核为13 * 13 , 9 * 9, 5 * 5的最大池化,padding模式为‘same', 然后将原来的特征图与池化后的三个特征图拼接在一起。
(2)PAN
PAN(Path Aggregation Network)结构其实就是在FPN(Feature Pyramid Networks,特征金字塔网络)的基础上进行改进得到的。
原来多数的object detection算法都是只采用顶层特征做预测,但是我们知道低层的特征语义比较少,但是目标位置准确;高层的特征语义信息比较丰富,但目标位置比较粗略。
另外虽然也有些算法采用多尺度特征融合的方式,但是一般是采用融合后的特征做预测,而不一样的地方在与预测试在不同特征层独立进行的。
PAN主要分为3个模块也是3点贡献:
1)改进的FPN: Bottom-up Path Augmentation
2)改进之前的pool策略: Adaptive Feature Pooling
3)改进mask分支: Full-connected Fusion
1)Bottom-up Path Augmentation
FPN已经证明了加入一条top-down的旁路连接,能给feature增加high-level的语义有利于分类。
但是low-levle中的feature是很有利于定位的,虽然FPN中P5也间接得有了low-level的特征,但是信息流动路线太长了如上图红色虚线所示(其中有很多卷积层)。在PAN思想中,FPN的P2-P5又加了low-level的特征,最底层的特征流动到N2-N5只需要经过很少的层。
具体如下图所示,在PAN原文中采用的addition,在YOLO V4中修改为concatenation。P2直接copy在N2,然后N2通过步长为2的3 * 3卷积后分辨率缩小2倍,和P3尺寸一致,然后concatenation。
这样构建的优势在于缩短了底层尺寸的特征到高层尺寸小的特征之间的距离,让特征融合更加有效。
2)Adaptive Feature Pooling
在FPN的论文中可以知道FPN从P2-P6(P6仅用作生成proposal,不用作ROIPooling时提取特征)多尺度地生成proposal,然后做ROIPooling时会根据proposal的大小将它分配到不同的level去crop特征,小的proposal去low-level的层,大的proposal去high-level的层。
这样做虽然简单也有效,但是不是最好的处理方式,尽管P2-P5(N2-N5)已经融合了low-level和high-level的特征,然后他们的主要特征还是以 它本有的level为主, 这时如果小的proposal能从high-level层获取到更多的上下文语义信息是有利于分类的,而大的proposal能从low-level层获取到更好的细节是有利于它定位的。
PAN认为高低层特征各有其优势,高层特征的视野域更大,小的ROI可以在这些特征上获取更丰富的上下文信息。底层特征可以帮助大的proposal更好得定位。这里提出的池化方法则是在所有尺度的特征上操作,之后进行融合。
3)Full-connected Fusion
全连接FC是全图视野域对位置更敏感,看得更大,因此PAN多加一条用全连接层预测的支路来做mask预测,然后和FCN融合,具体如下:
四、YOLO V4网络模型
五、YOLO系列对比
Type | YOLO V1 | YOLO V2 | YOLO V3 | YOLO V4 |
网络结构 Backbone | 借鉴了GoogleNet的思想,24个卷积层+2层全连接层 | Darknet-19 | Darknet-53 | CSPDarknet53 |
损失函数 | 均方差损失(sum-squared error loss) | Softmax loss | Logistic loss | CIOU |
Anchor Box | 无Anchor Box | 提出聚类的方法生成Anchor Box,但未使用,还是采用了预设的方式确定先验框的尺寸 | 聚类生成Anchor Box | 聚类生成Anchor Box |
特征提取 Neck | -- | Passthrough layer | 采用了类似FPN的结构,进行多尺度特征提取 | SPP、PAN |
FPS | 45 FPS | -- | 在Titan X GPU上的速度是45 fps,加速版的YOLO差不多是150fps。 | 65 FPS on Tesla V100 |
mAP | 63.4 | 在VOC2007数据集上,以67FPS的速度可达到76.8mAP; 以40FPS的速度可达到78.6mAP。 | 55左右 | AP为43.5% (AP50为65.7%) |
下篇YOLO V5再见!
相关文章:
【YOLO系列】 YOLOv4思想详解
前言 以下内容仅为个人在学习人工智能中所记录的笔记,先将目标识别算法yolo系列的整理出来分享给大家,供大家学习参考。 本文未对论文逐句逐段翻译,而是阅读全文后,总结出的YOLO V4论文的思路与实现路径。 若文中内容有误…...
查询json数组
步骤一:创建表格 首先,我们需要创建一个表格来存储包含JSON对象数组的数据。可以使用以下代码创建一个名为 my_table 的表格: CREATE TABLE my_table (id INT PRIMARY KEY AUTO_INCREMENT,json_data JSON ); 上述代码创建了一个包含两个列的…...
Docker mysql 主从复制
目录 介绍:为什么需要进行mysql的主从复制 主从复制原理: ✨主从环境搭建 主从一般面试问题: 介绍:为什么需要进行mysql的主从复制 在实际的生产中,为了解决Mysql的单点故障已经提高MySQL的整体服务性能ÿ…...
第7章-第1节-Java中的异常处理
1、异常Exception概述: 1)、异常的概念: 现实生活中万物在发展和变化会出现各种各样不正常的现象。 例如:人的成长过程中会生病。 实际工作中,遇到的情况不可能是非常完美的。 比如:你写的某个模块&…...
使用python生成一个月度账单消费金额柱状图表
阿里云月度账单根据月份、消费金额(可开票)生成一个柱状图表 import pandas as pd import matplotlib.pyplot as plt import os# 设置中文字体 plt.rcParams[font.sans-serif] [SimHei] # 用于显示中文的宋体# 获取当前工作目录下所有CSV文件 csv_fil…...
将一个独立的磁盘添加到已有的 `/` 分区
将一个独立的磁盘添加到已有的 / 分区是比较复杂的,因为 / 分区已经是一个逻辑卷(LVM)。在这种情况下,可以扩展现有的 LVM 体积组(Volume Group),然后扩展 / 逻辑卷(Logical Volume&…...
AI智能电销器人需要注意哪些问题呢
随着科技的不断发展,人们出行变得越来越方便,市面上很多产品也越来越智能化,高科技的产品不仅改变了我们的生活方式而且也改变了企业的竞争方式,很多的企业尤其是电销行业中的大佬己经意识到了AI电销机器人的好处,因此…...
呼叫中心研究分析:到2027年市场规模预计将达4966亿美元
由于业务运营中以客户为中心的方法的兴起,呼叫中心市场近年来出现了显着增长。随着对客户满意度的日益重视,全球对呼叫中心服务的需求猛增。在本次分析中,我们将从全球和中国的角度审视呼叫中心市场的发展趋势。全球市场: 到 2027…...
工业数据采集分析——工厂大脑 提升综合经济效益
随着企业对数字化的认知越来越清晰,对工业数智化的战略越来越明确,企业的诉求也在发生转变。中国的工业企业经过近几十年的发展,自动化、信息化,以及一些基础的数据系统建设在不同的行业中慢慢地推进。近几年,工业企业…...
python系列教程218——生成器表达式
朋友们,如需转载请标明出处:https://blog.csdn.net/jiangjunshow 声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享…...
jquery 实现简单的标签页效果
实现 <!DOCTYPE html> <html> <head><title>jq 实现简单的标签页效果</title><script src"/jquery/jquery-1.11.1.min.js"></script><style>.tab {cursor: pointer;width:100px;height:30px;float:left;text-align…...
C++ Web框架Drogon初体验笔记
这段时间研究了一下C的Web框架Drogon。从设计原理上面来说和Python的Web框架是大同小异的,但是难点在于编译项目上面,所以现在记录一下编译的过程。下面图是我项目的目录。其中include放的是头文件,src放的是视图文件,static放的是…...
x-cmd pkg | busybox - 嵌入式 Linux 的瑞士军刀
目录 简介首次用户功能特点竞品和相关作品 进一步阅读 简介 busybox 是一个开源的轻量级工具集合,集成了一批最常用 Unix 工具命令,只需要几 MB 大小就能覆盖绝大多数用户在 Linux 的使用,能在多款 POSIX 环境的操作系统(如 Linu…...
Java异常简单介绍
文章目录 1. 异常分类和关键字1.1 分类1.2 关键字 2. Error2.1 Error定义2.2 常见的Error2.2.1 VirtualMachineError2.2.2 ThreadDeath2.2.3 LinkageError2.2.4 AssertionError2.2.5 InternalError2.2.6 OutOfMemoryError2.2.6.1 OOM原因2.2.6.2 OutOfMemoryError会导致宕机吗 …...
ocrmypdf_pdf识别
安装 安装说明 https://ocrmypdf.readthedocs.io/en/latest/installation.html#native-windows提到需要的软件: Python 3.7 (64-bit) or later Tesseract 4.0 or later Ghostscript 9.50 or later 安装 ocrmypdf pip install ocrmypdf 添加语言包 https://oc…...
卷积神经网络|猫狗分类系列--导入kaggle猫狗数据集
解决任何真实问题的重要一步是获取数据,Kaggle提供了大量不同数据科学问题的竞赛。 我们将从 https://www.kaggle.com/competitions/dogs-vs-cats/data 下载猫狗数据集,并对其进行一定的操作,以正确的导入到我们的计算机,为接下…...
【linux 多线程并发】线程本地数据存储的两种方式,每个线程可以有同名全局私有数据,以及两种方式的性能分析
线程本地数据(TLS) 专栏内容: 参天引擎内核架构 本专栏一起来聊聊参天引擎内核架构,以及如何实现多机的数据库节点的多读多写,与传统主备,MPP的区别,技术难点的分析,数据元数据同步,多主节点的…...
2401d,d导入C的问题
原文 D中是否可用仅C头文件库? 在C语言中,我需要这样做: #define STB_DS_IMPLEMENTATION #include "stb_ds.h"在包含h文件前,必须在单个C文件中定义. 在D中试过: enum STB_DS_IMPLEMENTATION 1; import stb_ds;但它不管用.有建议吗?也许使用中间C文件会工作 ,但…...
SpringCloud GateWay实现路由限流
目录 RequestRateLimiterGatewayFilterFactory令牌桶算法实现限流 RequestRateLimiterGatewayFilterFactory Spring Cloud Gateway 内置了一个限流功能的过滤器工厂,那就是RequestRateLimiterGatewayFilterFactory ,它使用 Redis 和 Lua 脚本实现令牌桶…...
打印日期c++
给出年份 y和一年中的第 d天,算出第 d天是几月几号。 输入格式 输入包含多组测试数据。 每组数据占一行,包含两个整数 y 和 d。 输出格式 每组数据输出一行一个结果,格式为 yyyy-mm-dd。 数据范围 输入最多包含 100 组数据, 1≤y≤3000, 1≤d…...
数据结构入门到入土——链表(1)
目录 一,顺序表表/ArrayList的缺陷 二,链表 三,链表的实现 四,与链表有关的题目练习(1) 1.删除链表中等于给定值 val 的所有节点 2.反转一个单链表 3.给定一个带有头结点 head 的非空单链表…...
MySQL C API的使用
MySQL C API的使用 介绍及使用 MySQL C API(也称为 MySQL Connector/C)是用于与 MySQL 数据库交互的 C 语言 API。它提供了一组函数和结构体,允许你在 C 程序中连接到 MySQL 数据库服务器,并执行查询、插入、更新等数据库操作。…...
JavaScript防御性编程
简单聊一下防御性编程,初衷是开发人员为了防止自己被裁员,而将代码编写为只有自己能看懂。如何只有自己能看懂?方法多种多样,但不能将简单问题复杂化,比如:编写一堆无效的逻辑关系,或将业务复杂…...
微信预约小程序制作指南:从小白到专家
在当今的数字时代,微信小程序已经成为了一种非常流行的应用方式。预约功能更是成为了许多小程序的核心功能之一。如果你也想为你的小程序添加预约功能,以下步骤将会对你有所帮助。 一、进入乔拓云网后台 乔拓云网是一个在线小程序开发平台,你…...
向量数据库:Milvus
特性 Milvus由Go(63.4%),Python(17.0%),C(16.6%),Shell(1.3%)等语言开发开发,支持python,go,java接口(C,Rust,c#等语言还在开发中),支持单机、集群部署,支持CPU、GPU运算。Milvus 中的所有搜索和查询操作都在内存中执行…...
亚马逊国际商品详情 API:获取特定商品详细信息的实践
随着电子商务的飞速发展,亚马逊作为全球最大的在线零售商之一,提供了丰富的商品详情 API,使得第三方开发者能够轻松地获取亚马逊网站上的商品信息。本文将介绍如何使用亚马逊国际商品详情 API(Amazon Product Advertising API&…...
MSB30M-ASEMI小贴片整流桥MSB30M
编辑:ll MSB30M-ASEMI小贴片整流桥MSB30M 型号:MSB30M 品牌:ASEMI 封装:UMSB-4 最大平均正向电流:3A 最大重复峰值反向电压:1000V 产品引线数量:4 产品内部芯片个数:4 产品…...
Redis启动方式
redis三种启动方式 1.直接启动 进入redis根目录,执行命令: #加上‘&’号使redis以后台程序方式运行 ./redis-server & 2.通过指定配置文件启动 可以为redis服务启动指定配置文件,例如配置为/etc/redis/6379.conf 进入redis根目录&#x…...
TEMU 新手小白必看!2024入驻流程/入驻类目/入驻资料等详细流程讲解
2023 TEMU 可谓是赚足眼球,流量持续上涨,2024年相信不少卖家们已经跃跃欲试,但大陆卖家如何入驻TEMU?哪些品类适合入驻?又有哪些入驻要求和资料?别急,今天东哥就一一给大家详细讲解,…...
【C语言】数组
一维数组的创建和初始化 数组是一组相同类型元素的集合。 数组的创建 //数组的创建方式:type_t arr_name [const_n];//type_t 是指数组的元素类型//const_n 是一个常量表达式,用来指定数组的大小数组创建的实例: 数组创建ÿ…...
婚纱网站html源码/小网站搜什么关键词好
超时,得分60,满分100 问题描述 闲暇时,福尔摩斯和华生玩一个游戏: 在N张卡片上写有N个整数。两人轮流拿走一张卡片。要求下一个人拿的数字一定是前一个人拿的数字的约数或倍数。例如,某次福尔摩斯拿走的卡片…...
普宁做男科检查长江网站L/阜新网络推广
版权声明:本文为博主原创文章,未经博主允许不得转载。 在运行项目的时候,eclipse弹出提示框“Could not open Selected VM debug port (8700). Make sure you do not have another instance of DDMS or of the eclipse plugin running. If it…...
大连建设网站的公司/北京网站优化价格
这里发布了一个类似的问题:REST API服务针对验证失败返回什么合适的HTTP状态代码?上面线程中的答案指出:“例如,如果URI应该具有ISO-8601日期,而您发现它的格式错误或指向2月31日,那么您将返回HTTP 400。 实…...
网站建设 英语词汇/网络广告推广方法
Uploading... xxxgmail.com has insufficient permissions to upload new versions of package xxxx. pub logout 然后再使用pub publish发布的时候就需要重新登录了 如果是发布到pub.dev请使用如下命令 flutter packages pub logout 发布使用 flutter packages pub publi…...
dreamweaver网站制作步骤/文山seo
扬帆起航,希望就在前方2010年11月20号,北京PMP1011班如期开班,大家对周末两天的课程反映良好,感触颇多,觉得学到了很多知识。11月20号:早上8点就有学员陆续报道,领取讲义和考勤卡,按…...
国外免费可以做网站的服务器/百度搜索网
旧制(中四、中五)实施九年免费教育之后,学生需要以校内考试成绩作评级,决定能否升读高中(中四、中五)。香港的中四及中五课程,大致上会文理分科,分开文、理、商科3个主流。教授科目均以香港考试及评核局举行的香港中学…...