yolo-v4

news2024/11/26 7:34:06

目录

一:前言

二:一些数据增强的方法

三:自提议

四:dropout

         普通的dropout

         yolov4的dropblock

五:Label smothing 标签平滑

六: GIOU,DIOU,CIOU

七: 对网络结构的改进

Spp结构

Cspnet

八:PANet

yolov3中的FPN特征金字塔结构

Bi-FPN

九:Mish激活函数(RuLu的改进)


一:前言

YOLOv4是一种目标检测算法,它是YOLO系列(You Only Look Once)的最新版本。YOLO算法是一种实时目标检测算法,能够在一次前向传播过程中同时进行目标检测和定位。YOLOv4在YOLOv3的基础上进行了改进和优化,提高了检测精度和速度。

以下是YOLOv4的一些主要改进和特点:

  1. 骨干网络改进:YOLOv4使用了更强大的骨干网络,如CSPDarknet53和CSPResNeXt50,以提高特征提取能力和检测性能。

  2. 特征金字塔网络(FPN):YOLOv4引入了特征金字塔网络,通过多尺度特征融合来处理不同尺度的目标,提高了对小目标的检测能力。

  3. PANet:YOLOv4结合了PANet(Path Aggregation Network)的思想,通过横向连接和级联结构来提高不同分辨率特征的信息传递和融合。

  4. 判别式特征:YOLOv4在网络中引入了判别式特征,使得网络更容易学习到具有判别性的特征,提高了检测的准确性。

  5. 精细化检测:YOLOv4采用了多尺度训练和测试,以便检测不同尺度的目标,并使用IoU损失函数进行更准确的目标定位。

  6. 数据增强:YOLOv4使用了更多的数据增强技术,如Mosaic数据增强、CutMix数据增强等,增强了网络的鲁棒性和泛化能力。

  7. 快速推理:YOLOv4通过优化网络结构、使用精细化的Anchor框和采用更高效的推理策略,提高了检测速度。

V4贡献:
        亲民政策,单GPU就能训练的非常好,接下来很多小模块都是这个出发点

        两大核心方法,从数据层面和网络设计层面来进行改善

        消融实验,感觉能做的都让他给做了,这工作量不轻
        全部实验都是单GPU完成,不用太担心设备了

二:一些数据增强的方法

先做数据增加,增强完之后再把四张图片拼接在一起

给网络增加一些游戏难度,加目标的部分部位给遮挡住

 

 三:自提议

四:dropout

         普通的dropout

之前的dropout是随机丢弃一些神经元

         yolov4的dropblock

五:Label smothing 标签平滑

将标签数值减小一点点

使用后:簇内更紧密,簇间更分离 

 

六: GIOU,DIOU,CIOU:

        可以避免损失为0停止训练。IOU(Intersection over Union)损失属于定位损失(Localization Loss)的一部分。

 

但是GIOU存在问题。。。。

改进开始使用DIOU(距离度量),使得分母和分子的距离都越近越好,p^2表示欧式距离

但是DIOU还有一点点缺陷,,因为仅仅解决了当两个框完全一样的时候。没有考虑到长宽比。。。   

再改进,所以使用CIOU,a长宽比越大,av的值也就越大,iou损失也就越大

 soft-MNS是意思是,我先不提除掉,先抑制一点你的这个框,就降低你一点分,然后通过后面你学习,最后看你综合表现,看你能不能学习回来大于我这个阈值,能学习回来就代表你有能力,

七: 对网络结构的改进

Spp结构

yolov3x出现了spp结构

  

Cspnet

把channel减小了,大大的减小了计算量,效率更高,很符合yolo的出发点。

 

 注意力机制:分别再channel,位置上,都给不同的特征图分配不一样的权重

 

不过引入channel的attention的话会大大增加计算量,所以不用CBAM,而是引入了SAM只有空间的注意力机制。

然后又改进了SAM的一点点,把之前的maxpooling avgpooling变成之间卷积一步到位,主旨都是减小计算量。

八:PANet

YOLOv3中使用的FPN使用自顶向下的路径来提取语义丰富的特征并将其与精确的定位信息结合起来。

但对于为大目标生成mask,这种方法可能会导致路径过于冗长,因为空间信息可能需要传播到数百个层。

PANet是一个加强版的FPN,它通过融合自底向上和自顶向下两条路径的方式增强了骨干网络的表征能力。 

不用加法而是用乘法

 

 总而言之,YOLOv4中Panet模块使用拼接而不是加法,是为了更好地融合不同层级的特征信息,并提升目标检测的性能。

        Panet模块旨在解决多尺度特征的融合问题,它接收来自不同层级的特征图,并将它们进行拼接(concatenate),形成一个更丰富的特征表示。通过拼接而不是加法,可以保留每个层级特征的细节信息,并将它们有机地结合起来。

