首页 > 其他分享 >51c视觉~YOLO~合集7~

51c视觉~YOLO~合集7~

时间:2024-12-17 19:03:50浏览次数:5  
标签:23330 10 51c YOLO split leaky 合集 bn

我自己的原文哦~   https://blog.51cto.com/whaosoft/12835729

一、其他yolo

1.1 ImageAdaptive-YOLO

又发现了一个yolo~~  恶劣天气下的目标检测 也叫IA-YOLO

源代码:https://github.com/wenyyu/ImageAdaptive-YOLO

尽管基于深度学习的目标检测方法在传统数据集上取得了可喜的结果,但从恶劣天气条件下捕获的低质量图像中定位目标仍然具有挑战性。现有方法要么难以平衡图像增强和目标检测的任务,要么经常忽略对检测有益的潜在信息。

为了缓解这个问题,有研究者提出了一种新颖的图像自适应YOLO (IA-YOLO) 框架,其中每个图像都可以自适应增强以获得更好的检测性能。

背景及相关目标检测回顾

基于CNN的方法已在目标检测中盛行。它们不仅在基准数据集上取得了可喜的性能,而且还被部署在自动驾驶等实际应用中。由于输入图像的域偏移,由高质量图像训练的一般目标检测模型在恶劣的天气条件下(例如,有雾和暗光)往往无法获得令人满意的结果。Narasimhan和Nayar以及You等人提出在恶劣天气下拍摄的图像可以分解为干净的图像及其对应的天气信息,而恶劣天气下的图像质量下降主要是由于天气信息和物体之间的相互作用造成的,这导致检测性能差。

上图显示了雾天条件下目标检测的示例。可以看出,如果图像可以根据天气状况进行适当的增强,则可以恢复更多有关原始模糊目标和错误识别目标的潜在信息。

为了解决这个具有挑战性的问题,Huang、Le和Jaw(DSNet: Joint semantic learning for object detection in inclement weather conditions)采用了两个子网络来联合学习可见性增强和目标检测,其中通过共享特征提取层来减少图像退化的影响。然而,在训练期间很难调整参数以平衡检测和恢复之间的权重。另一种方法是通过使用图像去雾(Multi-Scale Boosted Dehazing Network with Dense Feature FusionGridDehazeNet: Attention-Based Multi-Scale Network for Image Dehazing)和图像增强(Zero-reference deep curve estimation for low-light image enhancement)等现有方法对图像进行预处理来淡化天气特定信息的影响。然而,这些方法必须包含复杂的图像恢复网络,需要在像素级监督下单独训练。这需要手动标记要恢复的图像。这个问题也可以被视为无监督的domain adaptation任务。与具有清晰图像(源图像)的训练检测器相比,假设在恶劣天气下捕获的图像(目标图像)具有分布偏移。这些方法大多采用domain adaptation原则,侧重于对齐两个分布的特征,而通常忽略了基于天气的图像恢复过程中可以获得的潜在信息。 

具体来说,研究者提出了一个可微分图像处理 (DIP) 模块来考虑YOLO检测器的不利天气条件,其参数由小型卷积神经网络(CNN-PP)预测。以端到端的方式联合学习CNN-PP和YOLOv3,这确保了CNN-PP可以学习适当的DIP,以弱监督的方式增强图像以进行检测。提出的IA-YOLO方法可以在正常和不利的天气条件下自适应地处理图像。实验结果非常令人振奋,证明了提出的IA-YOLO方法在有雾和弱光场景中的有效性。

新框架分析

接下来我们直接开始分析新框架。

在恶劣天气条件下拍摄的图像,由于天气特定信息的干扰,导致目标检测困难。为了应对这一挑战,研究者建议通过删除特定天气信息并揭示更多潜在信息来构建图像自适应检测框架。如上图所示,整个pipeline由基于CNN的参数预测器(CNNPP)、可微分图像处理模块(DIP)和检测网络组成。

首先将输入图像resize为256×256的大小,并将其输入CNN-PP以预测DIP的参数。然后,将DIP模块过滤后的图像作为YOLOv3检测器的输入。提出了一种具有检测损失的端到端混合数据训练方案,以便CNN-PP可以学习适当的DIP以弱监督的方式增强图像以进行目标检测。

DIP Module

对于CNN-PP基于梯度的优化,过滤器应该是可微的,以允许通过反向传播来训练网络。由于CNN在处理高分辨率图像(例如4000×3000)时会消耗大量的计算资源,研究者从下采样的256×256大小的低分辨率图像中学习滤波器参数,然后将相同的滤波器应用于原始分辨率的图像。因此,这些过滤器需要独立于图像分辨率。

新提出的DIP模块由六个具有可调超参数的可微滤波器组成,包括去雾、白平衡 (WB)、Gamma、对比度、色调和锐化。例如WB、Gamma、对比度和色调,可以表示为逐像素过滤器。因此,研究者设计的过滤器可以分为去雾、像素过滤和锐化。在这些滤镜中,Defog滤镜是专门为有雾场景设计的。

CNN-PP Module

在图像信号处理 (ISP) pipeline中,通常采用一些可调滤波器来增强图像,其超参数由经验丰富的工程师通过visual inspection手动调整。通常,这样的调整过程对于为广泛的场景找到合适的参数是非常笨拙和昂贵的。为了解决这个限制,研究者建议使用一个小的CNN作为参数预测器来估计超参数,这是非常有效的。

Detection Network Module

最终选择one-stage检测器YOLOv3作为检测网络,它广泛用于实际应用,包括图像编辑、安全监控、人群检测和自动驾驶。它通过对多尺度特征图进行预测来实现多尺度训练,从而进一步提高检测精度,尤其是对于小物体。 采用与原始YOLOv3相同的网络架构和损失函数。

实验及可视化
整个算法流程可以总结为如下伪代码:

1.2 YOLO-World

又一种yolo.....

一种新的可重参化的视觉语言路径聚合网络(RepVL-PAN)和区域文本对比损失,以促进视觉和语言信息之间的交互。作者的方法在以零样本方式检测广泛范围的物体时表现出色,且效率高。赋能YOLOv8开集检测能力,构建新一代YOLO新标杆

YOLO系列检测器已将自己确立为高效实用的工具。然而,它们依赖于预定义和训练的物体类别,这在开放场景中限制了它们的适用性。针对这一限制,作者引入了YOLO-World,这是一种创新的方法,通过视觉语言建模和在大型数据集上的预训练,将YOLO与开集检测能力相结合。具体来说,作者提出了一种新的可重参化的视觉语言路径聚合网络(RepVL-PAN)和区域文本对比损失,以促进视觉和语言信息之间的交互。作者的方法在以零样本方式检测广泛范围的物体时表现出色,且效率高。

YOLO-World在大规模视觉语言数据集上进行了预训练,包括Objects 365,GQA,Flickr 30 K和CC 3 M,这使得YOLO-World具有强大的zero-shot开集Capbility与Grounding能力。

在具有挑战性的LVIS数据集上,YOLO-World在V100上实现了35.4 AP和52.0 FPS,在准确性和速度上都超过了许多最先进的方法。此外,经过微调的YOLO-World在包括目标检测和开集实例分割在内的几个下游任务上取得了显著性能。

1 Introduction

目标检测一直是计算机视觉中一个长期而基础性的挑战,在图像理解、机器人学和自动驾驶车辆等领域有着众多的应用。随着深度神经网络的发展,大量的研究工作在目标检测领域取得了显著的突破。尽管这些方法取得了成功,但它们仍然有限,因为它们只处理具有固定词汇量的目标检测,例如,COCO 数据集中的80个类别。一旦定义并标记了目标类别,训练出的检测器只能检测那些特定的类别,这样就限制了在开放场景中的能力和适用性。

近期的工作探讨了普遍的视觉-语言模型,以解决开集检测问题,通过从语言编码器中提炼词汇知识,例如BERT。然而,这些基于蒸馏的方法受到很大限制,因为训练数据的稀缺性导致词汇多样性有限,例如OV-COCO仅包含48个基本类别。几种方法将目标检测训练重新定义为区域 Level 的视觉-语言预训练,并在大规模上训练开集目标检测器。然而,这些方法在现实场景中的检测仍然存在困难,主要受两方面影响:

  1. 计算负担重
  2. 边缘设备部署复杂

以前的工作已经证明了预训练大型检测器的性能潜力,而预训练小型检测器以赋予它们开放识别能力尚未被探索。

在本文中,作者提出了YOLO-World,旨在实现高效的开集目标检测,并探索大规模预训练方案,以将传统的YOLO检测器提升到一个新的开集世界。与先前方法相比,所提出的YOLO-World在具有高推理速度方面显著高效,易于部署到下游应用中。具体而言,YOLO-World遵循标准的YOLO架构,并利用预训练的CLIP文本编码器来编码输入文本。作者进一步提出了可重参化的视觉-语言路径聚合网络(RepVL-PAN),以更好地连接文本特征和图像特征,实现视觉语义表示。

在推理过程中,可以移除文本编码器,并将文本嵌入重新参数化为RepVL-PAN的权重,以实现高效部署。作者进一步研究了对YOLO检测器的大规模开集预训练方案,通过在大型数据集上对区域文本进行对比学习,将检测数据、定位数据以及图像文本数据统一为区域文本对。预训练的YOLO-World拥有丰富的区域文本对,展示了在大词汇检测方面的强大能力,且更多的数据训练将带来开集能力的更大提升。

