Yolov3&Yolov4核心基础知识完整讲解

深入浅出Yolo系列之Yolov5核心基础知识完整讲解 大白在之前写过《Yolov3&Yolov4核心基础知识的完整讲解》:https://blog.youkuaiyun.com/nan355655600/article/details/106246625/ 对Yolov4的相关基础知识做了比较系统的梳理,但Yolov4后不久,又出现了Yolov5,虽然作者没有放上和Yolov4的直接测试对比,但在COCO数据集的测试效果还是很可观的。 很多人考虑到Yolov5的创新性不足,对算法是否能够进化,称得上Yolov5而议论纷纷。 但既然称之为Yolov5,也有很多非常不 阅读详情

作者:江大白

知乎链接:https://zhuanlan.zhihu.com/p/143747206

本文仅供学习参考,如有侵权,请联系删除!

文章目录

1. 论文汇总
2. Yolov3核心基础内容
2.1 网络结构可视化
2.2 网络结构图
2.3 核心基础内容
3. Yolov3相关代码
3.1 python代码
3.2 C++代码内容
3.3 python版本的Tensorrt代码
3.4 C++版本的Tensorrt代码
4. Yolov4核心基础内容
4.1 网络结构可视化
4.2 网络结构图
4.3 核心基础内容
4.3.1 输入端创新
4.3.2 Backbone创新
4.3.3 Neck创新
4.4.4 Prediction创新
5. Yolov4相关代码
5.1 python代码
5.2 C++代码

1.论文汇总

  • Yolov3论文名:《Yolov3: An Incremental Improvement》

  • Yolov3论文地址:https://arxiv.org/pdf/1804.02767.pdf

  • Yolov4论文名:《Yolov4: Optimal Speed and Accuracy of Object Detection》

  • Yolov4论文地址:https://arxiv.org/pdf/2004.10934.pdf

2.YoloV3核心基础内容

2.1 网络结构可视化

Yolov3是目标检测Yolo系列非常非常经典的算法,不过很多同学拿到Yolov3或者Yolov4的cfg文件时,并不知道如何直观的可视化查看网络结构。如果纯粹看cfg里面的内容,肯定会一脸懵逼。

其实可以很方便的用netron查看Yolov3的网络结构图,一目了然。

2.2 网络结构图

上图三个蓝色方框内表示Yolov3的三个基本组件:

  1. CBL:Yolov3网络结构中的最小组件,由Conv+Bn+Leaky_relu激活函数三者组成。

  2. Res unit:借鉴Resnet网络中的残差结构,让网络可以构建的更深。

  3. ResX:由一个CBL和X个残差组件构成,是Yolov3中的大组件。每个Res模块前面的CBL都起到下采样的作用,因此经过5次Res模块后,得到的特征图是608->304->152->76->38->19大小。

其他基础操作:

  1. Concat:张量拼接,会扩充两个张量的维度,例如26*26*256和26*26*512两个张量拼接,结果是26*26*768。Concat和cfg文件中的route功能一样。

  2. add:张量相加,张量直接相加,不会扩充维度,例如104*104*128和104*104*128相加,结果还是104*104*128。add和cfg文件中的shortcut功能一样。

Backbone中卷积层的数量:

每个ResX中包含1+2*X个卷积层,因此整个主干网络Backbone中一共包含1+(1+2*1)+(1+2*2)+(1+2*8)+(1+2*8)+(1+2*4)=52,再加上一个FC全连接层,即可以组成一个Darknet53分类网络。不过在目标检测Yolov3中,去掉FC层,不过为了方便称呼,仍然把Yolov3的主干网络叫做Darknet53结构。

2.3 核心基础内容

Yolov3是2018年发明提出的,这成为了目标检测one-stage中非常经典的算法,包含Darknet-53网络结构、anchor锚框、FPN等非常优秀的结构。

本文主要目的在于描述Yolov4和Yolov3算法的不同及创新之处,对Yolov3的基础不过多描述。

不过大白也正在准备Yolov3算法非常浅显易懂的基础视频课程,让小白也能简单清楚的了解Yolov3的整个过程及各个算法细节,制作好后会更新到此处,便于大家查看。

在准备课程过程中,大白搜集查看了网络上几乎所有的Yolov3资料,在此整理几个非常不错的文章及视频,大家也可以点击查看,学习相关知识。

(1)视频:吴恩达目标检测Yolo入门讲解

  • https://www.bilibili.com/video/BV1N4411J7Y6?from=search&seid=18074481568368507115

(2)文章:Yolo系列之Yolov3【深度解析】

  • https://blog.youkuaiyun.com/leviopku/article/details/82660381