yolov3中的FPN特征金字塔结构

         其对特征点进行不断的下采样后,拥有了一堆具有高语义内容的特征层,然后重新进行上采样,使得特征层的长宽重新变大,用大size的feature map去检测小目标。

        然不可以简单只上采样,因为这样上采样的结果对小目标的特征与信息也不明确了,因此我们可以将下采样中,与上采样中长宽相同的特征层进行堆叠,这样可以保证小目标的特征与信息。和U-net结构很相似。但多了堆叠的过程。

Bi-FPN


        在EfficientDet中提出了一种加权的双向特征金字塔网络,它允许简单和快速的多尺度特征融合。作者的目的是为了追求更高效的多尺度融合方式。

        以往的特征融合是平等地对待不同尺度特征,作者引入了权重(类似于attention),更好地平衡不同尺度的特征信息。在论文中作者也有与其他FPN的对比。

BiFPN(Bi-directional Feature Pyramid Network)使用了一种称为"weighted feature fusion"的操作,它综合了加法和concatenation(cat)的思想。

 

总的来说 Bi-FPN相当于给各个层赋予了不同权重去进行融合,让网络更加关注重要的层次,而且还减少了一些不必要的层的结点连接。

九:Mish激活函数(RuLu的改进)

 消除敏感度

        sigmoid函数的作用是将输入映射到0到1之间的概率值,这样做可以对置信度进行归一化,使其表示一个概率的概念。值接近0表示低置信度,值接近1表示高置信度。

        这种处理方式有助于模型更好地区分物体和背景,以及判断预测框中是否存在物体。通过应用sigmoid函数,可以使置信度输出符合概率的定义,并更适合用于后续的阈值筛选或目标检测任务的处理。

         在 YOLOv3 中,不同尺度的特征图通过拼接(concatenation)的方式合并为一个整体的特征图。然后,通过这个整体特征图计算总体的损失,并进行一次梯度更新来同时更新所有层的参数。 虽然在梯度更新的过程中使用了整体特征图,但每个尺度上的损失是分别计算的。通过拼接后的特征图,不同尺度上的目标检测结果都对总体的损失有贡献,而参数的更新是基于总体损失计算的梯度进行的。因此,可以说是分别更新了不同尺度大小的梯度,以优化整个模型。

参数被更新完梯度后,这些参数保存哪了?

        在常见的深度学习框架中(如PyTorch、TensorFlow等),参数的更新是自动完成的,无需手动将更新后的参数传入网络层。优化器(如Adam、SGD等)会自动更新模型的参数,并在后续的训练过程中使用这些更新后的参数。

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

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

相关文章

移动端APP组件化架构实践

作者:何乐乐 前言 对于中大型移动端APP开发来讲,组件化是一种常用的项目架构方式。个人最近几年在工作项目中也一直使用组件化的方式来开发,在这过程中也积累了一些经验和思考。主要是来自在日常开发中使用组件化开发遇到的问题以及和其他开…

Lecture 16 Dependency Grammar

目录 Dependency GrammarDependency GrammarDependency RelationsApplication: Question AnsweringApplication: Information ExtractionDependency vs. ConstituencyProperties of a Dependency TreeProjectivityTreebank Conversion Transition-based ParsingDependency Pars…

【openEuler 20.03 TLS编译openGauss2.1.0源码】

openEuler 20.03 TLS编译openGauss2.1.0源码 一、安装环境二、安装前准备二、安装步骤 一、安装环境 项目Value操作系统openEuler 20.03 64bit with ARMopenGauss2.1.0openGauss-third_party2.1.0 二、安装前准备 项目Value购买华为ECS鲲鹏 8vCPU32G 100M/s带宽 openEuler 2…

组网配置案例

汇聚层与接入层或者汇聚层与核心层组网 案例: port-group技术:可实现对于所有组内接口进行相同配置 [ACC-1]port-group group-member GigabitEthernet 0/0/1 to GigabitEthernet 0/0/9 [ACC-1-port-group]port link-type access [ACC-1-port-group]port…

【大数据学习番外篇之爬虫1】 爬虫的介绍与基本使用

目录 1. 爬虫的介绍 2. 爬虫基本使用 2.1 爬取搜狗首页的页面数据 2.2 网页采集器 1. 爬虫的介绍 前戏: 1.你是否在夜深人静的时候,想看一些会让你更睡不着的图片却苦于没有资源... 2.你是否在节假日出行高峰的时候,想快速抢购火…

【CentOS安装软件系列】Centos7安装Mysql8

前言 公司的系统都是内网部署的,mysql也需要自己在内网部署,虽然使用docker安装很方便,但是有一定的风险。所以简单记录一下怎么安装mysql,以备不时之需。 一、下载安装包 下载地址:https://downloads.mysql.com/arch…