此外,作者探索了一种“提示后检测”范式,以进一步改进实际场景中开集目标检测的效率。如图2所示,传统的目标检测器专注于固定词汇(封闭集)的检测,这些词汇是预定义且经过训练的类别。而之前的开集检测器则使用文本编码器对用户提示进行编码,以实现在线词汇的检测目标。值得注意的是,这些方法往往采用带有重型 Backbone 网络的大型检测器,例如Swin-L,以增加开集的容量。

相比之下,“提示后检测”范式(图2(c))首先对用户的提示进行编码以构建离线词汇,该词汇根据不同的需求而变化。然后,高效的检测器可以在不重新编码提示的情况下即时推理离线词汇。对于实际应用,一旦作者训练了检测器,即YOLO-World,作者可以预先编码提示或类别以构建离线词汇,然后无缝地将其整合到检测器中。

作者的主要贡献可以概括为三个方面:

  1. 作者介绍了YOLO-World,这是一个前沿的开集目标检测器,它具有高效率,适用于实际应用场景。
  2. 作者提出了一个可重新参数化的视觉-语言PAN模型,用以连接视觉和语言特征,并针对YOLO-World设计了一套开集区域文本对比预训练方案。
  3. YOLO-World在大规模数据集上的预训练展示了强大的零样本性能,在LVIS上达到35.4 AP的同时,还能保持52.0 FPS的速度。预训练的YOLO-World可以轻松适应下游任务,例如,开集实例分割和指代目标检测。此外,YOLO-World的预训练权重和代码将开源,以促进更多实际应用。

2 Related Works

Traditional Object Detection

当前的目标检测研究主要集中在固定词汇(封闭集)检测上,其中目标检测器是在预定义类别的数据集上进行训练的,例如COCO数据集和Objects365数据集,然后检测固定类别集合内的目标。

在过去的几十年中,传统的目标检测方法可以简单地分为三类,即基于区域的方法、基于像素的方法和基于 Query 的方法。基于区域的方法,例如Faster R-CNN,采用两阶段框架进行 Proposal 生成和RoI(感兴趣区域)分类和回归。基于像素的方法倾向于是一阶段检测器,它们在预定义的 Anchor 点或像素上进行分类和回归。DETR首次通过 Transformer探索目标检测,并启发了大量的基于 Query 的方法。在推理速度方面,Redmon等人提出了YOLOs,利用简单的卷积架构实现实时目标检测。

一些研究提出了各种YOLO的架构或设计,包括路径聚合网络,跨阶段部分网络和重参化,这些进一步提高了速度和准确性。与之前的YOLOs相比,本文中的YOLO-World旨在超越固定词汇检测目标,具有强大的泛化能力。

Open-Vocabulary Object Detection

开集目标检测(OVD)已成为现代目标检测的新趋势,它旨在检测超越预定义类别的目标。早期工作遵循标准的OVD设置,通过在基类上训练检测器并评估新(未知)类。然而,这种开集设置虽然可以评估检测器检测和识别新目标的能力,但由于在有限的 数据集和词汇上训练,它仍然局限于开放场景,并且在泛化到其他领域的能力上有所不足。

受到视觉-语言预训练的启发,近期的研究将开集目标检测公式化为图像-文本匹配,并利用大规模图像-文本数据大规模增加训练词汇。GLIP提出了一种基于短语定位的开集检测预训练框架,并在零样本设置中进行评估。Grounding DINO 将定位预训练融入到检测 Transformer 中,并通过跨模态融合。

几种方法通过区域文本匹配统一检测数据集和图像文本数据集,并使用大规模图像文本对预训练检测器,取得了有希望的性能和泛化能力。然而,这些方法通常使用如ATSS或DINO等重型检测器,并以Swin-L作为主干,导致了高计算需求和部署挑战。

相比之下,作者提出了YOLO-World,旨在实现高效的开集目标检测,具有实时推理和更容易的下游应用部署。与同样通过语言模型对齐探索开集检测的ZSD-YOLO[50]不同,YOLO-World引入了一个新的YOLO框架,并采用了一种有效的预训练策略,提升了开集的性能和泛化能力。

3 Method

Pre-training Formulation: Region-Text Pairs

Model Architecture

所提出的YOLO-World的整体架构如图3所示,它包括一个YOLO检测器_、一个文本编码器以及一个_可重参化的视觉-语言路径聚合网络(RepVL-PAN)。在给定输入文本的情况下,YOLO-World中的文本编码器将文本编码为文本嵌入。YOLO检测器中的图像编码器从输入图像中提取多尺度特征。然后作者利用RepVL-PAN通过利用图像特征与文本嵌入之间的跨模态融合来增强文本和图像的表现。

YOLO检测器。YOLO-World主要是基于YOLOv8  开发的,它包括一个Darknet Backbone 作为图像编码器,一个路径聚合网络(PAN)用于多尺度特征金字塔,以及一个用于边界框回归和目标嵌入的 Head 。

在离线词汇推理阶段,作者提出了一种以“提示后检测”的策略,使用离线词汇以进一步提高效率。如图3所示,用户可以定义一系列自定义提示,这些提示可能包括标题或类别。然后作者使用文本编码器编码这些提示并获得离线词汇嵌入。离线词汇使作者可以避免对每个输入进行计算,并提供根据需要调整词汇的灵活性。

Re-parameterizable Vision-Language PAN

Pre-training Schemes

在本节中,作者介绍了在大规模检测、定位以及图像-文本数据集上对YOLO-World进行预训练的训练方案。

基于图像-文本数据的伪标签方法。作者并不是直接使用图像-文本对进行预训练,而是提出了一种自动标注方法来生成区域-文本对。具体来说,这种标注方法包含三个步骤

  1. 提取名词短语:首先使用n-gram算法从文本中提取名词短语;
  2. 伪标签:采用一个预训练的开集检测器,例如GLIP ,为每张图像给定名词短语的生成伪边界框,从而提供粗糙的区域-文本对;
  3. 过滤:使用预训练的CLIP 评估图像-文本对和区域-文本对的相关性,并过滤掉低相关性的伪标注和图像。作者进一步通过结合非极大值抑制(NMS)等方法来过滤冗余的边界框。建议读者参考附录以了解详细方法。通过上述方法,作者从CC3M中采样并标注了246k张图像,生成了821k个伪标注。

4 Experiments

在本节中,作者通过在大规模数据集上对所提出的YOLO-World进行预训练,展示了其有效性,并以零样本方式在LVIS基准和COCO基准上评估了YOLO-World(第4.2节)。作者还评估了YOLO-World在COCO、LVIS数据集上进行目标检测的微调性能。

Implementation Details

YOLO-World是基于MMYOLO工具箱和MMDetection工具箱开发的。遵循[19],作者为不同的延迟需求提供了YOLO-World的三个变体,例如小型(S)、中型(M)和大型(L)。作者采用了开源的CLIP文本编码器及其预训练权重来编码输入文本。除非特别指明,作者将所有模型的推理速度测量在单个NVIDIA V100 GPU上,且不使用额外的加速机制,例如FP16或TensorRT。

Pre-training

实验设置。在预训练阶段,作者采用了AdamW优化器,初始学习率为0.002,权重衰减为0.05。YOLO-World在32个NVIDIA V100 GPU上以总批处理大小512进行预训练,共100个周期。在预训练期间,作者遵循之前的工作,采用了颜色增强、随机仿射变换、随机翻转以及包含4张图片的马赛克数据进行数据增强。在预训练期间,文本编码器被冻结。

预训练数据。 为了预训练YOLO-World,作者主要采用了包括Objects365 (V1) ,GQA ,Flickr30k 在内的检测或定位数据集,具体如表格1所示。遵循[23]的做法,作者排除了GoldG(GQA和Flickr30k)中来自COCO数据集的图像。用于预训练的检测数据集的标注包括边界框和类别或名词短语。此外,作者还通过图像-文本对扩展了预训练数据,即CC3M,作者通过第3.4节讨论的伪标注方法对其中的246k图像进行了标注。

零样本评估。 在预训练之后,作者直接以零样本的方式在LVIS数据集上评估所提出的YOLO-World。LVIS数据集包含1203个目标类别,这比预训练检测数据集的类别多得多,可以衡量在大词汇检测上的性能。遵循先前的工作,作者主要在LVIS minival上进行评估,并报告了用于比较的Fixed AP。预测的最大数量设置为1000。

关于LVIS目标检测的主要结果。 在表2中,作者以零样本的方式将提出的YOLO-World与最近的最先进的方法[20, 29, 52, 53, 55]在LVIS基准上进行比较。考虑到计算负担和模型参数,作者主要与基于较轻量级 Backbone 的方法进行比较,例如,Swin-T。

值得注意的是,YOLO-World在零样本性能和推理速度方面都超过了之前的最先进方法。与包含了更多数据的方法相比,如GLIP、GLIPv2和Grounding DINO(例如,Cap4M(CC3M+SBU [34])),仅用O365 & GolG进行预训练的YOLO-World即使模型参数较少,也获得了更好的性能。

与DetCLIP相比,YOLO-World在获得推理速度提升的同时,取得了可比较的性能(35.4 对比 34.4)。实验结果还表明,小型模型,例如,拥有13M参数的YOLO-World-S,可用于视觉-语言预训练,并获得强大的开集能力。

Ablation Experiments

作者提供了广泛的消融研究,从两个主要方面分析YOLO-World,即预训练和架构。除非另有指定,作者主要基于YOLO-World-L进行消融实验,并使用零样本评估在LVIS minival上预训练Objects365。

