YOLO v4:物体检测的最佳速度和精度

重磅干货,第一时间送达

YOLOYOLO v4

1 介绍

将YOLOv3的AP和FPS分别提高10%和12%[5](浅蓝色区域的模型被视为实时目标检测器)

可以看出,EfficientDet D4-D3比YOLO v4具有更好的AP,但是它们在V100 GPU上的运行速度低于30 FPS。另一方面,YOLO能以更高的速度(> 60 FPS)和非常好的精度运行。

2.目标检测器一般架构

尽管YOLO是单阶段目标检测器,但也有两阶段目标检测器,如R-CNN、Fast R-CNN和Faster R-CNN,它们准确但速度慢。我们将专注于单阶段目标检测器,让我们来看看单阶段目标检测器的主要组件:

2.1 骨干

骨干网络,如ResNet、DenseNet、VGG等,被用作特征提取器,它们在图像分类数据集(如ImageNet)上进行了预训练,然后在检测数据集上进行了微调。事实证明,这些骨干网络随着层数的加深能产生具有更高语义的不同级别的特征,对之后的目标检测发挥很大作用。

2.2 颈部

颈部在骨干和头部之间的额外层,用于提取骨干网络不同阶段的不同特征图,如FPN [1]、PANet[2]、Bi-FPN[3]。YOLO v3使用FPN从主干中提取不同比例的特征。

什么是特征金字塔网络(FPN)?

通过自上而下的路径和横向连接来增强标准卷积网络,因此该网络可以有效地从单分辨率输入图像构造出丰富的多尺度特征金字塔[4]。

特征金字塔[1]网络用于目标检测

(1)每个横向连接将特征图从下至上的路径合并到自上而下的路径,从而生成不同的金字塔层,在合并特征图之前,对先前的金字塔层进行2倍上采样,使两个特征图具有相同的空间分辨率大小。

(2)然后将分类/回归网络(头部)应用于金字塔的每个层,以帮助检测不同大小的目标。特征金字塔可以应用于不同的骨干模型,例如最初的FPN[1]论文使用ResNets,还有许多以不同方式集成FPN的模块,例如SFAM[7]、ASFF[9]和Bi-FPN[3]。

四种类型的特征金字塔。

图像(a)显示了如何在Single Shot Detector体系结构(SSD)中从主干中提取特征,上图还展示了其他三种不同类型的金字塔网络,它们背后的思想与它们的目的相同:缓解目标实例之间比例变化引起的问题[3]。

2.3 头部

实际负责执行边界框检测(分类和回归)的网络。

输出(取决于实现方式):1)4个值描述了预测的边界框(x,y,h,w);2)k类的概率+ 1(背景额外一个)。

像YOLO一样,基于anchor的目标探测器也将头部应用于每个anchor box,其他流行的基于anchor的单阶段检测器包括:Single Shot Detector[6]和RetinaNet[4]。

下图结合了上述三个模块:

3.BoF&BoS

YOLO v4论文的作者[5]区分了用于提高目标检测器精度的两类方法,分析了这两种类别中的不同方法,以实现具有良好准确性的快速运行的神经网络,这两个类别是:

3.1 Bag of freebies(BOF)

定义:仅改变训练策略或仅增加训练成本[5],使目标检测器获得更准确性而又不增加推理成本。

(1)数据增强:可以提高模型的泛化能力。可以进行光度畸变如:调整亮度、饱和度、对比度和噪点,或者对图像进行几何变形,例如图像旋转、裁剪等。这些技术都是BoF的明显示例,有助于提升检测器的准确性。

几何变形示例(对于对象检测任务,边界框也应用相同的转换)

其他有趣的技术可以增强图像:1)CutOut[8]可以在训练过程中随机掩盖输入的正方形区域,可以提高CNN的鲁棒性和性能。2)类似地随机擦除[10]选择图像中的矩形区域并使用随机值擦除其像素。

用于目标检测的随机擦除示例

(2)避免过度拟合的正则化技术:如DropOut、DropConnect和DropBlock [13]。最后一个实际上在CNN中表现出非常好的结果,并用于YOLO v4主干中。

来自DropBlock论文

(3)回归网络的损失函数:传统的做法是应用均方误差对坐标进行回归,如本文所述将这些点视为独立变量,但未考虑对象本身的完整性。

