笔记分享 : 目标检测与识别算法之一 YOLO v4 精华版

2021-05-28 17:25:53 浏览数 (1)

哈喽,大家好,今天我们一起学习一下CV(Computer Vision)领域中,最牛目标检测与识别算法之一:YOLO_v4论文中的精髓部分,论文名称:《YOLOv4: Optimal Speed and Accuracy of Object Detection》,感兴趣的同学可以自行下载阅读,文末会贴上下载链接。

咱们先看一下YOLO v4算法的Demo (注:视频来源于YouTuBe)

接下来,我将拆解论文中的每一部分,把最精华的部分提取出来与大家分享。相信各位同学读完后,基本上明白YOLO v4干了什么活儿。闲言少叙,我们进入主题:

第一部分:Abstract

首先,我们先看一下在Abstract部分,作者主要概述了YOLO v4算法中的创新点,主要有以下八点:

① Weighted-Residual-Connections (WRC), 加权残差连接

② Cross-Stage-Partial-connections (CSP), 跨阶段局部连接

③ Cross mini-Batch Normalization (CmBN), 跨小批量归一化

④ Self-adversarial-training (SAT), 自对抗训练

⑤ Mish-activation. Mish激活函数

⑥ Mosaic data augmentation, Mosaic数据增强

⑦ DropBlock regularization, DropBlock正则化

⑧ CIoU loss CIoU损失

基于GPU Tesla V100,作者在COCO数据集上,实现了实时检测速度高达65FPS,AP达到43.5%,AP50达到65.7%。不同算法的对比结果,如图所示:

个人观点:目前YOLO算法系列包含v1 - v5,不过,只有v1 - v4有对应的论文,v5目前还没有正式的论文发表。其实,CV界对v5还是抱有很大的质疑声。等v5算法出了论文,咱们再继续解读。

第二部分:Introduction

作者总结了YOLO v4算法做出的主要贡献,主要是两个方面:

第一:在检测器训练阶段,引入了目标检测方法:Bag-of-Freebies (BoF) 和 Bag-of-Specials (BoS);

第二:针对单个GPU训练,对一些最优算法进行修改,比如:CBN, PAN, SAM等;

第三部分:Related work

这一大段内容,作者主要讲了三个方面的内容,即:目前目标检测领域,主流的一些方法:

第一. 目标检测模型

我们直接用论文中的总结,通用的检测模型基本上包含如下几个主要模块。

第二. 在训练(training)阶段,Bag-of-Freebies (BoF)的应用;

在这部分,作者主要讲了三件事情,分别是:

① 数据增强 data augmentation;

② 语义分布 sementic distribution;

③ 目标函数 objective function;

如图所示(这是我做的思维导图,部分截图):

第三. 在推理(inference)阶段,Bag-of-Specials (BoS)的应用;

在这部分,作者指出通过 plugin modules(插件模型) 和 post-processing methods (后处理方法)能够以很少的推理代价获得目标检测极大的准确性。

如图所示(这是我做的思维导图,部分截图):

第四部分:Methodology

这是论文中最精华的部分,主要包含四部分:1. 网络结构的选择;2. BoF和BoS的选择;3. 额外的提升;4. YOLO v4的构成;

我们一一来看一下每部分:

第一:网络结构的选择,这里用论文中的示例图:

作者通过实验对比,得出两个结论:

1. 在ImageNet的目标分类上,CSPResNext50网络结构优于CSPDarknet53;

2. 在COCO目标检测上,CSPDarknet53网络结构优于CSPResNext50;

最终,作者在YOLO v4中选用了以下几个组件:

① CSPDarknet53作为backbone;

② SPP模块;

③ PANet路径聚合neck;

④ YOLO v3 作为YOLO v4的head;

第二:BoF和BoS的选

其实,BoF和BoS都是一些tricks,用来改进模型,提升检测或分类的准确性。

在论文中,作者选取了这些tricks,如下图所示:

第三:额外的提升

在论文中,作者为了使设计的检测器适用于单个GPU,做了如下一些修改:

① 修改1:数据增强 Data augmentation

4张不同的图片混合在一起

② 修改2:自对抗训练 self-adversarial training

③ 修改3:CmBN替换了CBN

④ 修改4:修改SAM的spatial-wise attention为point-wise attention,同时,替换PAN的快捷连接为拼接

第四:YOLO v4的构成

① YOLO v4 由以下三部分构成:

Backbone : CSPDarkent53

Nect : SPP, PAN

Head : YOLOv3

② BoF,BoS 与 backbone,detector 的组合

【备注:这是我根据论文总结的图表】

第五部分:Experiments

该阶段,主要是作者做了很多对比实验,来筛选出最优的组件。

第一:实验过程中的超参数设置(自己看论文吧,比较多);

第二:在分类训练上,不同特征的影响

测试内容主要包含三个部分,分别是:

① class label smoothing

② data augmentation, bilateral blurring, MixUp, CutMix and Mosaic

③ activations : Leaky-ReLu, Swish, Mish

第三:在检测训练上,不同特征的影响

这部分主要是BoF和BoS在检测器训练过程中的影响。【这部分内容非常详细,建议看论文】

下图是Bag-of-Specials的消融研究对比结果:

第四:在检测训练上,不同backbones和预训练权重的影响

下图,对比实验结果:

第五:在检测训练上,不同min-batch的影响

作者通过实验发现,如果训练策略中加入了BoF和BoS,那么,mini-batch对检测器的性能没有任何影响。

下图,对比实验结果:

下图,这是我关于Experiments的思维导图(部分截图):

论文中最后的Results和Conclusions这两部分,就是对YOLO v4算法的一个总结。反正,就是说YOLO v4算法非常非常的牛 ~

以下是我详细阅读论文过程中做的思维导图截图(注:暂不公开该思维导图,后续YOLO专题课程中会公开。)

论文下载链接:

https://arxiv.org/pdf/2004.10934.pdf

0 人点赞