预训练数据。 在表3中,作者评估了使用不同数据预训练YOLO-World的性能。与在Objects365上训练的 Baseline 相比,加入GQA可以在LVIS上显著提高性能,AP增益达到8.4。这种改进可以归因于GQA数据集提供的更丰富的文本信息,这可以增强模型识别大词汇目标的能力。

加入部分CC3M样本(完整数据集的8%)可以进一步带来0.5 AP的增益,罕见目标上提升1.3 AP。表3显示,添加更多数据可以有效提高在大词汇场景下的检测能力。此外,随着数据量的增加,性能持续提升,凸显了利用更大、更多样化的数据集进行训练的好处。

对RepVL-PAN的消融研究。 表4展示了所提出的YOLO-World中的RepVL-PAN对于零样本LVIS检测的有效性,包括文本引导的CSPLayers和图像池化注意力。

具体来说,作者采用了两种设置,即:(1)在O365上预训练;(2)在O365和GQA上预训练。与只包含类别标注的O365相比,GQA包含了丰富的文本信息,尤其是名词短语的形式。

正如表5所示,CLIP文本编码器比BERT获得了更好的结果(在LVIS中罕见类别的AP提高了10.1),这是用图像-文本对进行预训练的,具有更强的以视觉为中心的嵌入能力。在预训练过程中微调BERT带来了显著的提升(+3.7 AP),而微调CLIP则导致性能严重下降。作者将下降归因于在O365上进行微调可能会降低预训练CLIP的泛化能力,因为O365只包含365个类别,并且缺乏丰富的文本信息。

Fine-tuning YOLO-World

在本节中,作者进一步对YOLO-World进行微调,以在COCO数据集和LVIS数据集上进行闭集目标检测,以展示预训练的有效性。

实验设置。作者使用预训练权重来初始化YOLO-World以进行微调。所有模型都使用AdamW优化器微调80个周期,初始学习率设置为0.0002。此外,作者还以0.01的学习因子微调CLIP文本编码器。对于LVIS数据集,作者遵循之前的工作,在LVIS-base(常见和频繁)上微调YOLO-World,并在LVIS-novel(罕见)上进行评估。

COCO目标检测。作者在表6中比较了预训练的YOLO-World与先前的YOLO检测器。在将YOLO-World在COCO数据集上进行微调时,考虑到COCO数据集的词汇量较小,作者移除了所 Proposal 的RepVL-PAN以进一步加速。在表6中,很明显作者的方法在COCO数据集上可以取得相当不错的零样本性能,这表明YOLO-World具有很强的泛化能力。此外,与从头开始训练的先前方法相比,经过COCO train2017数据集微调后的YOLO-World展示了更高的性能。

LVIS目标检测。在表7中,作者评估了YOLO-World在标准LVIS数据集上的微调性能。首先,与在完整LVIS数据集上训练的oracle YOLOv8s相比,YOLO-World取得了显著的提升,尤其是对于较大模型,例如,YOLO-World-L比YOLOv8-L在7.2 AP和10.2 AP上有更好的表现。这些改进可以证明所提出的大词汇量检测预训练策略的有效性。此外,作为高效的单阶段检测器,YOLO-World在总体性能上超过了之前最先进的两阶段方法,而且无需额外的设计,例如,可学习的提示[7]或基于区域的对齐。

Open-Vocabulary Instance Segmentation

在本节中,作者进一步对YOLO-World进行微调,以在开集设置下分割目标,这可以称为开集实例分割(OVIS)。先前的方法已经通过在新目标上使用伪标记来探索OVIS。不同的是,考虑到YOLO-World具有强大的迁移和泛化能力,作者直接在一个带有掩膜标注的数据子集上微调YOLO-World,并在大词汇设置下评估分割性能。具体来说,作者在两种设置下对开集实例分割进行了基准测试:

作者评估了在标准LVIS val2017数据集上微调后的模型,该数据集包含1203个类别,其中337个稀有类别是未见过的,可以用来衡量开集的性能。

结果表8展示了将YOLO-World扩展用于开集实例分割的实验结果。具体来说,作者采用了两种微调策略:(1)仅微调分割头;(2)微调所有模块。在策略(1)下,微调后的YOLO-World仍然保留了预训练阶段获得的零样本能力,使其能够在没有额外微调的情况下泛化到未见过的类别。策略(2)使YOLO-World更好地适应LVIS数据集,但它可能会导致零样本能力的退化。

Visualizations

作者提供了在三种设置下预训练的YOLO-World-L的可视化结果:(a) 作者使用LVIS类别进行零样本推理;(b) 作者输入带有细粒度类别和属性的定制提示;(c) 指代检测。这些可视化还表明,YOLO-World在开集场景中具有很强的泛化能力,并伴有指代能力。

在LVIS上的零样本推理。图5展示了基于LVIS类别生成的可视化结果,这些结果是预先训练的YOLO-World-L以零样本方式生成的。预先训练的YOLO-World展现了强大的零样本迁移能力,并能够尽可能地检测图像中的多个目标。

使用用户词汇进行推理。在图6中,作者探索了用作者定义的类别进行YOLO-World检测的能力。可视化结果表明,预训练的YOLO-World-L也具备以下能力:(1)细粒度检测(即,检测一个物体的部分)和(2)细粒度分类(即,区分不同子类别的物体)。

参照目标检测。在图7中,作者利用一些描述性(区分性)名词短语作为输入,例如“站立的人”,来探究模型是否能够定位图像中与给定输入相匹配的区域或目标。可视化结果显示了这些短语及其对应的边界框,证明了预训练的YOLO-World具有参照或定位的能力。这种能力可以归功于作者提出的大规模训练数据的预训练策略。

5 Conclusion

作者提出了YOLO-World,这是一个尖端的实时开集检测器,旨在提高现实世界应用中的效率和开集能力。在本文中,作者将流行的YOLO架构重新塑造为视觉-语言YOLO架构,用于开集的预训练和检测,并提出了RepVL-PAN,它将视觉和语言信息与网络连接起来,并可以重新参数化以实现高效部署。

作者进一步提出了有效的预训练方案,包括检测、接地和图像-文本数据,以赋予YOLO-World强大的开集检测能力。实验可以证明YOLO-World在速度和开集性能方面的优越性,并指出视觉-语言预训练对小模型的有效性,这对未来研究具有启发意义。作者希望YOLO-World可以作为解决现实世界开集检测问题的新基准。

Appendix A Additional Details

Re-parameterization for RepVL-PAN

Fine-tuning Details.

在将YOLO-World迁移到COCO 目标检测时,作者去除了所有的T-CSPLayers和图像池化注意力机制,因为COCO仅包含80个类别,并且对视觉语言交互的依赖相对较低。

在微调过程中,作者使用预训练权重来初始化YOLO-World。微调的学习率设置为0.0002,权重衰减设置为0.05。微调之后,作者预先计算给定COCO类别的类别文本嵌入,并将嵌入存储到分类层的权重中。

Appendix B Automatic Labeling on Large-scale Image-Text Data

在本节中,作者详细介绍了如何使用大规模图像-文本数据对区域-文本对进行标记,例如CC3M。整个标记流程如图8所示,主要包括三个步骤,即:(1)提取物体名词,(2)伪标记,和(3)过滤。如第3.4节所讨论,作者采用简单的n-gram算法从标题中提取名词。

上述提到的阈值是根据部分标注结果的实证设定的,整个流程是自动的,无需人工验证。最后,这些标注样本被用于对YOLO-World进行预训练。作者将提供CC3M的伪标注,以供进一步研究。

Appendix C Pre-training YOLO-World at Scale

当预训练小型模型时,例如YOLO-World-S,作者自然会问这样一个问题:小型模型具有多大能力,小型模型需要多少训练数据或者需要什么类型的数据?为了回答这个问题,作者利用不同数量的伪标记区域-文本对来预训练YOLO-World。

然而,为小型模型使用细粒度标注(GoldG)可以提供显著的改进,这表明大规模高质量标注数据可以显著增强小型模型的能力。并且正文中表3已经显示,使用细标注数据和伪标注数据的组合进行预训练可以表现得更好。作者将在未来的工作中探索更多关于预训练小型模型或YOLO检测器所需的数据。

论文链接:https://arxiv.org/abs/2401.17270

代码链接:https://github.com/AILab-CVC/YOLO-World

​https://github.com/ultralytics/ultralytics​

项目主页: https://www.yoloworld.cc/

YOLO-World亮点

  • YOLO-World是下一代YOLO检测器,旨在实时开放词汇对象检测。
  • YOLO-World在大规模视觉语言数据集上进行了预训练,包括Objects 365,GQA,Flickr 30 K和CC 3 M,这使得YOLO-World具有强大的zero-shot开集Capbility与Grounding能力
  • YOLO-World实现了快速的推理速度;可以对用户给定词汇,所提重新参数化技术进一步加速推理和部署;

YOLO-World方案

上手测试

官方YOLO-World是基于mmyolo, mmdetection实现的,但U1S1,mm系列对于入门确实不错,但对于新开源算法上手测试真心难用,毒瘤啊[mmcv的ops这个鬼东西啊]~好消息来了!ultralytics支持YOLO-World了,可以直接通过ultralytics库来玩YOLO-world了使用方式简单到了极致,几行命令即可,还不需要安装一大堆的mm包,不需要编译各种无关op,牛逼克拉斯~

from ultralytics import YOLOWorld  
  
# Initialize a YOLO-World model  
model = YOLOWorld('yolov8s-world.pt')    
  
# Execute inference with the YOLOv8s-world on the specified image  
results = model.predict('bus.jpg')  
  
# Show results  
results[0].show()

就是这么的简单好用,两行代码完成测试!

