YOLOV4与YOLOV3的区别

2023-05-16

YOLOV4与YOLOV3的区别_A big bliss的博客-CSDN博客_yolov3和yolov4的区别

首先,先大概的说下二者之间的差别:

1.特征提取网络的不同

2.激活函数的不同

3.loss的不同

4.数据处理的不同

5.学习率的不同


参考:

睿智的目标检测32--TF2搭建YoloV4目标检测平台(tensorflow2)_Bubbliiiing的学习小课堂-CSDN博客

睿智的目标检测26--Pytorch搭建yolo3目标检测平台_Bubbliiiing的学习小课堂-CSDN博客


一、特征提取网络的不同

先贴上二者的特征提取网络的图

Yolo v3

Yolo v4

主要有三个不同的地方:

1.backbone由Darknet53变成CSP Darknet53。

这是CSP网络结构,可以看到,base layer后面会分出来两个分支,一个分支是一个大残差边,另外一个分支会接resnet残差结构,最后会将二者经过融合。而yolov3中只有csp中简单的残差,并没有最后的融合操作。

值得说下的是,yolov3和4经过backbone之后得到的都是三个分支:(52,52,256),(26,26,512),(13,13,1024)。当然了,前提是喂进网络的图片大小都是(416,416,3)的。

2.v4中在backbone后面进行了一个spp操作。(目的:增加感受野?)

    # 使用了SPP结构,即不同尺度的最大池化后堆叠。
    maxpool1 = MaxPooling2D(pool_size=(13, 13), strides=(1, 1), padding='same')(P5)
    maxpool2 = MaxPooling2D(pool_size=(9, 9), strides=(1, 1), padding='same')(P5)
    maxpool3 = MaxPooling2D(pool_size=(5, 5), strides=(1, 1), padding='same')(P5)
    P5 = Concatenate()([maxpool1, maxpool2, maxpool3, P5])    

我感觉这个操作是一个伪spp吧(我印象中spp net中的spp不是这样的操作吧)。这里只是利用不同的池化核进行池化,其中还有一个点是需要注意的,就是tf中padding选择的是same,同时步长为1,那么默认输出的feature map的长宽与输入的一致,所以这里输入的是backbone中最后一层(13,13,1024)先经过三次卷积得到(13,13,512),那么经过三次不同池化核池化得到的还是(13,13,512),最后将本身在内的四个经过最后一维concat,那么P5的维度就是(13,13,2048)。

3.v4中经过了spp之后会经过一个PANet网络结构

在yolov3中,由darknet53得到的(13,13,1024)的feature map经过两次上采样,途中与(26,26,512)和(52,52,256)进行concat。

在yolov4中,不仅有特征金字塔结构,还有下采样的操作。由spp之后先经过三次conv,然后喂进PANet,先经过两次上采样,然后再经过两次下采样,途中进行特征融合,得到预测的三个head。

13*13 融合52X52两次下采样26X26一次下采样

26x26融合52X52下采样,13x13上采样

52X52融合13X13两次上采样26X26一次上采样

二、激活函数的不同

yolov3使用的leaky relu激活函数

yolov4使用的mish激活函数


计算公式:Mish = x*tanh(ln(1+e^x))

优点:

1.从图中可以看出他在负值的时候并不是完全截断,而是允许比较小的负梯度流入,从而保证信息流动。

2.并且激活函数无边界这个特点,让他避免了饱和这一问题,比如sigmoid,tanh激活函数通常存在梯度饱和问题,在两边极限情况下,梯度趋近于1,而Mish激活函数则巧妙的避开了这一点。

3.另外Mish函数也保证了每一点的平滑,从而使得梯度下降效果比Relu要好。

Mish激活函数_码农ZZK的博客-CSDN博客_mish激活函数

三、loss的不同

先来看下yolov3中对于正样本的预测框的位置loss

分别找到模型输出的预测框的tx,ty,tw,th,然后与基于真实框得到的label的tx,ty,tw,th进行交叉熵损失函数的构建,最后进行相加。

但是,在v4中是使用(1-CIOU)直接作为正样本的位置损失函数

再来看看CIOU是什么东西?

相比于IOU的优点:

1.IOU没有考虑到两个框之间的位置信息,如果两个框没有重叠,它的IOU=0,没法进行反向传播。

2.还有一点,就是为什么之前的所有目标检测的网络中没有用iou直接作为损失函数,这个在我的上一篇blog中也提到了。就是因为对于大小不同的框,iou值相同,但是其重叠程度却不同(说白了,就是对尺度不敏感)。在ciou中,由于有v这个概念,所以就使这种情况不可能再出现(个人理解,不对还请指正)。

四、数据处理的不同

yolov4中数据增强采用了mosaic数据增强(我一般喜欢叫它为马赛克数据增强)。

他的步骤也是比较简单的:

1.选取四张图片。然后将四张图片分别放置一张画布的四个角。

2.然后进行超参数的拼接。

3.每张图的gt框也随之进行处理,若一张图片中的某个gt框由于拼接过程中删除,我们还要对其进行边缘优化操作。


五、学习率的不同

在yolov3中,学习率一般都是使用衰减学习率,就是每学习多少epoch,学习率减少固定的值。

在yolov4中,学习率的变化使用了一种比较新的方法:学习率余弦退火衰减。


由图中可以看得出来,学习率会先上升再下降,这是退火优化法的思想。

在tf中,有实现的代码:



总结

总的来说,v4是v3的一种增强版,因为其核心思想是没有什么改进的,只不过里面加了很多小的tricks,为了就是让训练变得更快,map更高。

————————————————

版权声明:本文为CSDN博主「A big bliss」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:YOLOV4与YOLOV3的区别_A big bliss的博客-CSDN博客_yolov3和yolov4的区别

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