IoU [12]损失:考虑了预测边界框(BBox)和真实边界框的面积。

GIoU[11]损失除了考虑覆盖区域之外,还考虑了对象的形状、方向、重叠区域和中心点之间的距离和宽高比。YOLO v4使用CIoU损失作为边界框的损失,主要是因为与上述提到的其他损失相比,它导致更快的收敛和更好的性能。

(注意:可能引起混乱的一件事是,尽管许多模型将MSE用于BBox回归损失,但它们使用IoU作为度量标准,而不是如上所述的损失函数。)下图比较了具有不同IoU损耗的相同模型:

损失比较

上述检测来自Faster R-CNN(Ren等人,2015),该数据在相同的MS COCO数据集上训练,并带有GIoU和CIoU损失。可以注意到CIoU的性能要优于GIoU。

3.2  Bag of specials(BOS)

定义:仅会增加少量推理成本,但可以显著提升目标检测器准确性的插件模块和后处理方法[5]。此类模块/方法通常包括:引入注意力机制(SE模块与SAM模块)、扩大模型的感受野范围并增强特征集成能力等。

(1)引入注意力机制:主要是channel-wise注意力(如挤压与激励模块SE)和point-wise注意力(如空间注意力模块SAM)。YOLO v4选择了空间注意力模块SAM,但与该模块的最初发布版本不完全相同,请注意以下几点:

原始空间注意模块[16]

原始SAM:给定一个特征图F',沿通道执行平均池化和最大池化操作,并将它们串联起来,然后应用卷积层(包含S型激活函数)生成注意力图(Ms),并将其应用于原始F'。

YOLO v4修改的空间注意模块,来源[5]

YOLO v4修改的SAM:不应用最大池化和平均池化,而是F'通过卷积层(包含S型激活函数)得到的结果与原始特征图(F')相乘。

(2)改善感受野:常用模块是SPP,ASPP和RFB(YOLO v4使用SPP)。早先讨论过的特征金字塔(如SFAM[7],ASFF[9]和Bi-FPN[3])也属于BoS。

(3)激活函数:自ReLU问世以来,它已经有很多变体,如LReLU、PReLU和ReLU6。ReLU6和hard-Swish之类的激活函数是专门为压缩网络设计(用于嵌入式设备),如Google Coral Edge TPU。YOLO v4 在主干中使用了很多Mish [14]激活函数:

来源[14 ]

事实证明该激活函数显示出非常好的结果。如与使用Swish或ReLU激活函数的Squeeze Excite网络(CIFAR-100数据集)Mish激活函数分别使得测试精度提升0.494%、1.671%[14]。

其他一些图形化的激活函数参考:https://www.desmos.com/calculator/rhx5tl8ygi

4.YOLO v4设计

已经讨论了用于提高模型精度和目标检测器不同部分(骨干、颈部、头部)的方法。现在我们讨论一下YOLO中使用的新内容。

(1)骨干:CSPDarknet53用作GPU版本的特征提取网络。对于VPU(视觉处理单元),他们考虑使用EfficientNet-lite — MixNet — GhostNet或MobileNetV3。我们重点介绍GPU版本。

下表显示了适用于GPU版本的不同候选的主干

来源[5]

某些主干与检测相比更适合分类。对于检测CSPDarknet53优于CSPResNext50,对于图像分类,CSPResNext50优于CSPDarknet53。如本文所述用于目标检测的骨干模型需要更大的输入网络大小(以便对小目标也能进行更好的检测)、更多的层(得到更大的感受野)。

(2)颈部:使用空间金字塔池(SPP)和路径聚合网络(PAN)。

路径聚合网络(PAN):与原始PAN不同,修改后的版本用concat代替addition操作,如下图

来源[5]

最初PAN将N4的尺寸减小到与P5相同的空间尺寸后,将这种缩小的N4与P5 相加,在所有Pi+ 1和Ni上重复此操作。在YOLO v4中,不是将Pi+1 和Ni加起来,而是concatenate连接起来(如上图所示)。

路径聚合网络(PAN)源[2]