那么,YOLO-World的Prompts功能该如何测试呢?同样非常简单,新增一行代码即可,代码如下:

from ultralytics import YOLOWorld  
  
# Initialize a YOLO-World model  
model = YOLOWorld('yolov8s-world.pt')    
  
# Define custom classes  
model.set_classes(["person"])  
      
# Execute inference with the YOLOv8s-world on the specified image  
results = model.predict('bus.jpg')  
  
# Show results  
results[0].show()

就这么一行代码改动,YOLO-World就变成了行人检测器,

当然,你还可以把它变成bus检测器,效果如下

不得不说,YOLO-World进一步释放了检测器的可玩性,不仅可以搞通用检测,还可以玩限定场景检测,关键速度还贼快,还等什么呢,速速试玩咯

1.3 YOLO-S

研究者提出了YOLO-S,一个简单、快速、高效的网络。它利用了一个小的特征提取器,以及通过旁路和级联的跳过连接,以及一个重塑直通层来促进跨网络的特征重用,并将低级位置信息与更有意义的高级信息相结合。

小目标检测仍然是一项具有挑战性的任务,尤其是在为移动或边缘应用寻找快速准确的解决方案时。在下次分享中,有研究者提出了YOLO-S,一个简单、快速、高效的网络。它利用了一个小的特征提取器,以及通过旁路和级联的跳过连接,以及一个重塑直通层来促进跨网络的特征重用,并将低级位置信息与更有意义的高级信息相结合。

航空图像中的小目标检测已经成为当今研究的热点。事实上,最近出现的无人机等数据赋能技术为广泛的客户群提供了一种具有成本效益的解决方案,根据相机轴、飞行器高度和使用的胶片类型,满足了广泛且几乎无限的用户需求。

此外,来自卫星或无人机传感器的公开可用车辆数据的日益可用性推动了该领域的研究。然而,图像中车辆的低分辨率、微小目标的较差特征、车辆类型、尺寸和颜色的可变性,以及杂乱背景或干扰大气因素的存在,仍然对卷积神经网络的车辆检测率提出了挑战。

此外,集装箱、建筑物或路标等令人困惑的物体的出现可能会增加误报的可能性。此外,在准确性和延迟时间之间进行合理的权衡是必要的。主流的目标检测器需要大量内存,通常只能在集中式高性能平台中执行。特别地,two-stage检测器不适合实时检测,而单级检测器仅在强大的资源上提供实时性能。它们中没有一个是为小目标检测而充分定制的。此外,由于数据处理成本更低、速度更快、与远程服务器的数据交换不可靠或存在安全和隐私问题,许多工业应用程序要求在靠近数据源的边缘设备上本地部署CNNs,然而这种设备的特征通常是在性能、成本等方面硬件资源有限,并且不包括GPU。因此,快速和轻量级的CNNs是强制性的,同时即使在小目标上也能保持令人满意的准确性。Tiny-YOLOv3不能保证足够的性能,因为其主干提取的特征很差,并且其输出尺度很粗糙。

其他研究工作则以准确性换取速度。在[Research on Airplane and Ship Detection of Aerial Remote Sensing Images Based on Convolutional Neural Network]中,第四个输出尺寸104×104被添加到YOLOv3中,以减少感受野,在DOTA(航空图像中对象设计的数据集)的基础上获得了3%的mAP改进,尽管推理较慢。由于YOLOv3主要检测规模为52×52的小目标。[.In Proceedings of the International Conference on AI and Big Data Application]提出了基于两个输出52×52和104×104的YOLO-E,并实现了一个双向残差子模块,以减少网络深度。它们还通过用GIoU取代并集交集(IoU)度量,并在YOLOv3损失函数中添加新的项1-GIoU,提高了对目标位置的敏感性。在VEDAI上,它获得了91.2%的mAP,几乎比YOLOv3准确五分之一,慢6.7%。在[Robust Vehicle Detection in Aerial Images Based on Cascaded Convolutional Neural Networks]中,提出了一种基于VGG16架构的级联检测器,其在VEDAI和Munich数据集上的性能优于Faster R-CNN,但推理速度要慢20-30%。此外,低分辨率航空图像由于其外观模糊性和与背景的相似性,使从车辆中提取有意义的特征变得更加困难。在[Joint-SRVDNet: Joint Super Resolution and Vehicle Detection Network]中,证明了两个超分辨率和检测网络的联合学习可以在超分辨率图像中实现更有意义的目标和更高的感知质量,这又导致检测任务的精度提高,并且在低分辨率航空图像上的性能接近于用相应的高分辨率图像馈送的现有技术方法。为了解决这个问题,其提出了一种联合超分辨率和车辆检测网络(Joint SRVDNet),该网络利用了两个相互关联的超分辨率和检测任务的互补信息。联合SRVDNet由两个主要模块组成:用于4×上采样因子的图像超分辨率的多尺度MsGAN和用于车辆检测的YOLOv3。具体而言,作者证明了两个网络的联合学习允许在超分辨率图像中获得更有意义的目标和更高的感知质量,这反过来又提高了探测任务的准确性,并提高了低分辨率航空图像的性能,接近于用相应的高分辨率航空图像提供的现有最先进的方法。

框架详细分析

研究者介绍了AIRES(cAr detectIon fRom-hElicopter imagesS),这是一个新的车辆数据库,由1920×1080分辨率的航空全高清(FHD)图像组成,由WESCAM MX-15 EO/IR成像系统传输,该系统放置在多传感器四轴陀螺稳定炮塔系统中,安装在载人警用直升机AW169的前端。直升机在近300米至1000米的不同高度飞行,不同的摄像机角度从约5°至80°不等。这些图像是2019年6月至9月在两个不同的地理区域拍摄的:意大利北部的伦巴第大区和挪威的奥斯陆市。该数据集由1275张用LabelImg软件[36]注释的图像组成,包含15247个注释的地面实况(GT)对象,分为八类:面包车、卡车、汽车、摩托车、人、其他、船和公共汽车。统计数据汇总在表1中:大多数类别是汽车,而人口较少的类别是摩托车,占0.5%,其他类别占0.8%,后者包括推土机和建筑工地使用的其他地面移动车辆。

 Some images of the AIRES dataset

在这项工作中,提出了两种新的类YOLO架构:YOLO-L和YOLO-S,其架构如下图所示。

关于所提出的CNN的全部细节见下表,其中还报告了每层的感受野和累积步幅。假设输入图像的大小调整为默认大小416×416。YOLO-L由于推理速度有限,仅适用于高功率硬件上的离线处理,因此主要用于基准测试。YOLO-S,或YOLO-small,是为在边缘设备上部署高效、轻量级和精确的网络而提出的。 

下表提供了进一步的细节,其中将所提出的网络与其他最先进的检测器在参数数量、体积、BFLOP和架构特性方面进行了比较。 

我们以YOLO-S为例,如上图b所示,是一个微小而快速的网络,它利用图c所示的特征融合和重塑穿透层的概念,将早期细粒度特征图的精确位置信息与分辨率较低的深层特征图的有意义语义信息相结合。基本上,它基于Darknet20主干,在特征提取阶段用交错卷积层和残差单元取代Tiny-YOLOv3的最大池化层,以减少下采样期间的信息损失,并有效地增加感受野。由七个残差块组成的轻量级主干还可以避免对小规模检测到的目标进行无用的卷积操作,否则在更深的架构中,这可能会导致在多次下采样后只剩下几个像素的最终特征此外,YOLO-S采用了一个具有单个输出规模52×52的head subnet和一个仅由4个交替卷积层1×1和3×3组成的较小卷积集,而不是YOLO-L和YOLOv3中的6个,以加快推理。这导致输出的感受野大到101×101,一旦源图像被重新缩放到网络预期的大小,就足以获得目标周围有意义的上下文信息。

最后,通过横向连接主干的第八层、第十三层和第十九层,分别对应于4×、8×和16×下采样的特征图,实现了跳跃连接,以提取更稳健的定位特征。由于这种特征图表现出不同的分辨率,因此将上采样应用于第十九层,并将整形应用于第八层,以在级联之前将每个尺寸与形状52×52相匹配。

总体而言,YOLO-S的模型体积比YOLOv3缩小了87%(YOLO-S尺寸仅为YOLOv3的7.9%),并且包含了近7.853M的可训练参数,因此甚至比Tiny-YOLOv3轻10%。此外,它需要34.59个BFLOP,接近SlimYOLOv3-SPP3-50,几乎是YOLOv3的一半,如上表所示。然而,在实验中,所提出的模型YOLO-S在准确性方面优于YOLOv3。

实验及可视化

首先,通过对每个类别进行分层抽样,在训练(70%)和测试(30%)中对数据集进行随机分割。然后,为了丰富模型学习过程中可用的统计信息,启用了标准的数据增强技术,包括水平翻转、调整大小、裁剪和亮度、对比度、饱和度和色调的随机失真。然而,由于缺乏数据而导致的过度拟合问题往往无法通过数据扩充方法得到有效解决,尤其是对于少数类。

因此,采用了所谓的“迁移学习”技术,以便利用可在公开数据库上获得的知识。这对准确性尤其有利:提取初步特征的基础任务与感兴趣的目标任务越相似,可达到的准确性就越高。具体如下图:

Comparative results of experiments 1 and 2 on AIRES dataset 

(a) YOLOv3; (b) Tiny-YOLOv3; (c) [ A Simple and Efficient Network for Small Target Detection], (d) YOLO-L; (e) YOLO-S  

1.4 Yolo-Fastest

还是说个工业级轻量的哦~  