(3)文章:一文看懂Yolov3

  • https://blog.youkuaiyun.com/litt1e/article/details/88907542

相信大家看完,对于Yolov3的基础知识点会有一定的了解。

3.YoloV3相关代码

3.1 python代码

代码地址:https://github.com/ultralytics/Yolov3

3.2 C++代码

这里推荐Yolov4作者的darknetAB代码,代码和原始作者代码相比,进行了很多的优化,如需要运行Yolov3网络,加载cfg时,使用Yolov3.cfg即可

代码地址:https://github.com/AlexeyAB/darknet

3.3 python版本的Tensorrt代码

除了算法研究外,实际项目中还需要将算法落地部署到工程上使用,比如GPU服务器使用时还需要对模型进行tensorrt加速。

(1)Tensort中的加速案例

强烈推荐tensort软件中,自带的Yolov3加速案例,路径位于tensorrt解压文件夹的TensortX/samples/python/Yolov3_onnx中

针对案例中的代码,如果有不明白的,也可参照下方文章上的详细说明:

代码地址:https://www.cnblogs.com/shouhuxianjian/p/10550262.html

(2)Github上的tensorrt加速

除了tensorrt软件中的代码, github上也有其他作者的开源代码

代码地址:https://github.com/lewes6369/TensorRT-Yolov3

3.4 C++版本的Tensorrt代码

项目的工程部署上,如果使用C++版本进行Tensorrt加速,一方面可以参照Alexey的github代码,另一方面也可以参照下面其他作者的开源代码

代码地址:https://github.com/wang-xinyu/tensorrtx/tree/master/Yolov3

4.YoloV4核心基础内容

4.1 网络结构可视化

Yolov4的网络结构也可以使用netron工具查看。

4.2 网络结构图

Yolov4的结构图和Yolov3相比,因为多了CSP结构,PAN结构,如果单纯看可视化流程图,会觉得很绕,不过在绘制出上面的图形后,会觉得豁然开朗,其实整体架构和Yolov3是相同的,不过使用各种新的算法思想对各个子结构都进行了改进。

先整理下Yolov4的五个基本组件:

  1. CBM:Yolov4网络结构中的最小组件,由Conv+Bn+Mish激活函数三者组成。

  2. CBL:由Conv+Bn+Leaky_relu激活函数三者组成。

  3. Res unit:借鉴Resnet网络中的残差结构,让网络可以构建的更深。

  4. CSPX:借鉴CSPNet网络结构,由三个卷积层和X个Res unint模块Concate组成。

  5. SPP:采用1×1,5×5,9×9,13×13的最大池化的方式,进行多尺度融合。

其他基础操作:

  1. Concat:张量拼接,维度会扩充,和Yolov3中的解释一样,对应于cfg文件中的route操作。

  2. add:张量相加,不会扩充维度,对应于cfg文件中的shortcut操作。

Backbone中卷积层的数量:

和Yolov3一样,再来数一下Backbone里面的卷积层数量。

每个CSPX中包含3+2*X个卷积层,因此整个主干网络Backbone中一共包含2+(3+2*1)+2+(3+2*2)+2+(3+2*8)+2+(3+2*8)+2+(3+2*4)+1=72。

这里大白有些疑惑,按照Yolov3设计的传统,这么多卷积层,主干网络不应该叫CSPDaeknet73吗????

4.3 核心基础内容

Yolov4本质上和Yolov3相差不大,可能有些人会觉得失望。

但我觉得算法创新分为三种方式:

  1. 第一种:面目一新的创新,比如Yolov1、Faster-RCNN、Centernet等,开创出新的算法领域,不过这种也是最难的

  2. 第二种:守正出奇的创新,比如将图像金字塔改进为特征金字塔

  3. 第三种:各种先进算法集成的创新,比如不同领域发表的最新论文的tricks,集成到自己的算法中,却发现有出乎意料的改进

Yolov4既有第二种也有第三种创新,组合尝试了大量深度学习领域最新论文的20多项研究成果,而且不得不佩服的是作者Alexey在github代码库维护的频繁程度。

目前Yolov4代码的star数量已经1万多,据我所了解,目前超过这个数量的,目标检测领域只有Facebook的Detectron(v1-v2)、和Yolo(v1-v3)官方代码库(已停止更新)。

所以Yolov4中的各种创新方式,大白觉得还是很值得仔细研究的。

为了便于分析,将Yolov4的整体结构拆分成四大板块:

大白主要从以上4个部分对YoloV4的创新之处进行讲解,让大家一目了然。

  1. 输入端:这里指的创新主要是训练时对输入端的改进,主要包括Mosaic数据增强、cmBN、SAT自对抗训练

  2. BackBone主干网络:将各种新的方式结合起来,包括:CSPDarknet53、Mish激活函数、Dropblock

  3. Neck:目标检测网络在BackBone和最后的输出层之间往往会插入一些层,比如Yolov4中的SPP模块、FPN+PAN结构

  4. Prediction:输出层的锚框机制和Yolov3相同,主要改进的是训练时的损失函数CIOU_Loss,以及预测框筛选的nms变为DIOU_nms

总体来说,Yolov4对Yolov3的各个部分都进行了改进优化,下面丢上作者的算法对比图。

仅对比Yolov3和Yolov4,在COCO数据集上,同样的FPS等于83左右时,Yolov4的AP是43,而Yolov3是33,直接上涨了10个百分点。

不得不服,当然可能针对具体不同的数据集效果也不一样,但总体来说,改进效果是很优秀的,下面大白对Yolov4的各个创新点继续进行深挖。

4.3.1 输入端创新

考虑到很多同学GPU显卡数量并不是很多,Yolov4对训练时的输入端进行改进,使得训练在单张GPU上也能有不错的成绩。比如数据增强Mosaic、cmBN、SAT自对抗训练。

但感觉cmBN和SAT影响并不是很大,所以这里主要讲解Mosaic数据增强。

(1)Mosaic数据增强

Yolov4中使用的Mosaic是参考2019年底提出的CutMix数据增强的方式,但CutMix只使用了两张图片进行拼接,而Mosaic数据增强则采用了4张图片,随机缩放、随机裁剪、随机排布的方式进行拼接。

这里首先要了解为什么要进行Mosaic数据增强呢?

在平时项目训练时,小目标的AP一般比中目标和大目标低很多。而Coco数据集中也包含大量的小目标,但比较麻烦的是小目标的分布并不均匀。

首先看下小、中、大目标的定义:
2019年发布的论文《Augmentation for small object detection》对此进行了区分:

可以看到小目标的定义是目标框的长宽0×0~32×32之间的物体。

但在整体的数据集中,小、中、大目标的占比并不均衡。
如上表所示,Coco数据集中小目标占比达到41.4%,数量比中目标和大目标都要多。

但在所有的训练集图片中,只有52.3%的图片有小目标,而中目标和大目标的分布相对来说更加均匀一些。

针对这种状况,Yolov4的作者采用了Mosaic数据增强的方式。

主要有几个优点:

  1. 丰富数据集:随机使用4张图片,随机缩放,再随机分布进行拼接,大大丰富了检测数据集,特别是随机缩放增加了很多小目标,让网络的鲁棒性更好。

  2. 减少GPU:可能会有人说,随机缩放,普通的数据增强也可以做,但作者考虑到很多人可能只有一个GPU,因此Mosaic增强训练时,可以直接计算4张图片的数据,使得Mini-batch大小并不需要很大,一个GPU就可以达到比较好的效果。

此外,发现另一研究者的训练方式也值得借鉴,采用的数据增强和Mosaic比较类似,也是使用4张图片(不是随机分布),但训练计算loss时,采用“缺啥补啥”的思路:

如果上一个iteration中,小物体产生的loss不足(比如小于某一个阈值),则下一个iteration就用拼接图;否则就用正常图片训练,也很有意思。

参考链接:https://www.zhihu.com/question/390191723?rf=390194081

4.3.2 BackBone创新

(1)CSPDarknet53

CSPDarknet53是在Yolov3主干网络Darknet53的基础上,借鉴2019年CSPNet的经验,产生的Backbone结构,其中包含了5个CSP模块。

这里因为CSP模块比较长,不放到本处,大家也可以点击Yolov4的netron网络结构图,对比查看,一目了然。

每个CSP模块前面的卷积核的大小都是3*3,stride=2,因此可以起到下采样的作用。

因为Backbone有5个CSP模块,输入图像是608*608,所以特征图变化的规律是:608->304->152->76->38->19

经过5次CSP模块后得到19*19大小的特征图。

而且作者只在Backbone中采用了Mish激活函数,网络后面仍然采用Leaky_relu激活函数。

我们再看看下作者为啥要参考2019年的CSPNet,采用CSP模块?

CSPNet论文地址:https://arxiv.org/pdf/1911.11929.pdf

CSPNet全称是Cross Stage Paritial Network,主要从网络结构设计的角度解决推理中从计算量很大的问题。

CSPNet的作者认为推理计算过高的问题是由于网络优化中的梯度信息重复导致的。