YOLOV4与YOLOV3的区别 的相关文章

  • YOLOv3 从入门到部署:(五)YOLOv3模型的部署(基于C++ opencv)

    文章目录 YOLOv3 从入门到部署 xff1a xff08 五 xff09 YOLOv3模型的部署 xff08 基于C 43 43 opencv xff09 目录关于opencv的DNN介绍代码讲解效果展示 YOLOv3 从入门到部署 x
  • 【darknet】【yolov3】训练踩坑

    本文已解决问题概述 xff1a 测试准确率时 xff0c 没有results 文件夹的访问权限 xff1a Segmentation fault 执行darknet 相关命令是 xff0c 无法找到 libcudart so 10 0 文件
  • DeepStream 部署 RTSP + scaled-yolov4 (tensorrtx)

    DeepStream应用程序将深度神经网络和其他复杂的处理任务引入到流处理管道中 xff0c 以实现对视频和其他传感器数据的近实时分析 从这些传感器中提取有意义的见解为提高运营效率和安全性创造了机会 例如 xff0c 摄像头是当前使用最多的
  • c++调用yolov4模型进行目标检测-使用opencv4.4.0

    前言 最近刚出的opencv4 4 0也支持了yolov4 xff0c 便尝试用opencv调用yolov4进行检测 xff0c 做个记录 当然 xff0c yolov3 yolov4 tiny等也能调用 xff0c 只需修改加载的cfg和
  • 从配置环境开始,跑通YOLOv4模型,测试成功!

    Windows10下跑通YOLOv4模型 xff0c 从配置环境开始 xff0c 测试成功 xff01 成功配置环境并跑通代码 xff0c 快乐记录ing xff08 参考来源 xff1a 博客地址 xff09 1 配置环境 1 1安装VS
  • Google Colab的详细使用教程—YOLOv3为例

    一 先哔哔几句热下身 相信疫情隔离在家而且还要使用深度学习的小伙伴们或多或少都会面临么的钱买高性能显卡又么的钱租服务器的窘境 下面我就来给小伙伴们介绍以下如何使用Google Colab免费服务器的故事吧 xff08 至于怎么上Google
  • yolov3 批量处理图片获得检测框坐标

    前言 yolov3实现检测 xff0c 需要所有检测框的坐标实现定位 在darknet master项目下实现检测框坐标的获取 前提 系统 xff1a Windows 语言 xff1a C 项目 xff1a darknet master 开
  • yolov3详解

    目录 1 anchor的计算机制 2 anchor对应机制 3 网络结构 4 训练过程 5 测试过程 1 anchor的计算机制 锚框anchor是真值框和预测框之间的桥梁 xff1a 预测框在锚框基础上 xff0c 预测出框的大小 xff
  • 使用Keras版本的Yolov3训练自己的数据集和进行目标检测时,需要注意的一些问题

    最近因为工作需要 xff0c 使用了Yolo v3做目标检测 由于它自带的数据集完全不能够满足需要 xff0c 只能从头开始自己训练 当然这必须要用python来做了 xff0c 不能用C语言 首先 xff0c 我发现那个著名的Keras版
  • 【YOLOv4】详细讲解全过程

    目录 1 YoloV4核心基础内容 1 1 网络结构可视化 1 2 网络结构图 1 3 核心基础内容 1 3 1 输入端创新 xff08 1 xff09 Mosaic数据增强 1 3 2 BackBone创新 xff08 1 xff09 C
  • 深度学习框架YOLOv3的C++调用

    深度学习框架YOLOv3的C 43 43 调用 深度学习框架YOLOv3的C 43 43 调用 xff08 1 xff09 tensorflow版本的YOLOv3的C 43 43 调用 xff08 失败 xff09 xff08 2 xff0
  • Darknet YoloV4编译+训练(避免踩坑)

    AlexAB darknet yolov4编译 43 训练 时间间隔好几天今天来更新一下yolov4的训练 训练篇 在训练之前需要对大佬的源码进行编译本本机编译 xff0c 编译过程可查看下述链接 xff1a https blog csdn
  • 【视觉检测C++接口实现】vs2019使用动态链接库yolo_cpp_dll调用yolov3

    目录 0 前言 1 准备工作 1 1 yolo cpp dll dll和yolo cpp dll lib的获取 1 2 pthreadGC2 dll和pthreadVC2 dll的获取 1 3 yolo v2 class hpp的获取 1
  • KERAS-YOLOV3的代码走读

    KERAS YOLOV3的代码走读 GITHUB地址 xff1a https github com qqwweee keras yolo3 YOLOV3的论文中文翻译 xff1a https zhuanlan zhihu com p 349
  • YOLOv3 从入门到部署(四)YOLOv3模型导出onnx(基于pytorch)

    YOLOv3 从入门到部署 四 YOLOv3模型导出onnx 基于pytorch 文章目录 YOLOv3 从入门到部署 四 YOLOv3模型导出onnx 基于pytorch 目录 概述 pytorch导出onnx采坑 转onnx代码 使用D
  • 睿智的目标检测29——Keras搭建YoloV4目标检测平台

    睿智的目标检测29 Keras搭建YoloV4目标检测平台 学习前言 什么是YOLOV4 代码下载 YOLOV4改进的部分 不完全 YOLOV4结构解析 1 主干特征提取网络Backbone 2 特征金字塔 3 YoloHead利用获得到的
  • YOLO v3基于ROS应用记录

    有时候 就要敢于背上超出自己预料的包袱 真的努力后 你会发现自己要比想象的优秀很多 愿在别人眼里算不上梦想的梦想 成真 言归正传 记录下之前在ROS下跑yolov3的历程吧 感觉现在视觉感知领域用yolo的比faster RCNN多很多了
  • 【ModelArts系列】华为ModelArts Notebook训练yolov3模型(开发环境)

    一 参考资料 二 相关介绍 在ModelArts的 notebook中运行ModelZoo中模型 以yolov3为例 训练集为 COCO2014 运行环境 ModelArts notebook 模型 ModelZoo yolov3 数据集
  • u版YOLOv3的卷积权重分享

    网上有许多关于预训练权重的分享 但大部分都要收费 官网下载又太慢了 自己就破费一把 本着一人收费 大家共享的原则 将自己花钱下载的权重文件分享出来 yolov3 tiny conv 15 darknet53 conv 74 链接 https
  • 【深度学习】基于Tensorflow的YOLOV4,已跑通程序,效果不错

    完整的程序放在这里了 已经跑通no bug 完整程序 实现效果 自己在colab上训练模型后得到的权重预测 试了几个场景 B站视频链接 识别校门口一号路 识别海盗狗 截图 部分代码如下 voc annotation py import os

随机推荐