开源代码库先行:https://github.com/dog-qiuqiu/Yolo-Fastest

目标检测是现在最热门的研究课题,也一直是工业界重点研究的对象,最近几年内,也出现了各种各样的检测框架,所属于YOLO系列是最经典也是目前被大家认可使用的检测框架。

今天说的这个系列模型,模型非常小、目前最快的YOLO算法——大小只有1.4MB,单核每秒148帧,在一些移动设备上部署特别容易。具体测试效果如下:

框架介绍

简单使用了下Yolo-Fastest,感觉不是很习惯使用了,可能好就不用darknet框架,但是上手还是比较容易,github也有简单教程:

测试Demo的方式也有:

Demo on image input

# *Note: change .data , .cfg , .weights and input image file in image_yolov3.sh for Yolo-Fastest-x1, Yolov3 and Yolov4
sh image_yolov3.sh

Demo on video input

# *Note: Use any input video and place in the data folder or use 0 in the video_yolov3.sh for webcam
# *Note: change .data , .cfg , .weights and input video file in video_yolov3.sh for Yolo-Fastest-x1, Yolov3 and Yolov4
sh video_yolov3.sh
  • 中文介绍:https://zhuanlan.zhihu.com/p/234506503
  • 与AlexeyAB/darknet相比,此版本darknet修复了一些老架构GPU中分组卷积推理异常耗时的问题(例如1050ti:40ms->4ms加速10倍),强烈推荐使用这个 训练模型的仓库框架
  • Darknet CPU推理效率优化不好,不推荐使用Darknet作为CPU端推理框架,推荐使用ncnn

自己尝试使用了下,确实darknet不是很友好,下次我试试NCNN的效果。下面是网络的参数:

Input                    data                     0 1 data -23330=4,3,320,320,3 0=320 1=320 2=3
Convolution              0_22                     1 1 data 0_22_bn_leaky -23330=4,3,160,160,8 0=8 1=3 3=2 4=1 5=1 6=216 9=2 -23310=1,1.000000e-01
Convolution              1_31                     1 1 0_22_bn_leaky 1_31_bn_leaky -23330=4,3,160,160,8 0=8 1=1 5=1 6=64 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     2_39                     1 1 1_31_bn_leaky 2_39_bn_leaky -23330=4,3,160,160,8 0=8 1=3 4=1 5=1 6=72 7=8 9=2 -23310=1,1.000000e-01
Convolution              3_48                     1 1 2_39_bn_leaky 3_48_bn -23330=4,3,160,160,4 0=4 1=1 5=1 6=32
Split                    3_48_bn_split            1 2 3_48_bn 3_48_bn_split_0 3_48_bn_split_1 -23330=8,3,160,160,4,3,160,160,4
Convolution              4_57                     1 1 3_48_bn_split_0 4_57_bn_leaky -23330=4,3,160,160,8 0=8 1=1 5=1 6=32 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     5_65                     1 1 4_57_bn_leaky 5_65_bn_leaky -23330=4,3,160,160,8 0=8 1=3 4=1 5=1 6=72 7=8 9=2 -23310=1,1.000000e-01
Convolution              6_74                     1 1 5_65_bn_leaky 6_74_bn -23330=4,3,160,160,4 0=4 1=1 5=1 6=32
Eltwise                  8_86                     2 1 6_74_bn 3_48_bn_split_1 8_86 -23330=4,3,160,160,4 0=1
Convolution              9_90                     1 1 8_86 9_90_bn_leaky -23330=4,3,160,160,24 0=24 1=1 5=1 6=96 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     10_98                    1 1 9_90_bn_leaky 10_98_bn_leaky -23330=4,3,80,80,24 0=24 1=3 3=2 4=1 5=1 6=216 7=24 9=2 -23310=1,1.000000e-01
Convolution              11_107                   1 1 10_98_bn_leaky 11_107_bn -23330=4,3,80,80,8 0=8 1=1 5=1 6=192
Split                    11_107_bn_split          1 2 11_107_bn 11_107_bn_split_0 11_107_bn_split_1 -23330=8,3,80,80,8,3,80,80,8
Convolution              12_116                   1 1 11_107_bn_split_0 12_116_bn_leaky -23330=4,3,80,80,32 0=32 1=1 5=1 6=256 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     13_124                   1 1 12_116_bn_leaky 13_124_bn_leaky -23330=4,3,80,80,32 0=32 1=3 4=1 5=1 6=288 7=32 9=2 -23310=1,1.000000e-01
Convolution              14_133                   1 1 13_124_bn_leaky 14_133_bn -23330=4,3,80,80,8 0=8 1=1 5=1 6=256
Eltwise                  16_145                   2 1 14_133_bn 11_107_bn_split_1 16_145 -23330=4,3,80,80,8 0=1
Split                    16_145_split             1 2 16_145 16_145_split_0 16_145_split_1 -23330=8,3,80,80,8,3,80,80,8
Convolution              17_149                   1 1 16_145_split_0 17_149_bn_leaky -23330=4,3,80,80,32 0=32 1=1 5=1 6=256 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     18_157                   1 1 17_149_bn_leaky 18_157_bn_leaky -23330=4,3,80,80,32 0=32 1=3 4=1 5=1 6=288 7=32 9=2 -23310=1,1.000000e-01
Convolution              19_166                   1 1 18_157_bn_leaky 19_166_bn -23330=4,3,80,80,8 0=8 1=1 5=1 6=256
Eltwise                  21_179                   2 1 19_166_bn 16_145_split_1 21_179 -23330=4,3,80,80,8 0=1
Convolution              22_183                   1 1 21_179 22_183_bn_leaky -23330=4,3,80,80,32 0=32 1=1 5=1 6=256 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     23_191                   1 1 22_183_bn_leaky 23_191_bn_leaky -23330=4,3,40,40,32 0=32 1=3 3=2 4=1 5=1 6=288 7=32 9=2 -23310=1,1.000000e-01
Convolution              24_200                   1 1 23_191_bn_leaky 24_200_bn -23330=4,3,40,40,8 0=8 1=1 5=1 6=256
Split                    24_200_bn_split          1 2 24_200_bn 24_200_bn_split_0 24_200_bn_split_1 -23330=8,3,40,40,8,3,40,40,8
Convolution              25_209                   1 1 24_200_bn_split_0 25_209_bn_leaky -23330=4,3,40,40,48 0=48 1=1 5=1 6=384 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     26_217                   1 1 25_209_bn_leaky 26_217_bn_leaky -23330=4,3,40,40,48 0=48 1=3 4=1 5=1 6=432 7=48 9=2 -23310=1,1.000000e-01
Convolution              27_226                   1 1 26_217_bn_leaky 27_226_bn -23330=4,3,40,40,8 0=8 1=1 5=1 6=384
Eltwise                  29_238                   2 1 27_226_bn 24_200_bn_split_1 29_238 -23330=4,3,40,40,8 0=1
Split                    29_238_split             1 2 29_238 29_238_split_0 29_238_split_1 -23330=8,3,40,40,8,3,40,40,8
Convolution              30_242                   1 1 29_238_split_0 30_242_bn_leaky -23330=4,3,40,40,48 0=48 1=1 5=1 6=384 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     31_250                   1 1 30_242_bn_leaky 31_250_bn_leaky -23330=4,3,40,40,48 0=48 1=3 4=1 5=1 6=432 7=48 9=2 -23310=1,1.000000e-01
Convolution              32_259                   1 1 31_250_bn_leaky 32_259_bn -23330=4,3,40,40,8 0=8 1=1 5=1 6=384
Eltwise                  34_273                   2 1 32_259_bn 29_238_split_1 34_273 -23330=4,3,40,40,8 0=1
Convolution              35_277                   1 1 34_273 35_277_bn_leaky -23330=4,3,40,40,48 0=48 1=1 5=1 6=384 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     36_285                   1 1 35_277_bn_leaky 36_285_bn_leaky -23330=4,3,40,40,48 0=48 1=3 4=1 5=1 6=432 7=48 9=2 -23310=1,1.000000e-01
Convolution              37_294                   1 1 36_285_bn_leaky 37_294_bn -23330=4,3,40,40,16 0=16 1=1 5=1 6=768
Split                    37_294_bn_split          1 2 37_294_bn 37_294_bn_split_0 37_294_bn_split_1 -23330=8,3,40,40,16,3,40,40,16
Convolution              38_303                   1 1 37_294_bn_split_0 38_303_bn_leaky -23330=4,3,40,40,96 0=96 1=1 5=1 6=1536 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     39_311                   1 1 38_303_bn_leaky 39_311_bn_leaky -23330=4,3,40,40,96 0=96 1=3 4=1 5=1 6=864 7=96 9=2 -23310=1,1.000000e-01
Convolution              40_320                   1 1 39_311_bn_leaky 40_320_bn -23330=4,3,40,40,16 0=16 1=1 5=1 6=1536
Eltwise                  42_332                   2 1 40_320_bn 37_294_bn_split_1 42_332 -23330=4,3,40,40,16 0=1
Split                    42_332_split             1 2 42_332 42_332_split_0 42_332_split_1 -23330=8,3,40,40,16,3,40,40,16
Convolution              43_336                   1 1 42_332_split_0 43_336_bn_leaky -23330=4,3,40,40,96 0=96 1=1 5=1 6=1536 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     44_344                   1 1 43_336_bn_leaky 44_344_bn_leaky -23330=4,3,40,40,96 0=96 1=3 4=1 5=1 6=864 7=96 9=2 -23310=1,1.000000e-01
Convolution              45_353                   1 1 44_344_bn_leaky 45_353_bn -23330=4,3,40,40,16 0=16 1=1 5=1 6=1536
Eltwise                  47_365                   2 1 45_353_bn 42_332_split_1 47_365 -23330=4,3,40,40,16 0=1
Split                    47_365_split             1 2 47_365 47_365_split_0 47_365_split_1 -23330=8,3,40,40,16,3,40,40,16
Convolution              48_369                   1 1 47_365_split_0 48_369_bn_leaky -23330=4,3,40,40,96 0=96 1=1 5=1 6=1536 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     49_377                   1 1 48_369_bn_leaky 49_377_bn_leaky -23330=4,3,40,40,96 0=96 1=3 4=1 5=1 6=864 7=96 9=2 -23310=1,1.000000e-01
Convolution              50_386                   1 1 49_377_bn_leaky 50_386_bn -23330=4,3,40,40,16 0=16 1=1 5=1 6=1536
Eltwise                  52_399                   2 1 50_386_bn 47_365_split_1 52_399 -23330=4,3,40,40,16 0=1
Split                    52_399_split             1 2 52_399 52_399_split_0 52_399_split_1 -23330=8,3,40,40,16,3,40,40,16
Convolution              53_403                   1 1 52_399_split_0 53_403_bn_leaky -23330=4,3,40,40,96 0=96 1=1 5=1 6=1536 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     54_411                   1 1 53_403_bn_leaky 54_411_bn_leaky -23330=4,3,40,40,96 0=96 1=3 4=1 5=1 6=864 7=96 9=2 -23310=1,1.000000e-01
Convolution              55_420                   1 1 54_411_bn_leaky 55_420_bn -23330=4,3,40,40,16 0=16 1=1 5=1 6=1536
Eltwise                  57_433                   2 1 55_420_bn 52_399_split_1 57_433 -23330=4,3,40,40,16 0=1
Convolution              58_437                   1 1 57_433 58_437_bn_leaky -23330=4,3,40,40,96 0=96 1=1 5=1 6=1536 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     59_445                   1 1 58_437_bn_leaky 59_445_bn_leaky -23330=4,3,20,20,96 0=96 1=3 3=2 4=1 5=1 6=864 7=96 9=2 -23310=1,1.000000e-01
Convolution              60_454                   1 1 59_445_bn_leaky 60_454_bn -23330=4,3,20,20,24 0=24 1=1 5=1 6=2304
Split                    60_454_bn_split          1 2 60_454_bn 60_454_bn_split_0 60_454_bn_split_1 -23330=8,3,20,20,24,3,20,20,24
Convolution              61_463                   1 1 60_454_bn_split_0 61_463_bn_leaky -23330=4,3,20,20,136 0=136 1=1 5=1 6=3264 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     62_471                   1 1 61_463_bn_leaky 62_471_bn_leaky -23330=4,3,20,20,136 0=136 1=3 4=1 5=1 6=1224 7=136 9=2 -23310=1,1.000000e-01
Convolution              63_480                   1 1 62_471_bn_leaky 63_480_bn -23330=4,3,20,20,24 0=24 1=1 5=1 6=3264
Eltwise                  65_492                   2 1 63_480_bn 60_454_bn_split_1 65_492 -23330=4,3,20,20,24 0=1
Split                    65_492_split             1 2 65_492 65_492_split_0 65_492_split_1 -23330=8,3,20,20,24,3,20,20,24
Convolution              66_496                   1 1 65_492_split_0 66_496_bn_leaky -23330=4,3,20,20,136 0=136 1=1 5=1 6=3264 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     67_504                   1 1 66_496_bn_leaky 67_504_bn_leaky -23330=4,3,20,20,136 0=136 1=3 4=1 5=1 6=1224 7=136 9=2 -23310=1,1.000000e-01
Convolution              68_513                   1 1 67_504_bn_leaky 68_513_bn -23330=4,3,20,20,24 0=24 1=1 5=1 6=3264
Eltwise                  70_526                   2 1 68_513_bn 65_492_split_1 70_526 -23330=4,3,20,20,24 0=1
Split                    70_526_split             1 2 70_526 70_526_split_0 70_526_split_1 -23330=8,3,20,20,24,3,20,20,24
Convolution              71_530                   1 1 70_526_split_0 71_530_bn_leaky -23330=4,3,20,20,136 0=136 1=1 5=1 6=3264 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     72_538                   1 1 71_530_bn_leaky 72_538_bn_leaky -23330=4,3,20,20,136 0=136 1=3 4=1 5=1 6=1224 7=136 9=2 -23310=1,1.000000e-01
Convolution              73_547                   1 1 72_538_bn_leaky 73_547_bn -23330=4,3,20,20,24 0=24 1=1 5=1 6=3264
Eltwise                  75_559                   2 1 73_547_bn 70_526_split_1 75_559 -23330=4,3,20,20,24 0=1
Split                    75_559_split             1 2 75_559 75_559_split_0 75_559_split_1 -23330=8,3,20,20,24,3,20,20,24
Convolution              76_563                   1 1 75_559_split_0 76_563_bn_leaky -23330=4,3,20,20,136 0=136 1=1 5=1 6=3264 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     77_571                   1 1 76_563_bn_leaky 77_571_bn_leaky -23330=4,3,20,20,136 0=136 1=3 4=1 5=1 6=1224 7=136 9=2 -23310=1,1.000000e-01
Convolution              78_580                   1 1 77_571_bn_leaky 78_580_bn -23330=4,3,20,20,24 0=24 1=1 5=1 6=3264
Eltwise                  80_593                   2 1 78_580_bn 75_559_split_1 80_593 -23330=4,3,20,20,24 0=1
Split                    80_593_split             1 2 80_593 80_593_split_0 80_593_split_1 -23330=8,3,20,20,24,3,20,20,24
Convolution              81_597                   1 1 80_593_split_0 81_597_bn_leaky -23330=4,3,20,20,136 0=136 1=1 5=1 6=3264 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     82_605                   1 1 81_597_bn_leaky 82_605_bn_leaky -23330=4,3,10,10,136 0=136 1=3 3=2 4=1 5=1 6=1224 7=136 9=2 -23310=1,1.000000e-01
Convolution              83_615                   1 1 82_605_bn_leaky 83_615_bn -23330=4,3,10,10,48 0=48 1=1 5=1 6=6528
Split                    83_615_bn_split          1 2 83_615_bn 83_615_bn_split_0 83_615_bn_split_1 -23330=8,3,10,10,48,3,10,10,48
Convolution              84_624                   1 1 83_615_bn_split_0 84_624_bn_leaky -23330=4,3,10,10,224 0=224 1=1 5=1 6=10752 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     85_632                   1 1 84_624_bn_leaky 85_632_bn_leaky -23330=4,3,10,10,224 0=224 1=3 4=1 5=1 6=2016 7=224 9=2 -23310=1,1.000000e-01
Convolution              86_641                   1 1 85_632_bn_leaky 86_641_bn -23330=4,3,10,10,48 0=48 1=1 5=1 6=10752
Eltwise                  88_653                   2 1 86_641_bn 83_615_bn_split_1 88_653 -23330=4,3,10,10,48 0=1
Split                    88_653_split             1 2 88_653 88_653_split_0 88_653_split_1 -23330=8,3,10,10,48,3,10,10,48
Convolution              89_657                   1 1 88_653_split_0 89_657_bn_leaky -23330=4,3,10,10,224 0=224 1=1 5=1 6=10752 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     90_665                   1 1 89_657_bn_leaky 90_665_bn_leaky -23330=4,3,10,10,224 0=224 1=3 4=1 5=1 6=2016 7=224 9=2 -23310=1,1.000000e-01
Convolution              91_674                   1 1 90_665_bn_leaky 91_674_bn -23330=4,3,10,10,48 0=48 1=1 5=1 6=10752
Eltwise                  93_686                   2 1 91_674_bn 88_653_split_1 93_686 -23330=4,3,10,10,48 0=1
Split                    93_686_split             1 2 93_686 93_686_split_0 93_686_split_1 -23330=8,3,10,10,48,3,10,10,48
Convolution              94_690                   1 1 93_686_split_0 94_690_bn_leaky -23330=4,3,10,10,224 0=224 1=1 5=1 6=10752 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     95_698                   1 1 94_690_bn_leaky 95_698_bn_leaky -23330=4,3,10,10,224 0=224 1=3 4=1 5=1 6=2016 7=224 9=2 -23310=1,1.000000e-01
Convolution              96_707                   1 1 95_698_bn_leaky 96_707_bn -23330=4,3,10,10,48 0=48 1=1 5=1 6=10752
Eltwise                  98_719                   2 1 96_707_bn 93_686_split_1 98_719 -23330=4,3,10,10,48 0=1
Split                    98_719_split             1 2 98_719 98_719_split_0 98_719_split_1 -23330=8,3,10,10,48,3,10,10,48
Convolution              99_723                   1 1 98_719_split_0 99_723_bn_leaky -23330=4,3,10,10,224 0=224 1=1 5=1 6=10752 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     100_731                  1 1 99_723_bn_leaky 100_731_bn_leaky -23330=4,3,10,10,224 0=224 1=3 4=1 5=1 6=2016 7=224 9=2 -23310=1,1.000000e-01
Convolution              101_740                  1 1 100_731_bn_leaky 101_740_bn -23330=4,3,10,10,48 0=48 1=1 5=1 6=10752
Eltwise                  103_752                  2 1 101_740_bn 98_719_split_1 103_752 -23330=4,3,10,10,48 0=1
Split                    103_752_split            1 2 103_752 103_752_split_0 103_752_split_1 -23330=8,3,10,10,48,3,10,10,48
Convolution              104_756                  1 1 103_752_split_0 104_756_bn_leaky -23330=4,3,10,10,224 0=224 1=1 5=1 6=10752 9=2 -23310=1,1.000000e-01
ConvolutionDepthWise     105_764                  1 1 104_756_bn_leaky 105_764_bn_leaky -23330=4,3,10,10,224 0=224 1=3 4=1 5=1 6=2016 7=224 9=2 -23310=1,1.000000e-01
Convolution              106_773                  1 1 105_764_bn_leaky 106_773_bn -23330=4,3,10,10,48 0=48 1=1 5=1 6=10752
Eltwise                  108_784                  2 1 106_773_bn 103_752_split_1 108_784 -23330=4,3,10,10,48 0=1
Split                    108_784_split            1 4 108_784 108_784_split_0 108_784_split_1 108_784_split_2 108_784_split_3 -23330=16,3,10,10,48,3,10,10,48,3,10,10,48,3,10,10,48
Pooling                  109_788                  1 1 108_784_split_0 109_788 -23330=4,3,10,10,48 1=3 3=1 5=1
Pooling                  111_795                  1 1 108_784_split_1 111_795 -23330=4,3,10,10,48 1=5 3=2 5=1
Pooling                  113_802                  1 1 108_784_split_2 113_802 -23330=4,3,10,10,48 1=9 3=4 5=1
Concat                   114_806                  4 1 113_802 111_795 109_788 108_784_split_3 114_806 -23330=4,3,10,10,192
Convolution              115_811                  1 1 114_806 115_811_bn_leaky -23330=4,3,10,10,96 0=96 1=1 5=1 6=18432 9=2 -23310=1,1.000000e-01
Split                    115_811_bn_leaky_split   1 2 115_811_bn_leaky 115_811_bn_leaky_split_0 115_811_bn_leaky_split_1 -23330=8,3,10,10,96,3,10,10,96
ConvolutionDepthWise     116_819                  1 1 115_811_bn_leaky_split_0 116_819_bn_leaky -23330=4,3,10,10,96 0=96 1=5 4=2 5=1 6=2400 7=96 9=2 -23310=1,1.000000e-01
Convolution              117_828                  1 1 116_819_bn_leaky 117_828_bn -23330=4,3,10,10,96 0=96 1=1 5=1 6=9216
ConvolutionDepthWise     118_836                  1 1 117_828_bn 118_836_bn_leaky -23330=4,3,10,10,96 0=96 1=5 4=2 5=1 6=2400 7=96 9=2 -23310=1,1.000000e-01
Convolution              119_845                  1 1 118_836_bn_leaky 119_845_bn -23330=4,3,10,10,96 0=96 1=1 5=1 6=9216
Convolution              120_854                  1 1 119_845_bn 120_854 -23330=4,3,10,10,18 0=18 1=1 5=1 6=1728
Interp                   123_882                  1 1 115_811_bn_leaky_split_1 123_882 -23330=4,3,20,20,96 0=1 1=2.000000e+00 2=2.000000e+00
Concat                   124_885                  2 1 123_882 80_593_split_1 124_885 -23330=4,3,20,20,120
ConvolutionDepthWise     125_888                  1 1 124_885 125_888_bn_leaky -23330=4,3,20,20,120 0=120 1=5 4=2 5=1 6=3000 7=120 9=2 -23310=1,1.000000e-01
Convolution              126_897                  1 1 125_888_bn_leaky 126_897_bn -23330=4,3,20,20,120 0=120 1=1 5=1 6=14400
ConvolutionDepthWise     127_905                  1 1 126_897_bn 127_905_bn_leaky -23330=4,3,20,20,120 0=120 1=5 4=2 5=1 6=3000 7=120 9=2 -23310=1,1.000000e-01
Convolution              128_914                  1 1 127_905_bn_leaky 128_914_bn -23330=4,3,20,20,120 0=120 1=1 5=1 6=14400
Convolution              129_922                  1 1 128_914_bn 129_922 -23330=4,3,20,20,18 0=18 1=1 5=1 6=2160
Yolov3DetectionOutput    detection_out            2 1 120_854 129_922 output -2