因此采用CSP模块先将基础层的特征映射划分为两部分,然后通过跨阶段层次结构将它们合并,在减少了计算量的同时可以保证准确率。

因此Yolov4在主干网络Backbone采用CSPDarknet53网络结构,主要有三个方面的优点:

优点一:增强CNN的学习能力,使得在轻量化的同时保持准确性。

优点二:降低计算瓶颈

优点三:降低内存成本

(2)Mish激活函数

Mish激活函数是2019年下半年提出的激活函数

论文地址:https://arxiv.org/abs/1908.08681

和Leaky_relu激活函数的图形对比如下:

Yolov4的Backbone中都使用了Mish激活函数,而后面的网络则还是使用leaky_relu函数。

Yolov4作者实验测试时,使用CSPDarknet53网络在ImageNet数据集上做图像分类任务,发现使用了Mish激活函数的TOP-1和TOP-5的精度比没有使用时都略高一些。

因此在设计Yolov4目标检测任务时,主干网络Backbone还是使用Mish激活函数。

(3)Dropblock

Yolov4中使用的Dropblock,其实和常见网络中的Dropout功能类似,也是缓解过拟合的一种正则化方式。

Dropblock在2018年提出,论文地址:https://arxiv.org/pdf/1810.12890.pdf

传统的Dropout很简单,一句话就可以说的清:随机删除减少神经元的数量,使网络变得更简单。

而Dropblock和Dropout相似,比如下图:

中间Dropout的方式会随机的删减丢弃一些信息,但Dropblock的研究者认为,卷积层对于这种随机丢弃并不敏感,因为卷积层通常是三层连用:卷积+激活+池化层,池化层本身就是对相邻单元起作用。而且即使随机丢弃,卷积层仍然可以从相邻的激活单元学习到相同的信息。

因此,在全连接层上效果很好的Dropout在卷积层上效果并不好。

所以右图Dropblock的研究者则干脆整个局部区域进行删减丢弃。

这种方式其实是借鉴2017年的cutout数据增强的方式,cutout是将输入图像的部分区域清零,而Dropblock则是将Cutout应用到每一个特征图。而且并不是用固定的归零比率,而是在训练时以一个小的比率开始,随着训练过程线性的增加这个比率。

Dropblock的研究者与Cutout进行对比验证时,发现有几个特点:

优点一:Dropblock的效果优于Cutout

优点二:Cutout只能作用于输入层,而Dropblock则是将Cutout应用到网络中的每一个特征图上

优点三:Dropblock可以定制各种组合,在训练的不同阶段可以修改删减的概率,从空间层面和时间层面,和Cutout相比都有更精细的改进。

Yolov4中直接采用了更优的Dropblock,对网络的正则化过程进行了全面的升级改进。

4.3.3 Neck创新

在目标检测领域,为了更好的提取融合特征,通常在Backbone和输出层,会插入一些层,这个部分称为Neck。相当于目标检测网络的颈部,也是非常关键的。

Yolov4的Neck结构主要采用了SPP模块、FPN+PAN的方式。

(1)SPP模块

SPP模块,其实在Yolov3中已经存在了,在Yolov4的C++代码文件夹中有一个Yolov3_spp版本,但有的同学估计从来没有使用过,在Yolov4中,SPP模块仍然是在Backbone主干网络之后:

作者在SPP模块中,使用k={1*1,5*5,9*9,13*13}的最大池化的方式,再将不同尺度的特征图进行Concat操作。

在2019提出的《DC-SPP-Yolo》文章:https://arxiv.org/ftp/arxiv/papers/1903/1903.08589.pdf

也对Yolo目标检测的SPP模块进行了对比测试。

和Yolov4作者的研究相同,采用SPP模块的方式,比单纯的使用k*k最大池化的方式,更有效的增加主干特征的接收范围,显著的分离了最重要的上下文特征。

Yolov4的作者在使用608*608大小的图像进行测试时发现,在COCO目标检测任务中,以0.5%的额外计算代价将AP50增加了2.7%,因此Yolov4中也采用了SPP模块。

(2)FPN+PAN

PAN结构比较有意思,看了网上Yolov4关于这个部分的讲解,大多都是讲的比较笼统的,而PAN是借鉴图像分割领域PANet的创新点,有些同学可能不是很清楚。

下面大白将这个部分拆解开来,看下Yolov4中是如何设计的。

Yolov3结构:

我们先来看下Yolov3中Neck的FPN结构

可以看到经过几次下采样,三个紫色箭头指向的地方,输出分别是76*76、38*38、19*19。

