yolov4算法及其改进

yolov4算法及其改进

  • 1、yolov4介绍
  • 2、mosaic与mish激活函数
    • 2.1、mosaic数据增强
    • 2.2、Mish激活函数
  • 3、backbone网络框架的改进
  • 4、PAN-FPN的介绍
  • 5、样本匹配和损失函数
    • 5.1、样本匹配
    • 5.2、YOLOV4损失函数
      • 5.2.1、GIOU loss
      • 5.2.2、DIOU loss
      • 5.2.3、CIOU Loss

1、yolov4介绍

在这里插入图片描述
改进点:

  • 输入端改进:Mosaic数据增加
  • 主干网络:CSPDarkNet53
  • Neck:SPP、PANet
  • 损失函数:CIOU
  • 激活函数:Mish激活函数
  • 样本匹配:增加了匹配样本的数量

2、mosaic与mish激活函数

2.1、mosaic数据增强

在这里插入图片描述
数据增强步骤:

  • 首先随机取4张图片
  • 分别对4张图片进行数据增广操作,并分别粘贴至与最终输出图像大小相等的掩模的对应位置
  • 进行图片的组合和框的组合

优点:

  • 丰富数据集:使用4张图片,随机缩放,随机分布进行拼接,大大丰富了目标检测的数据集,增加了很多小目标,让网络模型对小目标的稳健性变的更好
  • 减少GPU使用:mosaic增强训练时,可以在单图像尺度的情况下直接计算4张图片的数据,使得mini-batch size并不需要很大,即使用1个GPU就可以达到比较好的收敛效果

2.2、Mish激活函数

在这里插入图片描述
在这里插入图片描述
mish激活函数是自带正则的非单调激活函数,平滑的激活函数可以让模型获得更好的非线性,从而得到更好的准确性和泛化,Mish激活函数的数学表达式如上式。

首先函数和relu一样都是无正向边界的,可以避免梯度饱和,其次,mish函数时光滑的,并且在绝对值较小的负值区域允许一些负值。

注意,mish激活函数的计算复杂度比relu要高,在计算资源不足的情况下,可以考虑使用leakyrelu激活函数代替mish激活函数。

3、backbone网络框架的改进

CSPNet的概念:通过分割梯度流,使梯度流在不同路径中传播,这种传播的梯度信息更加丰富,此外,CSPnet可以打打减少计算量,提高推理速度以及精度

CSPNet的主要目的:可以实现更丰富的梯度组合,同时减少计算量。

实现方法:将基础层的特征层分割成两部分,然后通过提出的跨阶段分层结构进行合并来实现

基于CSPNet的目标检测器主要有以下3个优势:
1、增强学习能力:
2、移除计算瓶颈:
3、降低内存消耗:
在这里插入图片描述
transition层的含义和densenet类似,是一个1*1的卷积层而不是使用average pool
CSPNet设计了两种变体来展示这种梯度流截断如上图C、D
fusion first方式:先将2部分进行concat,然后进行输入到transion层,采用这种方式,可以使得大量梯度信息被重用,有利于网络学习
fusion last方式:先将部分特征输入transition层,然后再进行concat,这样梯度信息将被截断,损失了部分梯度重用,但是由于transition的输入维度比图c少,因此可以减少计算量

图b结合了图c和图d,提升了学习能力的同时也提高了一下计算复杂度

在这里插入图片描述
注:图中fusion last和fusion first位置互换

CSPDarkNet结合fusion last和fusion first的设计思想,设计了CSPResBlock,用于构建CSPDarkNet

CSPResBlock的基本组件Conv+bn+mish的形式,其中也包含了Resnet吸取的残差结构的思想,但是为了减低重复的梯度学习,设计者有使用了另一个shortcut和conv+bn+mish结合的形式,对特征进了一次提取,以增加梯度的丰富性。

由于跨越的卷积层比较多,大大降低了梯度学习的重复性,同时,在block的最后使用了concat进行特征融合,也大大增加了特征的鲁棒性,从而很大程度提升了模型的性能。

在这里插入图片描述
注:图中fusion last和fusion first位置互换

这里的CSPDarkNet53对于每一个stage的配置通darknet53一样,分别是1,2,8,8,4,依次对应下采样倍数为:2、4、8、16、32。

SPP
在这里插入图片描述
yolov4使用了spp的思想,在backbone尾部使用了spp结构实现了局部特征和全局特征的融合,扩大了感受野,丰富最终特征图的表达能力,进而提高map。
在这里插入图片描述

spp模块的特点如下:
1、由于对输入图像的不同纵横比和不同尺寸,spp同样可以处理,所以提高了图像的尺度不变和降低了过拟合

