DAMO-YOLO:一种平衡速度和准确性的新目标检测框架

news2024/10/2 16:30:51

DAMO-YOLO:一种平衡速度和准确性的新目标检测框架

  • 1.介绍
  • 2.关键技术
    • 2.1. NAS主干网络:MAE-NAS
    • 2.2. Large Neck:RepGFPN
    • 2.3. Small Head:ZeroHead
    • 2.4. 标签分配:AlignOTA
    • 2.5 模型蒸馏
  • 3.性能效果展示

在这里插入图片描述作者:KevinLuo

1.介绍

DAMO-YOLO是一种考虑了速度和准确性的目标检测框架,其效果超越了当前的YOLO系列方法,并在保持高推理速度的同时实现了SOTA。DAMO-YOLO在YOLO框架的基础上引入了一系列新技术,并对整个检测框架进行了重要修改。具体来说,它包括基于NAS搜索的新的检测主干结构,更深的中间结构,简化的头部结构,以及引入蒸馏技术以进一步改善效果。除了模型之外,DAMO-YOLO还提供了高效的训练策略和方便易用的部署工具,帮助您快速解决工业领域的实际问题!

在这里插入图片描述

2.关键技术

2.1. NAS主干网络:MAE-NAS

主干网络结构在目标检测中起着重要的作用。在早期的YOLO系列中,DarkNet一直占主导地位。近期,一些工作也开始探索其他对检测有效的网络结构,如YOLOv6和YOLOv7。然而,这些网络仍然是人工设计的。随着神经网络结构搜索技术(NAS)的发展,有许多NAS网络结构可用于检测任务,并且与传统手动设计的网络相比,NAS网络结构可以实现良好的检测结果。因此,他们使用NAS技术搜索适合作为DAMO-YOLO主干的网络结构。在这里,他们使用阿里自家研发的MAE-NAS。MAE-NAS是一种基于启发式和无需训练的NAS搜索方法,可用于快速搜索不同大小的各种主干网络结构。

MAE-NAS利用信息论评估初始化网络的熵,评估过程不需要任何训练过程,从而解决了先前NAS搜索方法需要训练和重新评估的缺点。在短时间内实现广泛的网络搜索,降低搜索成本,增加找到潜在更好网络结构的可能性。值得特别注意的是,在MAE-NAS搜索中,他们使用K1K3作为基本的搜索模块。同时,他们直接使用GPU推理延迟(Latency)作为目标预算,而不是Flops。在搜索后,他们对最终的主干网络应用了空间金字塔池化和焦点模块。下表1展示了不同主干网络的性能对比。可以看出,MAE-NAS主干网络的效果明显优于DarkNet网络结构。

MAE-NAS作为一种神经网络结构搜索方法,类似于一位探险家,在庞大的网络结构空间中寻找着最佳的主干网络结构。它使用信息论的思想,以熵的角度评估不同网络结构的初始化状态。这相当于对网络的探索程度进行度量,越高的熵意味着网络结构越不确定,有更大的潜力进行改进和优化。
通过利用熵的评估,MAE-NAS能够快速搜索出适合目标检测任务的网络结构,而无需通过繁重的训练过程。相比于传统的手动设计网络结构,这种自动搜索方法具有更高的效率和灵活性。通过使用GPU推理

在这里插入图片描述

2.2. Large Neck:RepGFPN

在特征金字塔网络(FPN)中,多尺度特征融合旨在聚合来自主干网络不同阶段的特征输出,从而增强输出特征的表达能力,并提高模型性能。传统的FPN引入自顶向下的路径来融合多尺度特征。考虑到单向传输的局限性,PAFPN增加了一个额外的自底向上路径聚合网络,但增加了计算成本。为了减少计算强度,YOLO系列检测网络选择了具有CSPNet的PAFPN来融合主干网络输出的多尺度特征。

ICLR2022 GiraffeDet中的工作提出了一种新颖的轻量主干网络和重型中间层结构,并取得了SOTA的性能,因为给定的中间层结构GFPN(Generalized FPN)可以充分交换高层语义信息和低层空间信息。在GFPN中,多尺度特征融合发生在前一层和当前层的不同尺度特征之间,此外,跨层连接log_2(n)提供了更高效的信息传输,可扩展到更深的网络。