以及最后的Prediction中用于预测的三个特征图①19*19*255、②38*38*255、③76*76*255。[注:255表示80类别(1+4+80)×3=255]

我们将Neck部分用立体图画出来,更直观的看下两部分之间是如何通过FPN结构融合的。

如图所示,FPN是自顶向下的,将高层的特征信息通过上采样的方式进行传递融合,得到进行预测的特征图。

Yolov4结构:

而Yolov4中Neck这部分除了使用FPN外,还在此基础上使用了PAN结构:

前面CSPDarknet53中讲到,每个CSP模块前面的卷积核都是3*3大小,相当于下采样操作。

因此可以看到三个紫色箭头处的特征图是76*76、38*38、19*19。

以及最后Prediction中用于预测的三个特征图:①76*76*255,②38*38*255,③19*19*255。

我们也看下Neck部分的立体图像,看下两部分是如何通过FPN+PAN结构进行融合的。

和Yolov3的FPN层不同,Yolov4在FPN层的后面还添加了一个自底向上的特征金字塔。

其中包含两个PAN结构。

这样结合操作,FPN层自顶向下传达强语义特征,而特征金字塔则自底向上传达强定位特征,两两联手,从不同的主干层对不同的检测层进行参数聚合,这样的操作确实很皮。

FPN+PAN借鉴的是18年CVPR的PANet,当时主要应用于图像分割领域,但Alexey将其拆分应用到Yolov4中,进一步提高特征提取的能力。

不过这里需要注意几点:

注意一:

Yolov3的FPN层输出的三个大小不一的特征图①②③直接进行预测

但Yolov4的FPN层,只使用最后的一个76*76特征图①,而经过两次PAN结构,输出预测的特征图②和③。

这里的不同也体现在cfg文件中,这一点有很多同学之前不太明白,

比如Yolov3.cfg最后的三个Yolo层,

第一个Yolo层是最小的特征图19*19,mask=6,7,8,对应最大的anchor box。

第二个Yolo层是中等的特征图38*38,mask=3,4,5,对应中等的anchor box。

第三个Yolo层是最大的特征图76*76,mask=0,1,2,对应最小的anchor box。

而Yolov4.cfg则恰恰相反

第一个Yolo层是最大的特征图76*76,mask=0,1,2,对应最小的anchor box。

第二个Yolo层是中等的特征图38*38,mask=3,4,5,对应中等的anchor box。

第三个Yolo层是最小的特征图19*19,mask=6,7,8,对应最大的anchor box。

注意点二:

原本的PANet网络的PAN结构中,两个特征图结合是采用shortcut操作,而Yolov4中则采用concat(route)操作,特征图融合后的尺寸发生了变化。

这里也可以对应Yolov4的netron网络图查看,很有意思。

4.3.4 Prediction创新

(1)CIOU_loss

目标检测任务的损失函数一般由Classificition Loss(分类损失函数)和Bounding Box Regeression Loss(回归损失函数)两部分构成。

Bounding Box Regeression的Loss近些年的发展过程是:Smooth L1 Loss-> IoU Loss(2016)-> GIoU Loss(2019)-> DIoU Loss(2020)->CIoU Loss(2020)

我们从最常用的IOU_Loss开始,进行对比拆解分析,看下Yolov4为啥要选择CIOU_Loss。

a.IOU_Loss

可以看到IOU的loss其实很简单,主要是交集/并集,但其实也存在两个问题。

问题1:即状态1的情况,当预测框和目标框不相交时,IOU=0,无法反应两个框距离的远近,此时损失函数不可导,IOU_Loss无法优化两个框不相交的情况。

问题2:即状态2和状态3的情况,当两个预测框大小相同,两个IOU也相同,IOU_Loss无法区分两者相交情况的不同。

因此2019年出现了GIOU_Loss来进行改进。

b.GIOU_Loss

可以看到右图GIOU_Loss中,增加了相交尺度的衡量方式,缓解了单纯IOU_Loss时的尴尬。

但为什么仅仅说缓解呢?

因为还存在一种不足:

问题:状态1、2、3都是预测框在目标框内部且预测框大小一致的情况,这时预测框和目标框的差集都是相同的,因此这三种状态的GIOU值也都是相同的,这时GIOU退化成了IOU,无法区分相对位置关系。
基于这个问题,2020年的AAAI又提出了DIOU_Loss。

c.DIOU_Loss

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

针对IOU和GIOU存在的问题,作者从两个方面进行考虑

一:如何最小化预测框和目标框之间的归一化距离?

二:如何在预测框和目标框重叠时,回归的更准确?

针对第一个问题,提出了DIOU_Loss(Distance_IOU_Loss)