升级版:Yolo-FastestV2 

Yolo-Fastest注重的就是单核的实时推理性能,在满足实时的条件下的低CPU占用,不单单只是能在手机移动端达到实时,还要在RK3399,树莓派4以及多种Cortex-A53低成本低功耗设备上满足一定实时性,毕竟这些嵌入式的设备相比与移动端手机要弱很多,但是使用更加广泛,成本更加低廉。

总结下新框架的特性:

  •  简单、快速、紧凑、易于移植
  •  资源占用少,单核性能优异,功耗更低
  •  更快更小:以0.3%的精度损失换取30%的推理速度提升,减少25%的参数量
  •  训练速度快,算力要求低,训练只需要3GB显存,gtx1660ti训练COCO 1 epoch仅需4分钟

首先模型的backbone替换为了shufflenetV2,相比原先的backbone,访存减少了一些,更加轻量,其次Anchor的匹配机制,参考的YOLOV5;其次是检测头的解耦合,这个也是参考YoloX的,将检测框的回归,前景背景的分类以及检测类别的分类有yolo的一个特征图解耦成3个不同的特征图,其中前景背景的分类以及检测类别的分类采用同一网络分支参数共享。最后将检测类别分类的loss由sigmoid替换为softmax。

Yolo-FastestV2还是只有输出11x11和22x22两个尺度的检测头,因为发现在coco上三个检测头(11x11,22x22,44x44)和两个检测头(11x11,22x22)的精度无太大差异,个人感觉原因如下:

  • backbone对应44x44分辨率的特征图太少
  • 正负anchor的严重不平衡
  • 小物体属于难样本对于模型学习能力要求高

大家还是关心最终的实验结果:

测试平台:Mate 30 Kirin 990 CPU,NCNN

与yolox和nanoDet的对比,精度肯定比不过, 不过速度会快三倍,那体积只有 1.3M 的 PP-YOLO Tiny,用int8的量化后体积和yolo-fastest的fp32的体积比,YOLO-FastestV2 int8可是仅仅只有250kb,虽然没跑过PP-YOLO Tiny,但是应该还是比他快。所以,模型的选择还是看大家需求。RK3399和树莓派4搭配ncnn bf16s,YOLO-FastestV2 是可以实时的。 完事~~ 是不是还行大伙去试验哦~~  

1.5 PP-YOLOE

又来了个 最强王者吗 说是比yolo7还厉害啊 哈哈 百度飞桨产品。。  也许真的很强~~

精度54.7mAP,相较YOLOv7提升1.9%

L版本端到端推理速度42.2FPS

训练速度提升3.75倍

COCO数据集仅需20epoch即可达到50.0mAP

下游任务泛化性最高提升8%

10+即开即用多端部署Demo

PP-YOLOE+是基于飞桨云边一体高精度模型PP-YOLOE迭代优化升级的版本,具备以下特点:

  • 超强性能 

备注:以上速度为端到端推理速度,包含数据解码+数据预处理+模型预测+后处理计算;均在v100上测试所得,V100 + CUDA11.2 + cudnn8.2.0 + TRT8.0.1.6

  • 训练收敛加速:使用Objects365预训练模型,减少训练轮数,训练收敛速度提升3.75倍。
  • 下游任务泛化性显著提升:在农业、夜间安防、工业等不同场景数据集上验证,精度最高提升8.1%。
  • 高性能部署能力:本次升级PP-YOLOE+支持多种部署方式,包括Python/C++、Serving、ONNX Runtime、ONNX-TRT、INT8量化等部署能力。

超强性能与超高泛化性使得PP-YOLOE+助力开发者在最短时间最少量数据上能得到最优效果

模型下载与完整教程请见PP-YOLOE+:

​https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.5/configs/ppyoloe ​

PP-YOLOE是一款高精度推理速度快的检测模型,包含骨干网络CSPRepResNet特征融合CSPPAN轻量级ET-Head和改进的动态匹配算法TAL(Task Alignment Learning)等模块, 并且根据不同的应用场景设计了一系列模型,即s/m/l/x。

PP-YOLOE的全系列模型从精度速度性价比来看达到工业界最优。具体来说,PP-YOLOE-l在COCO test-dev上AP可达51.4,在V100上速度可达78.1 FPS,使用TensorRT FP16进行推理,在V100上速度可达149FPS

PP-YOLOE-l相较于PP-YOLOv2精度提升1.9AP、速度提升13.35%,相对于YOLOX-l精度提升1.3AP、速度提升24.96%

此外,PP-YOLOE还避免使用诸如可变形卷积或者Matrix NMS之类的特殊算子,使PP-YOLOE全系列模型能轻松地部署在NVIDIA V100和T4这样的云端GPU架构、Jetson系列的移动端GPU和高性能的FPGA开发板上。

具体的结构包括以下三大部分:

可扩展的backbone和neck

我们设计了CSPRepResNet作为backbone, neck部分也采用了新设计的CSPPAN结构,backbone和neck均以我们提出的CSPRepResStage为基础模块。新的backbone和neck在增强模型表征能力的同时提升了模型的推理速度,并且可以通过width multiplier和depth multiplier灵活地配置模型的大小。

TAL(Task Alignment Learning)

为了进一步提升模型的精度,我们选用了TOOD [1]中的动态匹配算法策略TAL。TAL同时考虑分类和回归,使得匹配结果同时获得了最优的分类和定位精度。

Efficient Task-aligned head