空间金字塔池(SPP):它使用不同的核大小k = {5,9,13}、same填充在19 * 19 * 512的特征图上执行最大池化,然后将四个对应的特征图连接起来形成19 * 19 * 2048的特征图,这增加了颈部的感受野,在推理时间可以忽略不计的情况下提高了模型准确性。

在yolov4.cfg中观察到的SPP

如果您想可视化显示 yolo中使用的不同层(如上图所示),建议使用https://github.com/lutzroeder/netron(可以使用Web /桌面版本),然后使用它打开yolov4.cfg。

(3)头部:用法与YOLO v3相同。

应用在不同尺度的YOLO头部

头部应用在网络的不同尺度特征图,用于检测大小不同的物体通道数为255,因为(80个类别 + 1个对象 + 4个坐标)* 3个锚点。

5. BoF&BoS使用总结

骨干和YOLO v4检测器中使用的BoF和BoS的不同模块/方法可以总结如下:

6. 其他改进

(1)使用“”的数据增强新方法:将训练数据集的4张图像合并为1张图像:批量归一化从每层的4张不同的图像计算激活统计信息[5],因此极大地减少了选择大型mini-batch批量进行训练的需求。

来自[5]的数据增强

示例:用于车牌检测的增强

(2)使用自对抗训练(SAT):该训练分为两个阶段,第一阶段:神经网络更改原始图像,而不是网络权重,以这种方式神经网络对其自身执行对抗攻击,从而改变原始图像以产生对图像上没有所需物体的欺骗。第二阶段:训练神经网络以正常方式检测此修改图像上的对象。[5]

7. Colab Demo

我制作了一个Colab,您可以在自己的视频中测试YOLO v4及其微型版本,它使用了在MS COCO上训练的模型。地址为:https://colab.research.google.com/drive/1PuI9bYeM8O1OA82pI12oGopRJJrLWfs9?usp=sharing

8. 结论

更多详细信息参考https://arxiv.org/abs/2004.10934。如果您想在自己的数据集上进行训练,请查看官方仓库https://github.com/AlexeyAB/darknet。

YOLO v4达到了用于实时目标检测的最新结果(AP为43.5%),并且能够在V100 GPU上以65 FPS的速度运行。如果您想降低精度但要提高FPS,请在官方仓库中查看新的Yolo v4 Tiny版本https://github.com/AlexeyAB/darknet。

参考

[1] Feature Pyramid Networks for Object Detection

[2] Path Aggregation Network for Instance Segmentation

[3] EfficientDet: Scalable and Efficient Object Detection

[4] Focal Loss for Dense Object Detection

[5] YOLOv4: Optimal Speed and Accuracy of Object Detection

[6] Single Shot MultiBox Detector (SSD)

[7] A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network

[8] Improved Regularization of Convolutional Neural Networks with Cutout

[9] Learning Spatial Fusion for Single-Shot Object Detection

[10] Random Erasing Data Augmentation

[11] Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression

[12] UnitBox: An Advanced Object Detection Network

[13] DropBlock: A regularization method for convolutional networks

[14] Mish: A Self Regularized Non-Monotonic Neural Activation Function

[15] Squeeze-and-Excitation Networks

[16] CBAM: Convolutional Block Attention Module

交流群

(0)