2、实验表明训练图像尺寸的多样性比单一尺寸的训练图像更容易使得网络收敛

3、spp对于特定的cnn网络设计和结构都是独立的(只要把spp放在最后一层卷积层后面,对网络的结构是没有影响的,它只是替换了原来的pooling层)

4、不仅可以用于图像分类而且可以用来目标检测

4、PAN-FPN的介绍

在这里插入图片描述
FPN是自顶向下将高层的强语义特征传递下来,对整个特征金子塔进行增强,但是FPN只增强语义信息,对定位信息没有很好的传递,因此YOLOV4增加了PAN来增强定位信息的传递。

FPN+PAN借鉴的是PANet,主要应用于图像分割领域,如上图所示,FPN采用自顶向下,将高层的强语义特征传递下来,而PAN+FPN针对这一点,在FPN的后面添加一个自底向上的金字塔,这样的操作是对FPN的补充,将底层的强定位特征传递上去。这样不仅能增强高级语义信息,还能增强定位信息。

5、样本匹配和损失函数

5.1、样本匹配

在这里插入图片描述
对于YOLOV4,与YOLOV3不同,只要大于IOU阈值的anchor box,就认为正样本,原本在yolov3中被忽略的,在YOLOV4只统统被认为正样本。

GT需要利用MAX iou原则分配到不同的预测层yolo-head上去,然后在每个层上单独计算正负样本和忽略样本

5.2、YOLOV4损失函数

在这里插入图片描述
MSE LOSS 主要问题是导数变化不稳定,后来提出了IOU一系列函数
主要有IOU=>GIOU=>DIOU=>CIOU,IOU表达式如上图:

但是IOU存在2个问题如下图:
在这里插入图片描述
1、当IOU为0时,无法反应两个框距离的远近,此时损失函数不可导
2、两个预测框大小相同,2个IOU也相同,但是无法区别

5.2.1、GIOU loss

在这里插入图片描述

C为最大外接矩阵 ,红色区域为差集A,可以区分以下两种情况

在这里插入图片描述
同时也存在以下问题:
在这里插入图片描述
交集相同,并集也相同。

5.2.2、DIOU loss

认为好的目标框回归函数应该考虑3个重要几何因素:重叠面积,中心点距离,长宽比

在这里插入图片描述
DIOU loss = 1 - IOU + 欧氏距离

DIOU问题
在这里插入图片描述
如上图所示,预测框和真实目标框的中心点距离是相同的,但是DIOU没有引入长宽比,因此无法解决这个问题。

5.2.3、CIOU Loss

在这里插入图片描述
YOLOV4采用CIOU Loss做Bounding box的回归损失韩式,而分类损失和目标损失都使用的是交叉熵损失,对于回归损失,数学表达式如上。

式中d,c分别表示预测结果与标注结果中心点的欧式距离和框的对角线距离,w和h表示预测框的宽高。这样CIOU loss将目标回归函数应该考虑的3个重要几何因素都考虑了:重叠面积,中心点距离,长宽比。

对于分类和目标损失,数学表达式如下:
在这里插入图片描述

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

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

相关文章

Edge如何获得纯净的启动界面

启动Edge会出现快速链接,推广链接,网站导航,显示小组件,显示信息提要,背景 ●复杂页面 ●精简页面 点击页面设置按钮 关闭快速链接 关闭网站导航 关闭小组件 关闭信息提要 关闭背景 关闭天气提示 精简页面看起来十分舒…

目标检测文献阅读-YOLO:统一的实时目标检测(12.23-12.29)

目录 摘要 Abstract 1 引言 2 统一的检测 3 网络设计 4 训练 5 YOLOv5训练猫狗识别模型 5.1 项目代码整体结构介绍 5.2 数据集和预训练权重的准备 5.3 训练猫狗识别模型 5.3.1 修改数据配置文件 5.3.2 修改模型配置文件 5.3.3 训练模型 5.3.4 启用tensorbord查看…

要查询 `user` 表中 `we_chat_subscribe` 和 `we_chat_union_id` 列不为空的用户数量

文章目录 1、we_chat_subscribe2、we_chat_union_id 1、we_chat_subscribe 要查询 user 表中 we_chat_subscribe 列不为空的用户数量,你可以使用以下 SQL 查询语句: SELECT COUNT(*) FROM user WHERE we_chat_subscribe IS NOT NULL;解释: …

【模块系列】STM321.69TFT屏幕

前言 在翻翻自己的器件盒的时候,发现这块好久之前买的TFT屏了,想起还没有用STM32点亮过,手头上正好有立创的梁山派STM32F4,就试着按照网上的文章教程顺便移植个LVGL看看,然后就有了就本文。 代码工程命名的是LvglDemo&…