javaScript蓝桥杯-----天气趋势 A

目录 一、介绍二、准备三、目标四、代码五、完成 一、介绍 日常生活中,气象数据对于人们的生活具有非常重要的意义,数据的表现形式多种多样,使用图表进行展示使数据在呈现上更加直观。 本题请实现一个 Y 城 2022 年的天气趋势图。 二、准备…

【Python】一文带你认识 Web 框架之 FastAPI

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

TI DSP芯片C2000系列读取FLASH数据

本文记录如何读取TI芯片的flash数据 进入TI官网下载UNIFLASH工具 点击查看详情 点击下载选项,根据系统下载对应版本 下载完成之后,点击安装。安装完成之后双击图标点开。如果你的板子已经供电,且编程器已经连接好,UNIFLASH会自动…

使用C++处理一行输入未知个数的字符的问题

今天分享一下使用C处理一行输入未知个数的字符的问题。 一,问题描述 在一行输入未知个数字符,以回车结束输入。 二,分析问题 第一种方式使用String类型,直接读入一串字符,这种方法简单高效。第二种方式一个一个字符…

HCIA-DHCP,FTP,Telnet

目录 DHCP: DHCP的优点: DHCP的工作原理 DHCP的配置 DHCP全局地址池案例: FTP FTP介绍 FTP基本配置 Telnet Telnet的应用场景 Telnet设备配置 Telnet配置案例 DHCP: 解决传统手工配置IP的问题,可以实现IP的…

Openlayers优化加载地图瓦片太慢的问题,Openlayers瓦片缓存实现和请求失败瓦片重试功能

专栏目录: OpenLayers入门教程汇总目录 前言 Openlayers默认加载地图瓦片很慢,通过对比使用openlayers和leaflet加载速度,能够明显看到openlayers加载速度比leaflet要慢很多。 通过Openlayers源码发现是因为Openlayers的瓦片加载机制是通过tileQueue瓦片加载队列来顺序加载…

变电所运维云平台在电力系统中的应用

安科瑞虞佳豪 变电所运维云平台可以看做是电力监控系统的网络应用延伸,变电所运维云平台通过互联网,电力运维人员通过手机可以随时随地了解工厂配电系统的运行情况,做到无人值守或者少人值守,同时可以监测用能状况、漏电、线缆异…

基于图像识别框架Airtest的Windows项目自动化测试实践

写在前面 本次分享的内容是基于Airtest实现Windows应用的自动化测试,内容大纲: Airtest框架介绍:Airtest适用项目、Airtest特点、Airtest的优势 Airtest框架组成、原理 Airtest环境搭建及IDE的简单使用 Airtest开展Windows应用自动化测试实…

Navicat恢复数据库连接及查询sql的解决办法

文章目录 如题一. 恢复Navicat数据库连接信息注册表编辑工具 二. 恢复Navicat每个数据库的sql文件等 如题 因为公司给电脑加域,导致使用新的用户账户,原先的很多配置都失效了,本篇是讲述一下如何恢复数据库连接工具Navicat的连接数据。 一.…

300多个日夜的付出,从外包跑路的我,上岸阿里,没人知道我经历了什么

前言: 没有绝对的天才,只有持续不断的付出。对于我们每一个平凡人来说,改变命运只能依靠努力幸运,但如果你不够幸运,那就只能拉高努力的占比。 2023年5月,我有幸成为阿里的一名自动化测试工程师&#xff…

RTSP/Onvif协议安防视频平台EasyNVR服务频繁重启是什么原因?

EasyNVR平台优秀的视频能力在于通过RTSP/ONVIF协议,将前端接入设备的音视频资源进行采集,并转码成适合全平台、全终端分发的视频流格式,包括RTSP、RTMP、FLV、HLS、WebRTC等格式。平台可拓展性强、部署轻快,在安防监控领域有着广泛…

MVVM (Model-View-ViewModel Pattern)

MVVM 模式中有三个核心组件:模型、视图和视图模型。 每个组件的用途不同。 下图显示了这三个组件之间的关系。 在交互层次上,视图“了解”视图模型,视图模型“了解”模型,但模型不知道视图模型,而视图模型不知道视图。…

链表内指定区间反转

题目: 将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n),空间复杂度 O(1)。 例如: 给出的链表为 1→2→3→4→5→NULL,m2,n4 返回 1→4→3→2→5→NULL 数据范围&#xff…

日常开发中,提升技术的13个建议

前言 1. 打好基础,深入学习语言特性 比如,对于Java程序员来说,要了解Java语言的基本概念和核心特性,包括面向对象编程、集合框架、异常处理、多线程等等。可以通过阅读Java的官方文档、教程、参考书籍或在线资源来学习。 如果最基本的基础都不扎实&…