相关推荐

  • 一位算法工程师从30+场秋招面试中总结出的超强面经——目标检测篇(含答案)

    作者丨灯会 来源丨极市平台 编辑丨极市平台 极市导读 作者灯会为21届中部985研究生,凭借自己整理的面经,去年在腾讯优图暑期实习,七月份将入职百度cv算法工程师.在去年灰飞烟灭的算法求职季中,经过3 ...

  • 在目标检测中如何解决小目标的问题?

    机器学习与生成对抗网络 记录分享通俗.有趣的AI科技知识,包括不限于CV.GAN等等,还有程序员求职面试.内推等资料,偶尔分享诗词歌赋.陶冶情操,一起做个有趣.前沿的人! 94篇原创内容 公众号 作者 ...

  • 图像物体中心点

    对于刚刚入门人工智能的小伙伴来说,常常需要阅读其他人员写的代码,更多的时候这些代码可能即没有文档也没有注释.大大超过了我们能够阅读理解的范围.其结果是我们每每下定决心阅读,投入巨大的精力,却收效甚微. ...

  • MS-DAYOLO来了!多尺度域自适应的YOLO,恶劣天气也看得见!

    转载自:集智书童 Multiscale Domain Adaptive YOLO for Cross-Domain Object Detection 论文:https://arxiv.org/abs/ ...

  • YOLOv4详细分析 | 细数当前最佳检测框架小细节(附论文及源码下载)

    获取有趣.好玩的前沿干货! 来源:计算机视觉研究院 链接:https://medium.com/@jonathan_hui/yolov4-c9901eaa8e61 著作权归作者所有,侵删 前段时间,突 ...

  • DyFPN:浙大&华为诺亚&西湖大学等提出用于目标检测的动态特征金字塔,减少40%的FLOPs!

    ▊ 写在前面 特征金字塔网络(FPN)是目标检测框架的重要组成部分.大多数现有FPN变体的性能提高主要归因于计算负担的增加.增强FPN的一种方法是通过扩展感受野来丰富空间信息 ,能够大大提高检测精度. ...

  • 综述:目标检测二十年(2001-2021)

    作者丨派派星 来源丨CVHub 编辑丨极市平台 极市导读 目标检测领域发展至今已有二十余载,本文将对目标检测领域近20年的发展做一次系统性的介绍,并为目标检测构建一个完整的知识体系架构. 引言 目标检 ...

  • 计算机视觉物体检测中面对的挑战

    导读 给出了目前目标检测中的一些问题和挑战. 几年前,在图像中寻找并分类单个物体是一项极其困难的任务.今天,在计算机视觉的帮助下,数字设备可以简单快速地识别图像的内容,这为不同领域的视觉数据理解和分析 ...

  • 雷达科普|自动驾驶毫米波雷达物体检测技术-算法

    导读: 本文的代码均在MATLAB上运行, MATLAB在传统辅助驾驶系统的验证和模拟上相对于其他编程语言具有很强的优势. Range and velocity estimation 在这篇文章中, ...

  • 基于OpenCV实战:动态物体检测

    重磅干货,第一时间送达 最近,闭路电视安全系统运行着多种算法来确保安全,例如面部识别,物体检测,盗窃检测,火灾警报等.我们在运动检测的基础上实现了许多算法,因为在空闲帧上运行所有这些进程没有任何意义. ...

  • 使用Transformer来做物体检测

    作者:Jacob Briones(编译:ronghuaiyang) 来源:AI公园 著作权归作者所有,本文仅作学术分享,若侵权,请联系后台删文处理 导读 这是一个Facebook的目标检测Transf ...

  • 手把手用YOLO做目标检测

    来自:新机器视觉 著作权归作者所有,本文仅作学术分享,若侵权,请联系后台删文处理 作为目前机器学习领域最火热的研究方向之一,计算机视觉相关的技术一直备受关注.其中,目标检测是计算机视觉领域常见的问题之 ...

  • 线上分享会预告之物体检测及其6自由度姿态估计

    大家好. 第一期B站录播之三维模型检索技术 第二期B站录播之深度学习在3D场景中的应用 第三期B站录播之CMake进阶学习 此次分享是一次接力形式的分享,每周都将有一位主讲人分享,希望更多的小伙伴加入 ...

  • 使用 YOLO 进行目标检测

    重磅干货,第一时间送达 自从世界了解人工智能以来,有一个特别的用例已经被讨论了很多.它们是自动驾驶汽车.我们经常在科幻电影中听到.读到甚至看到这些.有人说,我们将在2010年拥有自动驾驶汽车,有人说到 ...

  • 死磕YOLO系列,不会 AI没关系,用OpenCV 调用YOLO 做目标检测

    如果你要完成下图的目标检测功能,你会怎么做? 对于视觉工程师而言,这当然是个小问题.可术业有专攻,不一定每个程序员都懂 AI 算法,那肯定就有一种方法把算法当成一个黑盒子,处理好输入输出就好了. 所以 ...

  • (4条消息) OpenCV DNN之YOLO实时对象检测

    OpenCV在3.3.1的版本中开始正式支持Darknet网络框架并且支持YOLO1与YOLO2以及YOLO Tiny网络模型的导入与使用.YOLO是一种比SSD还要快的对象检测网络模型,算法作者在其 ...