Unity中列表List使用出类似字典Dictionary的感觉

首先为什么会有这个标题? 因为字典很好用,只需要键就能拿到值,这种感觉是真的爽,新手最喜欢用了,遇事不决就字典,但是也有不好的地方,字典的内存开销比列表List要大,遍历也是List占…

Android中使用AIDL实现进程通信

前言 关于使用AIDL实现两个APP(跨进程)通信,我们通常把两个APP分别叫做服务端和客户端。本文不讲原理,只给最简易的案例。 一、服务端APP实现 1. 在src/main/aidl目录下新建一个.aidl文件,然后在.aidl文件中定义需要…

Mac安装多个版本node、java、python 等开发软件环境,安装、卸载、升级多个数据库

安装多个版本node、java、python 等开发软件环境 使用nvm(Node.js Version Manager)来管理多个Node.js版本。 使用jenv来管理多个Java版本。 使用pyenv来管理多个Python版本。 以下是安装和使用这些版本管理器的基本步骤: 1. 安装多个版本…

Ftrace: 深入探究Linux内核的追踪利器

文章目录 一、 前言二、Ftrace介绍2.1 Ftrace框架2.2 Ftrace的使用场景 三、Ftrace配置和控制接口四、Ftrace使用步骤1:配置内核2. 挂载debugfs3. 查看和配置Ftrace4. 开始追踪[可选]5. 查看追踪结果6. 保存追踪数据7. 清除追踪配置 五、实战演示5.1 function跟踪器…

人工智能基础软件-Jupyter Notebook

简介: Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。 Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直…

tesla openday数据驱动串讲

一、我写的目的 tesla的数据驱动全流程代表着现在(曾经)的sota,总结和沉淀他的方法总结后与自己现在的理念做一次对标,查漏补缺找到自己现在的主要问题,聚焦下一阶段的投入 二、主要方法 本文不讲解tesla的视觉技术…

基于神经网络的车牌识别算法matlab仿真 人工智能方法 车牌识别

一 设计方法 设定matlab的车牌识别系统,用神经网络进行预测,将数据集划分为训练集和测试集,设计神经网络结构。根据输入特征的维度和输出标签的维度,确定网络层数和节点数。使用训练集对神经网络进行训练。通过迭代优化网络权重和…

计算机体系结构期末复习4:多处理器缓存一致性(cache一致性)

目录 一、cache一致性问题 1.一致性定义 2.问题定义 3.解决问题的基本策略 二、写返回(write-back)cache的一致性处理 1.MSI协议 2.MESI协议 3.MOESI协议 三、补充知识点:提升cache性能的因素 1.cache miss的三种情况: 2.影响cache性能的因素…

信息化时代的步伐

信息化时代的步伐 下载压缩包的,解压压缩包得到 这里给了一串数字 我们不知道要用什么解码就用随波逐流解码 一键解码得到 说明这是用中文电报解码: flag{计算机要从娃娃抓起}

Linux 基本指令

目录 1.常见指令 1.1 ls指令 1.2 pwd指令 1.3 cd指令 1.4 touch指令 1.5 mkdir指令 1.6 rm和rmdir指令 1.7 man指令 1.8 cp指令 1.9 mv指令 ​编辑 1.10 cat指令 1.11 more指令 1.12 less指令 1.13 head指令 1.14.tail指令 1.15 时间相关的指令 1.16 cal…

TCP客户端模拟链接websocket服务端发送消息(二)

兄弟们,我来填坑了,o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o o(╥﹏╥)o,前几天写了个tcp模拟websocket客户端的以为完成,后面需要发送消息给服务端,以为简单不就是一个发送消息么,这不是一…

LVGL——基础对象篇

LVGL——基础对象篇 基础对象篇部件大小位置设置部件位置(position)设置相关API函数: 对齐对齐方式 样式给部件添加样式添加普通样式添加本地样式样式触发时机设置单独设置部件中某个部分的样式 事件事件(events)相关A…

【机器学习】机器学习的基本分类-半监督学习(Semi-supervised Learning)

半监督学习是一种介于监督学习和无监督学习之间的机器学习方法。它利用少量的标注数据(有监督数据)和大量的未标注数据(无监督数据)来进行模型训练,从而在标注数据不足的情况下,提升模型的性能。 半监督学习…

coturn docker 项目 搭建【一切正常】

业务需求:需要coturn这个服务 定制语音视频连线 请参考"小红的逃脱外星人追踪计划" coturn项目 本地测试连接服务 turnutils_stunclient -p 3478 127.0.0.1turnutils_stunclient -p 3478 -L 127.0.0.1 127.0.0.1telnet localhost 3478turnutils_uclient …