RepGFPN中的大型中间层就像一个信息交流中心,它接收来自主干网络的多尺度特征,并通过不同尺度特征之间的交互来实现特征的融合。类似于一个智慧的导游,它能够将高层语义信息和低层空间信息进行充分的交流和交换。
在这里插入图片描述
因此,他们尝试将GFPN引入DAMO-YOLO,并与PANet进行了比较,取得了更高的准确性,这是预期的结果。然而,与此同时,GFPN也带来了模型推断延迟的增加,以至于准确性/延迟的权衡并没有获得很大的优势。通过对原始GFPN结构的分析,他们归因于以下几个方面:

  1. 不同尺度的特征共享相同数量的通道,这使得很难给出一个最佳的通道数量,以确保高级低分辨率特征和低级高分辨率特征具有相同的丰富表达能力;
  2. GFPN使用Queen-Fusion来增强特征之间的融合,而Queen-Fusion包含大量的上采样和下采样操作,以实现不同尺度特征的融合,这极大地影响了推断速度;
  3. GFPN中使用的3x3卷积的跨尺度特征融合的效率并不高,无法满足轻量级计算的需求,需要进一步优化。

在上述分析的基础上,他们提出了一种新的Efficient-RepGFPN,以满足实时目标检测中颈部结构的设计,主要包括以下改进:

  1. 针对不同尺度特征图使用不同的通道数,从而在轻量级计算的约束下灵活控制高级特征和低级特征的表达能力;
  2. 删除Queen-Fusion中的额外上采样操作,这在准确性降低较小的情况下大大减少了模型推断延迟;
  3. 将原始基于卷积的特征融合改进为CSPNet连接,并引入重参数化和ELAN连接的思想,以提高模型的准确性而不增加更多的计算量。最终的Efficient-RepGFPN网络结构如上图所示。Efficient-RepGFPN的消融实验结果如下表2所示。

从表2可以看出,灵活控制不同尺度特征图的通道数量可以实现比所有尺度特征图共享相同通道数更高的准确性,这表明灵活控制高级特征和低级特征的表达能力可以带来更多的好处。同时,通过在相同计算层级上控制模型,他们还在Efficient-RepGFPN中进行了深度/宽度的权衡比较,当深度=3,宽度=(96、192、384)时,模型达到了最高的准确性。

表3比较了Queen-Fusion连接的消融实验结果,颈部结构采用了没有添加额外上采样和下采样运算符的PANet连接。他们尝试只添加上采样运算符、只添加下采样运算符和完整的Queen-Fusion结构,并且模型的准确性有所提高。然而,仅添加上采样运算符会增加0.6毫秒的推断时间,而准确性只提高了0.3,远远低于仅添加额外下采样运算符的准确性/延迟增益,因此他们在最终的设计中放弃了额外的上采样运算符。

在表4中,他们对多尺度特征融合方法进行了实验比较,从表中可以看出,在低计算约束下,采用CSPNet的特征融合方法要比基于卷积的融合方法好得多,同时,引入重参数化思想和ELAN连接可以在增加的延迟很小的情况下带来较大的准确性改善。

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

2.3. Small Head:ZeroHead

在DAMO-YOLO中,他们关注目标检测头部(ZeroHead)。目前,在目标检测方法中,常用的是使用Decouple Head作为检测头部。Decouple Head可以实现更高的平均精度(AP),但它会在一定程度上增加模型的计算时间。为了平衡模型的速度和性能,他们在下表5中进行了实验,以选择合适的颈部和头部特重。

在这里插入图片描述

从表2、3、4中可以看出,“大颈部,小头部”的结构会获得更好的性能。因此,他们舍弃了以前方法中常用的“Decouple Head”,仅保留了一个线性投影层用于分类和回归任务,他们称之为ZeroHead。ZeroHead将检测头部中的计算量最大化,为更复杂的颈部(如RepGFPN颈部)提供更多空间。值得注意的是,ZeroHead本质上可以被视为Couple Head,这也是与以前方法采样的Decouple Head的一个显著区别。