DIOU_Loss考虑了重叠面积和中心点距离,当目标框包裹预测框的时候,直接度量2个框的距离,因此DIOU_Loss收敛的更快。

但就像前面好的目标框回归函数所说的,没有考虑到长宽比。

比如上面三种情况,目标框包裹预测框,本来DIOU_Loss可以起作用。

但预测框的中心点的位置都是一样的,因此按照DIOU_Loss的计算公式,三者的值都是相同的。

针对这个问题,又提出了CIOU_Loss,不对不说,科学总是在解决问题中,不断进步!!

d.CIOU_Loss

CIOU_Loss和DIOU_Loss前面的公式都是一样的,不过在此基础上还增加了一个影响因子,将预测框和目标框的长宽比都考虑了进去。

其中v是衡量长宽比一致性的参数,我们也可以定义为:

这样CIOU_Loss就将目标框回归函数应该考虑三个重要几何因素:重叠面积、中心点距离,长宽比全都考虑进去了。

再来综合的看下各个Loss函数的不同点:

IOU_Loss:主要考虑检测框和目标框重叠面积。

GIOU_Loss:在IOU的基础上,解决边界框不重合时的问题。

DIOU_Loss:在IOU和GIOU的基础上,考虑边界框中心点距离的信息。

CIOU_Loss:在DIOU的基础上,考虑边界框宽高比的尺度信息。

Yolov4中采用了CIOU_Loss的回归方式,使得预测框回归的速度和精度更高一些。

(2)DIOU_nms

Nms主要用于预测框的筛选,常用的目标检测算法中,一般采用普通的nms的方式,Yolov4则借鉴上面D/CIOU loss的论文:arxiv.org/pdf/1911.0828

将其中计算IOU的部分替换成DIOU的方式:

再来看下实际的案例

在上图重叠的摩托车检测中,中间的摩托车因为考虑边界框中心点的位置信息,也可以回归出来。

因此在重叠目标的检测中,DIOU_nms的效果优于传统的nms。

注意:有读者会有疑问,这里为什么不用CIOU_nms,而用DIOU_nms?

答:因为前面讲到的CIOU_loss,是在DIOU_loss的基础上,添加的影响因子,包含groundtruth标注框的信息,在训练时用于回归。

但在测试过程中,并没有groundtruth的信息,不用考虑影响因子,因此直接用DIOU_nms即可。

总体来说,YOLOv4的论文称的上良心之作,将近几年关于深度学习领域最新研究的tricks移植到Yolov4中做验证测试,将Yolov3的精度提高了不少。

虽然没有全新的创新,但很多改进之处都值得借鉴,借用Yolov4作者的总结。

Yolov4 主要带来了 3 点新贡献:

(1)提出了一种高效而强大的目标检测模型,使用 1080Ti 或 2080Ti 就能训练出超快、准确的目标检测器。

(2)在检测器训练过程中,验证了最先进的一些研究成果对目标检测器的影响。

(3)改进了 SOTA 方法,使其更有效、更适合单 GPU 训练。

5.YoloV4相关代码

5.1 python代码

代码地址:https://github.com/Tianxiaomo/pytorch-Yolov4

作者的训练和测试推理代码都已经完成

5.2 C++代码

Yolov4作者Alexey的代码,俄罗斯的大神,应该是个独立研究员,更新算法的频繁程度令人佩服。

在Yolov3作者Joseph Redmon宣布停止更新Yolo算法之后,Alexey凭借对于Yolov3算法的不断探索研究,赢得了Yolov3作者的认可,发布了Yolov4。

代码地址:https://github.com/AlexeyAB/darknet

欢迎扫码添加小编好友,一起交流进步:

深入浅出Yolo系列之Yolov3&Yolov4&Yolov5核心基础知识完整讲解 深入浅出Yolo系列之Yolov3&Yolov4&Yolov5核心基础知识完整讲解1.论文汇总2.YoloV3核心基础内容2.1 网络结构可视化2.2 网络结构图2.3核心基础内容3.YoloV3相关代码3.1 python代码3.2 C++代码3.3 python版本的Tensorrt代码3.4 C++版本的Tensorrt代码4.YoloV4核心基础内容4.1 网络结构可视化4.2 网络结构图4.3 核心基础内容4.3.1 输入端创新4.3.2 BackBone创新4.3.3 Neck创 阅读详情

相关推荐

SIwave:在 SIwave 中释放计算频率扫描的强大功能

AEDT 的电路工具允许注入正确的电压和电流。要使用电路工具,SIwave 必须首先使用 PI 求解器求解结构的 S 参数。

jkh920184196的博客 1477

