Yolo入门:Yolo系列- - - - 4度冲击:yolov4

本文详细介绍了YOLOv4的目标检测模型,包括其网络结构、CSPDarknet53、Mish激活、FPN+PAN等创新点。相较于YOLOv3,YOLOv4通过集成多项最新研究成果,提升了精度和速度。CIOU_Loss的引入优化了边界框回归,PAN结构结合了上下文信息。YOLOv4在COCO数据集上表现出色,精度提升10个百分点,是目标检测领域的有力优化。
摘要由CSDN通过智能技术生成

Yolov1~Yolov3的学习链接在这里

Yolo入门:Yolo系列- - - - 1度冲击:yolov1_0824搞算法的博客-CSDN博客

Yolo入门:Yolo系列- - - - 2度冲击:yolov2_0824搞算法的博客-CSDN博客

Yolo入门:Yolo系列- - - - 2度冲击:yolov2_0824搞算法的博客-CSDN博客

 

Yolov4论文名:《Yolov4: Optimal Speed and Accuracy of Object Detection》
Yolov4论文地址:https://arxiv.org/pdf/2004.10934.pdf

一:网络结构


这个图可以很直观地展示yolov4的网络结构。与yolov3相比,backbone采用了CSPNet的基础卷积模块以及Mish激活,Neck则在FPN的基础上增加了PAN结构,既在自上而下的特征生成方式下融合了自下而上的特征。

1.CBM:Conv+BN+Mish的卷积组合。
2.CBL:Conv+BN+Leaky_relu的卷积组合。
3.SPP:与yolov3相同,采用了5×5,9×9,13×13的Max_pooling的concat。
4.CSPX:采用CSPNet的卷积模块(本质是将不同分组生成的卷积concat与densenet相似),并结合Bottleneck形式融入残差。

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

其他基础操作:

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

        在Backbone上,作者使用Dropblock来缓和过拟合,提高模型的泛化能力,使用CSPdarkent53作为Backbone,并结合FPN,PAN作为Neck,提高特征提取的效率与性能。anchor机制与yolov3相同,训练时采用CIOU_Loss来提高bbox的坐标定位性能。

Backbone中卷积层的数量:

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

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

二.核心

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

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

  1. 第一种:面目一新的创新,比如Yolov1、Faster-RCNN、Centernet等,开创出新的算法领域,不过这种也是最难的
  2. 第二种:守正出奇的创新,比如将图像金字塔改进为特征金字塔
  3. 第三种:各种先进算法集成的创新,比如不同领域发表的最新论文的tricks,集成到自己的算法中,却发现有出乎意料的改进

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

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

为了便于分析,将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

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

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

三.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的结构如下,前面CSPDarknet53中讲到,每个CSP模块前面的卷积核都是3*3大小步长为2,相当于下采样操作,因此可以看到三个紫色箭头处的特征图是76*76、38*38、19*19。

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

四.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时的尴尬。

但为什么仅仅说缓解呢?

因为还存在一种不足

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

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

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

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

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

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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值