2.4. 标签分配:AlignOTA

标签分配(label assignment)是目标检测中的关键组成部分,以前的静态分配方法通常只考虑了anchor和ground truth的IoU,这种分配方法容易导致分类任务失焦,如图3左侧的图示,手部检测框使用玩偶熊上的点进行预测,这对于模型来说是不合理的,理想的标签如图3右侧的图示所示。此外,这种方法依赖于anchor priors,在工业应用中,待检测的对象尺度各异,找到一个最合适的anchor prior非常麻烦。

在这里插入图片描述

为了克服上述问题,学术界出现了一些使用模型的分类和回归预测值的标签分配方法,这些方法消除了标签分配对锚点的依赖,并在分配过程中同时考虑了分类和回归的影响,从一定程度上消除了失焦的问题。OTA是其中的经典工作之一,它根据模型的分类和回归预测值计算分配损失,并使用Sinkhorn-Knopp算法求解全局最优分配,在复杂的分配场景中表现出色。因此,他们在这里将OTA用作加速simOTA的分配策略。然而,simOTA本身存在一定的问题,在计算分布时不能保证考虑到分类和回归对分布的平衡影响,也就是分类回归损失不匹配的问题。为了解决这个问题,他们修改了分配分数的计算方式,如下所示:
在这里插入图片描述

为了在标签分配中平衡分类和回归损失,他们将Focal Loss引入到标签分配的分类损失中,并用IoU替代了分类的One-hot标签,从而放宽了对分类的限制。表4对改进后的AlignOTA和simOTA进行了比较,可以看出AlignOTA在性能方面有显著的提升。

2.5 模型蒸馏

模型蒸馏是提高模型效果的有效手段。YOLOv6尝试通过在其大型模型中使用自蒸馏技术来改进模型。但总体而言,在YOLO系列的当前工作中,蒸馏的应用并不常见,尤其是在小型模型上的蒸馏。他们对DAMO-YOLO进行了特殊研究,并最终将蒸馏技术应用于DAMO-YOLO的各种尺度模型,以改进效果。

DAMO-YOLO的训练过程分为两个阶段,第一阶段是基于强烈的马赛克增强进行训练,第二阶段是带有封闭式马赛克增强的训练。他们发现,在第一阶段使用蒸馏技术可以实现更快的收敛并取得更高的结果;然而,在第二阶段继续使用蒸馏并不能进一步增强效果。他们认为,第二阶段的数据分布与第一阶段相比存在较大偏差,并且第二阶段的知识蒸馏在一定程度上会破坏在第一阶段学习到的知识分布。第二阶段的训练时间过短,导致模型无法完全从第一阶段的知识分布过渡到第二阶段的知识分布。然而,如果强行延长训练周期或增加学习率,一方面会增加训练成本和时间,另一方面会削弱第一阶段蒸馏的效果。因此,在这里他们关闭了第二阶段的蒸馏操作,仅进行第一阶段的蒸馏。
在这里插入图片描述
其次,他们在蒸馏中引入了两种技术,一种是对齐模块,用于对齐教师和学生的特征图大小。另一种是归一化操作,用于减弱教师和学生之间数值尺度波动的影响,可以看作是KL损失的动态温度系数。

此外,他们还发现蒸馏的损失权重和头部尺寸对蒸馏效果也有很大影响。如上图4所示,当蒸馏损失权重增大时,分类损失的收敛速度变慢且波动较大。他们知道分类损失对检测任务有很大影响,其较晚的收敛会导致模型优化不充分,进而影响最终的检测效果。因此,与以往的蒸馏经验不同,在DAMO-YOLO中,他们使用较小的蒸馏权重来控制蒸馏损失,减弱蒸馏损失和分类损失之间的冲突。