【多人姿态估计】AlphaPose_yolov4推理demo复现

代码:https://github.com/WildflowerSchools/AlphaPose 1.环境 cuda101 torch==1.6.0 torchvision==0.3.0 opencv-python==4.1.0.25 tqdm natsort Cython pycocotools

聿默的博客 1800

4×V100部署Qwen3.8-Flash-Next:vLLM/GGUF实战

大模型本地部署的核心,是把参数量、量化精度、显存容量和推理框架放在同一张账本里算清楚。MoE 模型总参数量大但激活参数少,解码阶段更受显存带宽与 KV Cache 限制;通过 INT4/AWQ 或 GGUF 等 4-bit 量化可显著压缩权重占用,再结合 vLLM 张量并行、llama.cpp 分层切分提升多卡利用率。其技术价值在于让 V100 这类老架构 GPU 也能承载百亿级参数模型的私有化推理,并服务于 RAG 知识库、工作流 API、批量生成等场景。这次围绕 4×V100 32G 部署 Qwen3.

weixin_29061425的博客 353

人体姿态估计(Human Pose Estimation)技巧方法汇总

关注上方“深度学习技术前沿”,选择“星标公众号”,资源干货,第一时间送达!作者:Poerozhttps://zhuanlan.zhihu.com/p/104917833本文已由原作者授权...

深度学习技术前沿 4731

MATLAB实战:Gardner定时同步算法实现与BER曲线优化指南

本文详细介绍了Gardner定时同步算法在MATLAB中的实现与优化方法,重点解析了算法原理、关键步骤实现及BER曲线绘制中的常见问题解决方案。通过优化参数设置和系统架构,提升数字通信系统的符号同步性能,为QPSK、QAM等调制系统提供实用参考。

weixin_29085865的博客 232

Python中优化模块scipy.optimize的优化算法介绍

如果你有一个特殊的优化问题,你可以使用对象来自定义问题的求解。# 自定义目标函数# 自定义优化问题custom_problem.fun = custom_objective_function # 目标函数custom_problem.x = [1, 1] # 初始猜测# 执行优化# 打印结果在上述例子中,我们自定义了一个对象,并指定了目标函数和初始猜测,然后使用minimize函数进行求解。Scipy的优化模块提供了丰富的功能,适用于各种优化问题。

Pandas120的博客 3050

YOLOv4论文翻译及总结

借鉴文章:https://zhuanlan.zhihu.com/p/143747206 YOLOv4资源链接: 论文:https://arxiv.org/abs/2004.10934 代码:python代码:https://github.com/Tianxiaomo/pytorch-YOLOv4 c++代码:https://github.com/AlexeyAB/darknet python版本的Tensorrt代码: https://github.com/hunglc007/tensorflow-yolo

qq_36523203的博客 1942

Win10网络图标消失,网络图标变成灰色,打开网络设置闪退等问题解决

