重磅更新!YoloV4最新论文!解读yolov4框架

论文地址和代码

https://arxiv.org/abs/2004.10934v1

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

本篇博文是对YOLOv4论文的翻译和框架解读!并且有PDF版本可供下载!——YOLOv4阅读笔记(附思维导图)!YOLOv4: Optimal Speed and Accuracy of Object Detection(点击跳转)

摘要:

据说有许多功能可以提高卷积神经网络(CNN)的准确性。 需要在大型数据集上对这些特征的组合进行实际测试,并对结果进行理论证明。 某些功能仅在某些模型上运行,并且仅在某些问题上运行,或者仅在小型数据集上运行; 而某些功能(例如批归一化和残差连接)适用于大多数模型,任务和数据集。 我们假设此类通用功能包括加权残差连接(WRC),跨阶段部分连接(CSP),跨小批量标准化(CmBN),自对抗训练(SAT)和Mish激活。 我们使用以下新功能:WRC,CSP,CmBN,SAT,Mish激活,马赛克数据增强,CmBN,DropBlock正则化和CIoU丢失,并结合其中的一些功能来实现最新的结果:43.5%的AP(65.7 在Tesla V100上,MS COCO数据集的实时速度约为65 FPS。

 核心中的核心:作者将Weighted-Residual-Connections(WRC), Cross-Stage-Partial-connections(CSP), Cross mini-Batch Normalization(CmBN), Self-adversarial-training(SAT),Mish-activation Mosaic data augmentation, DropBlock, CIoU等组合得到了爆炸性的YOLOv4,可以吊打一切的YOLOv4.在MS-COCO数据上:43.5%@AP(65.7%@AP50)同时可以达到65fps@TeslaV100.

 

贡献

作者设计YOLO的目的之初就是设计一个快速而高效的目标检测器。该文的贡献主要有以下几点:

  • 设计了一种快速而强有力的目标检测器,它使得任何人仅需一个1080Ti或者2080Ti即可训练这样超快且精确的目标检测器你;

  • (不会翻译直接上英文)We verify the influence of SOTA bag-of-freebies and bag-of-specials methods of object detection during detector training

  • 作者对SOTA方法进行改进(含CBN、PAN,SAM)以使其更适合单GPU训练

方法

作者在现有实时网络的基础上提出了两种观点:

  • 对于GPU而言,在组卷积中采用小数量的groups(1-8),比如CSPResNeXt50/CSPDarknet53;

  • 对于VPU而言,采用组卷积而不采用SE模块。

网路结构选择

网络结构选择是为了在输入分辨率、网络层数、参数量、输出滤波器数之间寻求折中。作者研究表明:CSPResNeXt50在分类方面优于CSPDarkNet53,而在检测方面反而表现要差

网络主要结构确定了后,下一个目标是选择额外的模块以提升感受野、更好的特征汇聚模块(如FPN、PAN、ASFF、BiFPN)。对于分类而言最好的模型可能并不适合于检测,相反,检测模型需要具有以下特性:

  • 更高的输入分辨率,为了更好的检测小目标;

  • 更多的层,为了具有更大的感受野;

  • 更多的参数,更大的模型可以同时检测不同大小的目标。

一句话就是:选择具有更大感受野、更大参数的模型作为backbone。下图给出了不同backbone的上述信息对比。从中可以看到:CSPResNeXt50仅仅包含16个卷积层,其感受野为425x425,包含20.6M参数;而CSPDarkNet53包含29个卷积层,725x725的感受野,27.6M参数。这从理论与实验角度表明:CSPDarkNet53更适合作为检测模型的Backbone

在CSPDarkNet53基础上,作者添加了SPP模块,因其可以提升模型的感受野、分离更重要的上下文信息、不会导致模型推理速度的下降;与此同时,作者还采用PANet中的不同backbone级的参数汇聚方法替代FPN。

最终的模型为:CSPDarkNet53+SPP+PANet(path-aggregation neck)+YOLOv3-head = YOLOv4.

Tricks选择

为更好的训练目标检测模型,CNN模型通常具有以下模块:

  • Activations:ReLU、Leaky-ReLU、PReLU、ReLU6、SELU、Swish or Mish

  • Bounding box regression Loss:MSE、IoU、GIoU、CIoU、DIoU

  • Data Augmentation:CutOut、MixUp、CutMix

  • Regularization:DropOut、DropPath、Spatial DropOut、DropBlock

  • Normalization:BN、SyncBn、FRN、CBN

  • Skip-connections:Residual connections, weighted residual connections, Cross stage partial connections

作者从上述模块中选择如下:激活函数方面选择Mish;正则化方面选择DropBlock;由于聚焦在单GPU,故而未考虑SyncBN。

其他改进策略

为使得所涉及的检测器更适合于单GPU,作者还进行了其他几项额外设计与改进:

  • 引入一种新的数据增广方法:Mosaic与自对抗训练;

  • 通过GA算法选择最优超参数;

  • 对现有方法进行改进以更适合高效训练和推理:改进SAM、改进PAN,CmBN。

 

 

YOLOv4

总而言之,YOLOv4包含以下信息:

  • Backbone:CSPDarkNet53

  • Neck:SPP,PAN

  • Head:YOLOv3

  • Tricks(backbone):CutMix、Mosaic、DropBlock、Label Smoothing

  • Modified(backbone): Mish、CSP、MiWRC

  • Tricks(detector):CIoU、CMBN、DropBlock、Mosaic、SAT、Eliminate grid sensitivity、Multiple Anchor、Cosine Annealing scheduler、Random training shape

  • Modified(tector):Mish、SPP、SAM、PAN、DIoU-NMS

Experiments

模型的好坏最终还是要通过实验来验证,直接上对比表:

### 回答1: Spark 3.0 是一次重磅发布,经过近两年的开发,它在流处理、Python 和 SQL 方面都进行了重大更新。以下是对这些更新的全面解读: 1. 流处理:Spark 3.0 引入了结构化流处理 API 的重大更新,包括新的流式查询引擎和增强的流式数据源 API。这些更新使得 Spark 更加适合处理实时数据流,并提供了更好的容错机制和更高的性能。 2. Python:Spark 3.0 对 Python API 进行了重大更新,包括对 Pandas UDF 的支持和对 Python 3 的全面支持。这些更新使得 Python 用户能够更加方便地使用 Spark,并且能够更好地利用 Python 生态系统中的工具和库。 3. SQL:Spark 3.0 引入了许多 SQL 方面的更新,包括 ANSI SQL 支持、新的优化器和执行引擎、更好的分区管理和更好的数据源 API。这些更新使得 Spark 更加适合处理大规模数据,并提供了更好的性能和可扩展性。 总的来说,Spark 3.0 的更新使得它更加适合处理实时数据流和大规模数据,并提供了更好的性能和可扩展性。同时,它也更加方便 Python 用户使用,并且能够更好地利用 Python 生态系统中的工具和库。 ### 回答2: 近日,Apache Spark 社区正式宣布发布了最新版 Spark 3.0。这是一次重磅更新,涵盖了流处理、Python 和 SQL 三大方面的内容。下面就让我们来逐一解读这些更新吧。 1. 流处理:Spark 3.0 引入了一项名为 Structured Streaming 的重要功能。它能够以批处理的方式处理流数据,并且保证了完全幂等性(即能够在多次运行时保证相同的输出)。此外,这个版本还增加了更多的连接器,可以方便地从 Kafka、Flume、Twitter 和 HDFS 中读取数据。 2. Python 支持:在 Spark 3.0 中,Python 支持得到了显著的提升。现在,Python 3 官方支持了 PySpark,而且这个版本同时也新增了 Python API 的许多改进。这里,值得一提的是,Python 开发者可以使用 Pandas 和 Pyarrow 来提高数据集和数据帧的操作速度。 3. SQL:Spark 3.0 中 SQL 的更新主要体现在两个方面:一是 SQL 引擎升级至 Apache Arrow,二是 SQL 执行计划优化。这些更新使得 Spark 3.0 的 SQL 引擎能够更快地处理 SQL 查询,并且提高了查询的执行效率。 此外,Spark 3.0 还新增了 Pyspark 的 type hints 和注释支持,提供了更好的代码接口提示;改进了原有的分布式机器学习功能,加入了新的规范、API 和示例;提高了 Kerberos 和 Hadoop 文件系统(HDFS)的兼容性等。 总之,Spark 3.0 的发布,标志着 Apache Spark 在数据处理领域中的核心地位得到了继续的巩固,并且为 Python 和流处理等开源生态提供了一种更加稳定、快速和可靠的解决方案。对于数据工程师和数据科学家们而言,这无疑是一个重要的里程碑。 ### 回答3: Apache Spark是一个快速通用的大数据处理引擎,Python是一种流行的编程语言,SQL是结构化查询语言的缩写,用于管理关系型数据库,这些都是当今最重要的技术学科。最近,Spark推出了Python3_Spark 3.0的重磅发布,这意味着Spark的核心技术已经经过了重大更新,让我们听听它是如何变得更加优秀。 Python3_Spark 3.0更新重大,首先是流式处理。在此版本中,新引入的流处理模块提供了对无限数据流的完全支持,没有大小限制,可以直接应用于大多数Spark数据源和流数据源,可以轻松实现亚秒级响应,并且还包含新的UI各类展示函数,可以轻松监视流式应用程序。 其次是对Python的原生支持。Python在数据处理界面上极受欢迎,PySpark现在在Python3中完全支持,包括与Python新功能的充分配合,如Python3的类型提示(typing),这意味着PySpark代码现在可以像使用Spark的Scala和Java API一样流畅地进行编写;大大提高了数据科学家和机器学习工程师的效率。 最后是SQL支持。Spark已经成为用户基础最广泛的SQL引擎之一之一。最新的Spark 3.0版本通过实现 ANSI SQL 标准来大幅度提高了 SQL 的兼容性和处理性能。Spark 3.0 将包括对 SQL 2016 的完整支持,包括 MATCH_RECOGNIZE和其他高级功能。此外,Spark 3.0 还支持更多的数据类型,并且还具备静态类型分析和优化,可以帮助用户快速有效地查询和处理大规模数据。 总之,Spark Python3_Spark 3.0的发布,在流、Python、SQL等方面提供了全面升级,使得它的核心技术更加完善和先进,有助于增强数据处理效率,实现更好的数据分析应用。对于正在使用Spark的用户来说,这让他们的生活更加容易。 对于Spark未来的发展,它的不断升级和创新发展势头十分强劲,我们期待它的更多惊喜发布。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值