同时,他们在检测头的结构中使用了ZeroHead。ZeroHead只包含一个用于任务投影的线性层。因此,它相当于同时优化蒸馏损失和分类损失在相同的特征空间中,所学习的空间能够满足蒸馏和分类的优化需求,并进一步提高分类损失和蒸馏损失优化的一致性。
在这里插入图片描述

3.性能效果展示

DAMO-YOLO团队在MSCOCO验证集上验证了DAMO-YOLO的性能。可以看出,结合以上改进,DAMO-YOLO在严格的延迟限制下取得了显著的精度提升,创造了新的SOTA(State-of-the-Art,最先进技术)。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/686452.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CART算法

假设我们有一个二元分类问题,数据集包含以下四个样本: 特征1特征2类别0.20.310.40.500.60.700.80.90 可以使用CART算法来建立一个决策树模型。 1、首先,我们需要选择一个特征和阈值来对数据集进行划分。假设我们选择特征1和阈值0.5&#x…

基于Java中国咖啡文化宣传网站设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

IDEA创建maven工程JDBC连接MySQL数据库中的遇到的问题以及相应的解决方案

首先创建一个maven工程 然后点击进入pom.xml文件&#xff0c;输入安装依赖。 输入数据库配置文件原码&#xff1a; <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version>…

Docker 中的 .NET 异常了怎么抓 Dump

一&#xff1a;背景 1. 讲故事 有很多朋友跟我说&#xff0c;在 Windows 上看过你文章知道了怎么抓 Crash, CPU爆高&#xff0c;内存暴涨 等各种Dump&#xff0c;为什么你没有写在 Docker 中如何抓的相关文章呢&#xff1f;瞧不上吗&#xff1f; 哈哈&#xff0c;在DUMP的分…

Flutter 组件(三)按钮类组件

Flutter开发笔记 Flutter 组件&#xff08;三&#xff09;按钮类组件 - 文章信息 - Author: Jack Lee (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChineAddress of this article:https://blog.csdn.net/qq_28550263/article/det…

Prophet 时间序列预测框架入门实践笔记

1. Prophet时间序列预测框架概述 Prophet是Facebook开源的一种时间序列预测框架&#xff0c;旨在使时间序列分析更加容易和快速。Prophet可以处理具有多个季节性和突发事件的时间序列数据&#xff0c;并且在数据缺失或异常情况下仍然能够进行良好的预测。Prophet采用了一种基于…

荣耀电脑怎么用U盘重装系统?荣耀电脑用U盘重装Win10系统教程

荣耀电脑怎么用U盘重装系统&#xff1f;用户想用U盘来给荣耀电脑重装Win10系统&#xff0c;但是不知道怎么操作才能完成Win10系统的重装&#xff0c;这时候用户需要准备一个大于8G的U盘&#xff0c;还有一个能够正常联网的荣耀电脑&#xff0c;最后根据小编分享的荣耀电脑用U盘…

Linux文件系统论述

目录 前言 一.磁盘 1.1定义 1.2结构 1.3磁盘的寻找方式 1.4磁盘的逻辑/线性结构 1.5磁盘访问的基本单位 1.6磁盘的管理 二.Linux文件系统 2.1系统结构 2.2属性解析&#xff1a; 2.3inode相关块的解析&#xff1a; 2.4数据块的解析&#xff1a; 前言 学了一段时间的Linux操…

DIM-00019、Unable to OpenSCManager: err=5、DBT-50000

在windows server 2016上安装部署Oracle 19C&#xff0c;出现较多的问题。 例如在DBCA建库时出现[DBT-50000]无法检查可用内存报错&#xff1a; 根据MOS文档&#xff1a;DBCA fails with errors: [FATAL] [DBT-50000] Unable to check for available memory in “Specify conf…

算法05-排序算法

算法05-排序算法 总结大纲要求【 3 】排序的基本概念各种排序算法 【 3 】冒泡排序&#xff08;Bubble Sort&#xff09;冒泡排序排序规则冒泡排序优化 【 3 】选择排序&#xff08;Selection Sort&#xff09;【 3 】插入排序&#xff08;Insertion Sort&#xff09;题目描述…

怎么高效编写企业内部FAQ文档呢?