检测head方面,我们在TOOD的T-head基础上进行改进。

首先,使用ESE block替换掉了原文中比较耗时的layer attention,使得模型在保证精度不变的同时提升了速度。

其次,由于T-head使用了可变形卷积算子,对硬件部署不友好,我们在分类分支使用shortcut替换cls-align模块,回归分支使用积分层替换掉含有可变形卷积的reg-align模块,以上两个改进使得head变得更为高效、简洁且易部署。

最终,我们进一步使用VFL(VariFocal Loss)替换BCE作为分类分支Loss,达到了速度精度双高的目的。

 算法升级深度解读

本次PP-YOLOE+升级主要内容:

  • 升级一:强大的Objects365预训练模型、升级版backbone等改动大幅提升PP-YOLOE系列模型的精度;
  • 升级二:优化预处理,提升模型端到端推理速度,更贴近用户使用的真实场景;
  • 升级三:完善多种环境下的推理部署能力。

精度

首先,我们使用Objects365大规模数据集对模型进行了预训练。Objects365数据集含有的数据量可达百万级,在大数据量下的训练可以使模型获得更强大的特征提取能力、更好的泛化能力,在下游任务上的训练可以达到更好的效果。

其次,我们在RepResBlock中的1x1卷积上增加了一个可学习的权重alpha,进一步提升了backbone的表征能力,获得了不错的效果提升。最后,我们调整了NMS的参数,在COCO上可以获得更好的评估精度。

训练速度

基于Objects365的预训练模型,将学习率调整为原始学习率的十分之一,训练的epoch从300降到了80,在大大缩短了训练时间的同时,获得了精度上的提升。

端到端推理速度

我们精简了预处理的计算方式,由于减均值除方差的方式在CPU上极其耗时,所以我们在优化时直接去除掉了这部分的预处理操作,使得PP-YOLOE+系列模型在端到端的速度上能获得40%以上的加速提升。

下游泛化性增强

我们验证了PP-YOLOE+模型强大的泛化能力,在农业、低光、工业等不同场景下游任务检测效果稳定提升。

农业数据集采用Embrapa WGISD,该数据集用于葡萄栽培中基于图像的监测和现场机器人技术,提供了来自5种不同葡萄品种的实地实例。

  • 链接​​ https://github.com/thsant/wgisd​​

低光数据集使用ExDark,该数据集是一个专门在低光照环境下拍摄出针对低光目标检测的数据集,包括从极低光环境到暮光环境等10种不同光照条件下的图片。

  • 链接​​ https://github.com/cs-chan/Exclusively-Dark-Image-Dataset​​

工业数据集使用PKU-Market-PCB,该数据集用于印刷电路板(PCB)的瑕疵检测,提供了6种常见的PCB缺陷。

  • 链接​​ https://robotics.pkusz.edu.cn/resources/dataset/​​

 精度

可视化效果

全面升级的部署支持

在推理部署方面,本次升级给大家带来了较为完备的部署能力,包括Python、C++、Serving、ONNX Runtime、ONNX-TRT、INT8量化等部署能力。具体的使用文档可以到PaddleDetection的GitHub上获取。

  • 文档链接​​ https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.5/deploy​​

总的来说,PP-YOLOE+希望真正的站在用户的角度去解决训练慢泛化性差部署难的问题。通过使用大规模数据集Objects365对模型进行预训练,使得模型在下游任务上表现更鲁棒泛化能力更强。通过优化推理过程,完善推理链条,使得PP-YOLOE+不但在端到端预测速度上得到极大的提升,还拓展了Python、C++、Serving、ONNX Runtime以及TensorRT等多种推理环境下的部署能力,提升模型可扩展性,从而提升用户的使用体验。

飞桨端到端开发套件 PaddleDetection

PaddleDetection为基于飞桨的端到端目标检测套件,内置30+模型算法300+预训练模型,覆盖目标检测实例分割跟踪关键点检测等方向,其中包括服务器端和移动端高精度轻量化产业级SOTA模型冠军方案和学术前沿算法,并提供即插即用的垂类场景预训练模型覆盖人车等20+场景,提供配置化的网络模块组件、十余种数据增强策略和损失函数等高阶优化支持和多种部署方案,在打通数据处理、模型开发、训练、压缩、部署全流程的基础上,提供丰富的案例及教程,加速算法产业落地应用。   

项目链接​​  https://github.com/PaddlePaddle/PaddleDetection​​

1.6 Yolo-Z

yolo太卷了...这里是改进的YOLOv5用于小目标检测

论文地址:https://arxiv.org/pdf/2112.11798.pdf

随着自动驾驶汽车和自动驾驶赛车越来越受欢迎,对更快、更准确的检测器的需求也在增加。

虽然我们的肉眼几乎可以立即提取上下文信息,即使是在很远的地方,但图像分辨率和计算资源的限制使得检测较小的对象(即在输入图像中占据小像素区域的对象)对机器来说是一项真正具有挑战性的任务和广阔的研究领域。

本研究探讨了如何修改流行的YOLOv5目标检测器以提高其在检测较小对象方面的性能,特别是在自主赛车中的应用。为了实现这一点,研究者研究了替换模型的某些结构元素(以及它们的连接和其他参数)如何影响性能和推理时间。为此,研究者提出了一系列不同尺度的模型,将其命名为“YOLO-Z”,当以50%的IoU检测较小的物体时,这些模型的mAP提升高达6.9%,而代价与原始YOLOv5相比,推理时间增加了 3ms。

研究者们的目标是为未来的研究提供有关调整流行检测器(例如YOLOv5)以解决特定任务的潜力的信息,并提供有关特定更改如何影响小物体检测的见解。这些发现应用于更广泛的自动驾驶汽车环境,可以增加此类系统可用的环境信息量。

检测图像中的小物体具有挑战性,主要是由于模型可用的分辨率和上下文信息有限。许多实现目标检测的系统都以实时速度执行此操作,从而对计算资源提出了特定要求,尤其是在处理要在捕获图像的同一设备上进行时。许多自动驾驶车辆系统就是这种情况,其中车辆本身实时捕获和处理图像,通常是为了通知其下一步行动。在这种情况下,检测较小的物体意味着检测距离汽车较远的物体,从而可以更早地检测到这些物体,有效地扩大了车辆的检测范围。这一特定领域的改进将更好地为系统提供信息,使其能够做出更稳健和可行的决策。由于目标检测器的性质,较小对象的细节在其卷积主干的每一层处理时失去了意义。在本研究中,“小物体”是指在输入图像中占据小像素区域的物体。

目前,已经有很多研究者努力改进对较小物体的检测[如An Evaluation of Deep Learning Methods for Small Object Detection],但许多都围绕着图像的特定区域进行处理或集中在two-stages检测器周围,这些检测器以实现以推理时间为代价获得更好的性能,使其不太适合实时应用程序。这也是为此类应用开发了如此多的单级检测器的原因。增加输入图像分辨率是绕过此问题的另一种明显方法,但会导致处理时间显着增加。

已经投入了一些努力来开发将处理导向输入图像的某些区域的系统,这使我们能够调整分辨率,从而绕过定义对象的像素较少的限制。然而,这种方法更适合对时间不敏感的系统,因为它们需要多次通过不同规模的网络。这种更加关注特定尺度的想法仍然可以激发我们处理某些特征图的方式。此外,通过查看如何处理特征图而不是仅仅修改主干可以学到很多东西。不同类型的特征金字塔网络(FPN)可以不同地聚合特征图,以不同方式增强主干。这种技术被证明是相当有效的。

YOLOv5框架

YOLOv5为其模型提供了四种不同的尺度,S、M、L和X,分别代表Small、Medium、Large和Xlarge。这些比例中的每一个都将不同的乘数应用于模型的深度和宽度,这意味着模型的整体结构保持不变,但每个模型的大小和复杂性都会按比例缩放。

在实验中,我们在所有尺度上分别对模型结构进行更改,并将每个模型视为不同的模型,以评估其效果。为了设置基线,我们训练并测试了YOLOv5四个未修改版本。然后,分别测试了对这些网络的更改,以便根据我们的基线结果分别观察它们的影响。在进入下一阶段时,那些似乎对提高准确性或推理时间没有贡献的技术和结构被过滤掉了。然后,尝试了所选技术的组合。重复这个过程,观察某些技术是相互补充还是相互削弱,并逐渐增加更复杂的组合。

Proposed architectural changes

YOLOv5使用yaml文件来指示解析器如何构建模型。我们使用此设置编写自己的高级指令,说明如何构建模型的不同构建块以及使用哪些参数,从而修改其结构。为了实现新结构,我们安排并为每个构建块或层提供参数,并在必要时指示解析器如何构建它。用我们的话来说,我们利用了YOLOv5提供的基础和实验网络块,同时在需要的地方实现了额外的块来模拟所需的结构。

其中,neck的修改:

在这项工作中,将当前的Pan-Net[Path aggregation network for instance segmentation]简化为FPN,并将其替换为biFPN[EfficientDet: Scalable and Efficient Object Detection]。在这两种情况下,neck都保留了类似的功能,但复杂性有所不同,因此实现它们所需的层数和连接数也有所不同。

其他修改可见论文。

可以在包含性和排他性的结构方面实现如何支持较小的特征图的示例

实验分析

Results of applying individual architectural changes to YOLOv5 at each scale

YOLOv5和YOLO-Z的比较

1.7

1.8

标签:23330,10,51c,YOLO,split,leaky,合集,bn
From: https://blog.csdn.net/weixin_49587977/article/details/144514204

相关文章