介绍 主要解决如下问题 网络图标消失 常用方法配置中出现的网络图标变成灰色没有办法打开 打开网络和Internet闪退 错误提示`网络发现已关闭。网络计算机和设备不可见。请启动网络和共享中心的网络发现。 连不上网,诊断结果为 依赖服务或组无法启动 这个问题大概率通过重装系统不能解决,请大家谨慎测试之后最后选择重装这个路线。 方法1:这一步一定要做(卸载三方软件) 把360安全卫士,软件管家这些东西都卸载掉。 我的问题一开始就是这个软件引起的,可能他检测到我还给台式机配了无线网卡,然后就把有线网络的一些

呆呆象呆呆的博客 3万+

目标检测算法——YOLOv4

以下内容如有错误,恳请指出 以下先回顾一下之前的笔记总结: YOLOv1:目标检测算法——YOLOv1 YOLOv2:目标检测算法——YOLOv2 YOLOv3:目标检测算法——YOLOv3 在前面的目标检测算法笔记中,已经介绍了YOLOv1,v2,v3的版本,其中本来还想记录一下YOLOv3的一些改进版本的,比如:YOLOv3-SPP,SlimYOLOv3, YOLOv3-SPP-Ultralytics。通过学习了一些b站的相关讲解视频与一些相关的博客,也知道了这些版本的一点区别。 以下对YOLOv3.

Clichong 4005

MATLAB基础应用精讲-【数模应用】信用评分模型(附R语言和python代码实现)

信用评分模型是近年来兴起的一种为了保障银行和其他金融部门的金融安全而设立的一种关于人身金融权限的划定模型。该模型指根据客户的信用历史资料,利用一定的信用评分模型,得到不同等级的信用分数,根据客户的信用分数,来决定客户所可以持有的金额权限,从而保证还款等业务的安全性。而随着在现代社会和公司中,贷款,信用卡的作用日渐突出,信用评分模型的发展前景不可估量。信贷风险是指借款人因偿还贷款或履行合同承诺而破产而产生损失的可能性。传统上,它与贷款人无法偿还所欠利息和本金、影响现金流和增加装配成本所产生的风险有关。

qq_36130719的博客 365

YOLOv11 改进 - 注意力机制 | GC Block(GlobalContext Block)全局上下文块:三重变换捕获全局依赖,提升复杂场景鲁棒性

本文介绍了全局上下文块(GC Block)及其在YOLOv11中的集成应用。GC Block是GCNet的核心组件,结合了NLNet和SENet的优势,通过上下文建模、特征变换和特征融合三个模块,高效捕获特征图中的全局依赖关系,在提高模型性能的同时降低计算成本。我们将GC Block引入YOLOv11,在检测头部分的不同尺度特征图上应用该模块。实验表明,改进后的YOLOv11在目标检测任务中表现良好,展现了GC Block在实际应用中的价值。

魔改工程师的博客 953

深入浅出Yolo系列之Yolov3&Yolov4&Yolov5&Yolox核心基础知识完整讲解

因为工作原因,项目中经常遇到目标检测的任务,因此对目标检测算法会经常使用和关注,比如Yolov3、Yolov4算法。 当然,实际项目中很多的第一步,也都是先进行目标检测任务,比如人脸识别、多目标追踪、REID、客流统计等项目。因此目标检测是计算机视觉项目中非常重要的一部分。 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗。 在此,大白将项目中,需要了解的Yolov3、Yolov4系列相关知识点以及相关代码进行完整的汇总,希望和大家

江南研习社 16万+

YOLOv12改进策略【小目标改进】| 添加专用于小目标的检测层 附YOLOv1~YOLOv12的检测头变化详解

在目标检测领域,小目标检测一直是一个具有挑战性的问题。算法以其高效快速的特点受到广泛关注,然而在面对小目标时,仍存在一些局限性。本文将介绍如何在中添加小目标检测层,以提高对小目标的检测能力。原始模型结构如下:详细内容参考:YOLOv12原始模型结构介绍 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检

Limiiiing的博客 1742

深入浅出Yolo系列之Yolov3&Yolov4核心基础知识完整讲解

注:本文转载自https://zhuanlan.zhihu.com/p/143747206。以下为原文。 因为工作原因,项目中经常遇到目标检测的任务,因此对目标检测算法会经常使用和关注,比如Yolov3、Yolov4算法。 当然,实际项目中很多的第一步,也都是先进行目标检测任务,比如人脸识别、多目标追踪、REID、客流统计等项目。因此目标检测是计算机视觉项目中非常重要的一部分。 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗

Marcorss的博客 4200

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

yolov3&yolov4&yolov5比较

简单总结了yolov3、v4、v5区别。 yolov3 yolov4 yolov5 输入端 数据增强 Mosaic Mosaic 锚框 anchor anchor 自适应anchor 主干网络(backbone) 网络 Darknet53 CSPDarknet53 Focus+CSP 归一化 BN CMB...

程序猿的视界 1万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

YOLOv3&YOLOv4MATLAB代码库:实时物体检测的强大工具

YOLOv3&YOLOv4MATLAB代码库:实时物体检测的强大工具 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在深度学习领域,物体检测是一项关键任务,它广泛应用于视频监控、自动驾驶、图像处理等多个场景。YOLOv3&YOLOv4MATLAB代码库正是一款专注于实时物体检测的开源项目,提供了YOLOv3和YOLOv4算法的MATLAB实现代码。对于...

gitblog_06789的博客 346

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Yolov3&Yolov4网络结构与源码分析

Yolov3&Yolov4网络结构与源码分析 从2018年Yolov3年提出的两年后,在原作者声名放弃更新Yolo算法后,俄罗斯的Alexey大神扛起了Yolov4的大旗。 文章目录 论文汇总 Yolov3核心基础内容 2.1 网络结构可视化 2.2 网络结构图 2.3 核心基础内容 Yolov3相关代码 3.1 python代码 3.2 C++代码内容 3.3 python版本的Tensorrt代码 3.4 C++版本的Tensorrt代码 Yolov4核心基础内容 4.1 网

吴建明wujianming_110117 1384
上一篇: Github下载慢解决了!「100%有效」
下一篇: “双一流”本科奖励1.5万,硕士3万!这座城市全面放宽高校毕业生落户限制!...
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值