企业内部FAQ文档是指包含常见问题和答案的文档&#xff0c;旨在为企业内部员工提供帮助和解答。编写这样的文档可以帮助企业内部员工更好地理解和掌握公司的政策和流程&#xff0c;提高工作效率。 编写企业内部FAQ文档的一些高效方法&#xff1a; 确定文档的范围和目标受众 …

Windows11安装oneAPI和Visual Studio 2022配置Fortran并行环境

Windows11安装oneAPI和Visual Studio 2022配置Fortran并行环境 安装Visual Studio 2022 Community安装oneAPI建立Fortran工程项目测试建立单核运行的Fortran运行算例建立并行运行的Fortran运行算例 结语 安装Visual Studio 2022 Community 访问微软Visual Studio官网&#xff…

SpringBoot 如何使用 Redis 作为缓存?

SpringBoot 如何使用 Redis 作为缓存&#xff1f; 引言 在今天的互联网应用中&#xff0c;缓存是一个非常重要的概念。缓存可以减轻数据库的负担&#xff0c;提高系统的性能。Redis 是一个非常流行的内存数据库&#xff0c;它可以用作缓存&#xff0c;提供快速的读写速度和高…

【C语言初阶(1)】分支语句

文章目录 前言1. if 语句1.1 if 语法结构1.2 悬空 else1.3 “ ” 号引发的错误1.4 if 语句练习题 2. switch 语句2.1 switch 语法结构2.2 在switch语句中的 break2.3 default 子句2.4 switch 语句练习题 前言 C语言是一门结构化的程序设计语言&#xff1b; 它分为&#xff1a;…

【MySQL】不就是多表查询综合练习

前言 嗨咯大家好&#xff01;我们学习完毕了多表查询&#xff0c;今天我们就要对我们所学的成果进行测验&#xff0c;本期主要是对多表查询相关内容的练习课程。可以先试着自己敲&#xff0c;遇到不会可以查看查考代码。 目录 前言 目录 练习题 1.查询员工的姓名、年龄、职位…

生物制药厂洁净区环境监测超限的标准是多少?

对于一些生物制药企业来说&#xff0c;质量管理部门应加深对环境监测的质量认识&#xff0c;掌握环境监测的技术手段&#xff0c;定期评估环境监测程序的有效性和完整性&#xff0c;并且对环境监测数据进行趋势分析以寻找可以更好控制的区域&#xff0c;以保证企业的生产符合GM…

网络安全合规-网络安全工程师(一)

网络安全工程师的工作种类很多&#xff0c;当前这个图片说明了具体的工程师的工作种类有哪些&#xff0c;列举了一下。 互联网时代网络及科技迅速发展&#xff0c;随之而来的首要问题就是网络安全&#xff0c;因为已经出现的网络问题带来了巨大的经济损失&#xff0c;甚至各种…

ModaHub魔搭社区:安装、启动 Milvus 服务(CPU版)教程

目录 安装、启动 Milvus 服务 安装前提 操作系统 硬件 软件 确认 Docker 状态 拉取 Milvus 镜像 下载配置文件 启动 Milvus Docker 容器 常见问题 接下来你可以 安装、启动 Milvus 服务 CPU 版 MilvusGPU 版 Milvus 安装前提 操作系统 操作系统 版本 CentOS 7…

node 单线程、多线程和多进程模型

文章目录 node 启动过程单线程多线程node 启动过程相关线程node 多线程特点创建多线程 多进程创建多进程cluster进程守护 node 启动过程 C 层引导&#xff1a;Node.js 启动时&#xff0c;会初始化 C 层的结构和依赖项&#xff0c;如 V8 引擎、Libuv 事件循环、核心模块等。此外…

TCP/IP 协议详解

文章目录 简介应用层传输层网络层网络接口层数据包发送过程TCP 三次握手四次挥手三次握手为什么是三次握手四次挥手为什么是四次挥手 简介 TCP/IP传输协议&#xff0c;即传输控制/网络协议&#xff0c;也叫作网络通讯协议。它是在网络的使用中的最基本的通信协议。 TCP/IP传输…