DAMO-YOLO 论文学习

news2024/11/25 12:39:15

1. 解决了什么问题?

工业界追求高性能、低延迟的目标检测算法,研究人员于是聚焦于单阶段目标检测,探索高效的网络结构和训练策略。YOLOv5/v6/v7、YOLOX 和 PP-YOLOE 在 COCO 数据集上实现了不错的精度-速度平衡,得到广泛应用,但它们仍有提升空间。

  1. 网络结构对于目标检测非常关键,通过 NAS 技术搜索出检测友好的网络结构,许多要领先于人工设计的网络。
  2. 对于检测器来说,融合高层级语义特征和低层级空间特征非常重要,neck 对于检测框架来说非常关键。本文通过一系列实验发现,“大 neck、小 head” 能取得更好的表现。因此作者舍弃了以前 YOLO 的检测 head,只保留了一个任务映射层,节省下来的计算量被移动到 neck 里面。
  3. 动态标签分配策略如 OTA 和 TOOD 效果都要比静态标签分配好,但是错位问题仍然存在。
  4. 知识蒸馏通过大模型的监督信号,能提升小模型的表现,非常适合实时目标检测的设计。但由于超参数很难优化,而且特征里面的噪声太多,直接在 YOLO 系列使用知识蒸馏通常不会取得明显提升。

2. 提出了什么方法?

本文提出的 DAMO-YOLO,对 YOLO 做的改进包括 MAE-NAS 主干网络、高效的 RepGFPN neck、ZeroHead、AlignedOTA 和蒸馏增强。

2.1 MAE-NAS 主干网络

作者使用 MAE-NAS 来获得不同计算成本下最优的网络结构。MAE-NAS 根据信息理论对初始化网络做排序,无需训练网络,构建一个代理。该搜索过程只需几个小时,要远远短于训练耗时。

作者使用搜索模块 “ k1kx \text{k1kx} k1kx” 来设计网络空间的主干部分,该模块与 Darknet-53 里的模块相似。受 YOLOv6 启发,作者用 GPU 推理延迟而非 FLOPs 作为目标预算。搜索完成后,作者在主干网络使用空间金字塔池化(SPP)、Focus 和 Cross Stage Partial(CSP) 模块。

下表列出了不同尺度的 CSP-Darknet 和 MAE-NAS 主干网络的比较,MAE-ResNet 表示 MAE-NAS 主干里面只有 SPP 和 Focus 模块,MAE-CSP 表示里面还包括了 CSP 模块。此外,“S”(small) 和 “M”(medium) 分别表示大小不同的主干网络。为了平衡精度和速度,在 “T”(tiny) 和 “S” 中使用了 MAE-ResNet,在 “M” 中使用了 MAE-CSP。
在这里插入图片描述

2.2 Efficient RepGFPN

特征金字塔网络聚合由主干网络提取的不同分辨率的特征,是目标检测算法中关键而有效的一环。传统的 FPN 加入了一个 top-down 路径来融合多尺度特征。PAFPN 增加了一个 bottom-up 路径聚合网络,计算成本也上升了。BiFPN 去除了只有一个输入 edge 的 nodes,在同一层级的原始输入的位置增加了 skip-link。Generalized-FPN(GFPN) 能充分地交换高层级语义信息和低层级空间信息,取得了 SOTA 表现。在前一层和当前层的特征中,GFPN 融合多尺度特征。此外, log ⁡ 2 ( n ) \log_2(n) log2(n)个 skip-layer 连接提供了更有效的信息交流,使信息深入到网络内部。GFPN 能有效提高 YOLO 模型的精度,但是延迟也要比 YOLO 系列的 PANet 严重。通过分析,总结出原因有以下几点:

  • 不同尺度的特征图共享相同的通道维度;
  • Queen-fashion 操作无法满足实时检测的要求;
  • 基于卷积的跨尺度特征融合的效率比较低。

于是作者提出了 Efficient-RepGFPN,满足实时检测的要求。
在这里插入图片描述

  • 由于不同尺度特征图的 FLOPs 差异巨大,很难在有限的计算成本下,让每一个尺度的特征图共享同一个通道维度。因此在 neck 融合特征时,不同尺度的特征图对应着不同的通道维度设定。上表展示了通道数相同和不同时的表现,可以看到 neck 深度(bottleneck 重复次数)和宽度的平衡对模型表现很有益。当深度为 3、宽度为 ( 96 , 192 , 384 ) (96,192,384) 96,192,384时的表现是最佳的。

  • GFPN 通过 queen-fashion 增强特征交流,但会增加许多上采样和下采样操作。下表比较了这些上采样和下采样操作, ↘ , ↗ \searrow,\nearrow ,分别表示下采样和上采样操作。可以看到,上采样操作只增加了 0.3 0.3 0.3mAP,但延迟增加了 0.6 0.6 0.6ms。因此作者去除了 queen-fashion 里的上采样操作。
    在这里插入图片描述

  • 在特征融合模块,先用 CSPNet 替换原 3 × 3 3\times 3 3×3卷积特征融合,取得了 4.2 4.2 4.2mAP 的提升。然后对 CSPNet 做改进,加入了重参数化和 ELAN。如下表所示,这些改进没有增加计算成本,却实现了更高的精度。
    在这里插入图片描述

2.3 ZeroHead and AlignOTA

目前先进的目标检测方法都使用了解耦 head,虽然提高了 AP,但延迟也明显增加了。作者进行了一系列实验,发现“大 neck、小 head” 效果最好。因此,在 head 里面只保留了一个映射层,即分类任务一个线性层、回归任务一个线性层。因为 head 里没有了需要训练的层,作者将该 head 命名为 ZeroHead,它节省出的计算量可以用于 RepGFPN neck。ZeroHead 可以看作为一个耦合的 head。在损失函数中,分类使用的 QFL,回归监督使用的 DFL 和 GIoU 损失。QFL 让网络学习分类和定位的联合表征。DFL 用 general distribution 对边框坐标建模,预测的边框更加可靠和准确。训练损失如下:

L o s s = α ⋅ l o s s Q F L + β ⋅ l o s s D F L + γ ⋅ l o s s G I o U Loss=\alpha\cdot loss_{QFL}+\beta\cdot loss_{DFL}+\gamma\cdot loss_{GIoU} Loss=αlossQFL+βlossDFL+γlossGIoU

标签分配也很关键,它为 anchors 分配分类目标和回归目标。像 OTA 和 TOOD 这些分配方法取得了明显的性能改进。动态标签分配会根据预测框和目标框之间的分配代价来分配标签。虽然在损失里面,对齐分类和回归任务被广泛研究,但是在标签分配里面,对齐分类和回归任务却鲜有提及。尽管动态分配缓解了该问题,但由于分类和回归损失(如交叉熵损失和 IoU 损失)的不均衡,该问题仍然存在。于是作者在分类代价中加入了 focal loss,将预测框和目标框的 IoU 作为软标签,形式如下:

A s s i g n C o s t = C r e g + C c l s AssignCost=C_{reg} + C_{cls} AssignCost=Creg+Ccls
α = I o U ( r e g g t , r e g p r e d ) \alpha=IoU(reg_{gt}, reg_{pred}) α=IoU(reggt,regpred)
C r e g = − ln ⁡ ( α ) C_{reg}=-\ln(\alpha) Creg=ln(α)
C c l s = ( α − c l s p r e d ) 2 × C E ( c l s p r e d , α ) C_{cls}=(\alpha-cls_{pred})^2\times CE(cls_{pred},\alpha) Ccls=(αclspred)2×CE(clspred,α)

这样,我们就可以为每个目标选择分类和回归对齐的样本。本文是从全局的角度来表示对齐的分配代价,命名为 AlignOTA。下表
中比较了各标签分配方法。
在这里插入图片描述

2.4 蒸馏

知识蒸馏是提升小模型性能的有效办法。但是直接在 YOLO 模型上使用知识蒸馏并不一定能取得显著改进,因为超参数很难优化,而且特征包含很多噪声。作者采用基于特征的蒸馏,在中间特征图上蒸馏识别和定位信息。作者进行了多个快速验证实验,选择合适的蒸馏方法,结果如下表所示。CWD 最适合本文方法。
在这里插入图片描述

本文提出的蒸馏策略包含两步:

  • 在第一个阶段(前 284 个 epochs),打开 strong mosaic,教师网络对学生网络进行蒸馏。面对极端增强的数据分布,学生网络在教师网络指导下能进一步平滑地提取出信息。
  • 在第二个阶段(后 16 个 epochs),关闭 mosaic,学生网络自己做微调。这一阶段不做蒸馏,是因为教师网络会凭借经验,想要在一个陌生的环境里面拉住学生网络,破坏学生网络的表现。

DAMO-YOLO 对蒸馏做了两点改进:

  • Align Module。它是一个线性映射层,将学生特征的分辨率( C , H , W C,H,W C,H,W)适配到与教师特征一样。迫使学生特征直接去近似教师特征,所带来的提升不如自适应模仿所带来的显著。
  • 通道动态调节。对教师和学生特征使用归一化操作,弱化真实数值差异造成的影响。减去均值后,各通道的标准差就作为 KL 损失的调节系数使用。

此外,关于蒸馏,作者有两个发现可以改进蒸馏。一是平衡蒸馏和任务损失。如下图,当我们关注在蒸馏( w e i g h t = 10 weight=10 weight=10)时,学生网络的分类损失收敛就较慢,副作用明显。当损失权重较小( w e i g h t = 0.5 weight=0.5 weight=0.5)时,能很好地平衡蒸馏和分类任务。其次,检测器的 head 的深浅。合理地降低 head 的深度有助于 neck 的特征蒸馏。原因是,当最终输出和蒸馏的特征图之间的差距较小时,蒸馏对决策的影响要更好。

在这里插入图片描述

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

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

相关文章

超标量处理器寄存器rename

1.相关性介绍 在CPU中,一段程序会被编译成一连串的汇编指令,指令与指令之间可能会具有相关性(dependency)。所谓相关性,即一条指令的执行会依赖于另一条指令的结果,相关性可以分为:① 数据相关性…

el-table树形表格实现复选框多选效果

2023.7.26今天我学习了如何使用树形表格的时候进行复选框的多选效果。 当我们使用树形结构表格需要进行多选功能操作的时候会发现点击全选的时候,只有一级表格数据会被选中,问题如图: 我们需要实现的是点击全选的不管是几级表格数据都可以被…

ElasticSearch之IK分词器安装以及使用介绍

文章目录 一、IK 分词器简介1. 支持细粒度分词:2. 支持多种分词模式:3. 支持自定义词典:4. 支持拼音分词:5. 易于集成和使用: 二、安装步骤1、下载 IK 分词器插件:2、安装 IK 分词器插件:3. 安装…

各种知名游戏的技术分析

介绍一个GitHub,里面包括了市面上的各种游戏的技术分析,包括渲染管线、工作流、技术文章等等,在做某个类型的游戏的时候,可以针对某个游戏去进行技术参考,特别实用。 GitHub - OTFCG/Awesome-Game-Analysis: a compre…

C++设计模式之模板方法、策略模式、观察者模式

面向对象设计模式是”好的面向对象设计“,所谓”好的面向对象设计“指的是可以满足”应对变化,提高复用“的设计。 现代软件设计的特征是”需求的频繁变化“。设计模式的要点是”寻求变化点,然后在变化点处应用设计模式,从而更好地…

力扣天天练--week3-LeetCode75

topic75-9-t443:压缩字符串 题目描述: 给你一个字符数组 chars ,请使用下述算法压缩: 从一个空字符串 s 开始。对于 chars 中的每组 连续重复字符 : 如果这一组长度为 1 ,则将字符追加到 s 中。 否则,需…

Spring Boot中整合MyBatis(基于xml方式基于注解实现方式)

一、前提准备 在Spring Boot中整合MyBatis时,你需要导入JDBC(不需要手动添加)和Druid的相关依赖。 JDBC依赖:在Spring Boot中整合MyBatis时,并不需要显式地添加JDBC的包依赖。这是因为,当你添加mybatis-sp…

会捷通云视讯 list 目录文件泄露漏洞

劳动永远是医治精神创伤的良药。 漏洞描述 会捷通云视讯某个文件 list参数 存在目录文件泄露漏洞,攻击者通过漏洞可以获取一些敏感信息 漏洞复现 构造payload访问漏洞url: /him/api/rest/V1.0/system/log/list?filePath../漏洞证明: 文…

Mendix 创客访谈录|综合业务展示大屏应用开发

本期创客 刘书智 西门子工业领域专家 我在西门子工厂自动化工程有限公司工作。一直从事SCADA产品的技术支持工作,已经过去17个年头了。赶上数字化发展的浪潮,不断学习各种IT技术,践行 IT与OT融合,希望借助自己的IT知识助力OT的发…

编程实战班--C语言和Python语言实现五子棋游戏的代码

文章目录 下面分别是C语言和Python语言实现五子棋游戏的代码:C语言实现Python语言实现总结 下面分别是C语言和Python语言实现五子棋游戏的代码: C语言实现 在使用C语言实现五子棋游戏时,可以使用SDL2图形库来实现图形界面和图形绘制等功能&…

华为华三思科 交换机基础配置一览

console密码修改 华为 user-interface console 0 authentication-mode password set authentication password cipher XXXXXXXXX华三 line aux 0 authentication-mode password set auth pass simple XXX思科 en configure terminal line console 0 password 123 login忘记…

打开英雄联盟提示d3dcompiler47.dll缺失怎么修复

1.d3dcompiler_47.dll缺失的原因 损坏的文件:d3dcompiler_47.dll文件可能由于某些原因损坏,如病毒感染、意外删除等。 不兼容的操作系统:某些应用程序要求特定版本的d3dcompiler_47.dll文件,如果操作系统不兼容,则可能…

前端实现导出excel表格(单行表头)

需求:实现勾选行导出为表格 一、安装插件 npm install --save file-saver xlsx运行项目报如下警告的话 运行npm install xlsx0.16.0 --save 来降低版本号(最初我安装的版本号是0.18.16的版本)再次运行项目就不会报如下警告了 二、新建一个ex…

语音分帧简述

目录 1. 分帧 1.1 非整齐分帧 1.2 整齐分帧 2. 示例代码 1. 分帧 问题1:总帧数如何计算? 记符号N为语音总长度,FRAME_LEN为帧长,OVERLAP_LEN为帧与帧之间的重叠部分,STEP_LEN为帧移(步长)。则总帧数N_Frames计算…

kotlin 编写一个简单的天气预报app(二)

增加界面显示openweathermap返回的信息。 在activity_main.xml里增加输入框来输入城市&#xff0c;在输入款旁边增加搜索按钮来进行查询。 然后原来显示helloworld的TextView用来显示结果。 1. 增加输入城市名字的EditText <EditTextandroid:id"id/editTextCity"…

AcrelEMS企业微电网能效管理平台实现用户侧智能配电和智能用电管理-安科瑞黄安南

摘要&#xff1a;随着科技的发展&#xff0c;电力系统正逐步向智能化、数字化、互联网化迈进。智能配电与智能用电是电力产业发展的重要方向&#xff0c;将为传统电力系统带来革命性的变革。本文将对智能配电和智能用电的概念、特点、关键技术及应用进行详细介绍。 1、智能配电…

Rust vs Go:常用语法对比(八)

题目来自 Golang vs. Rust: Which Programming Language To Choose in 2023?[1] 141. Iterate in sequence over two lists Iterate in sequence over the elements of the list items1 then items2. For each iteration print the element. 依次迭代两个列表 依次迭代列表项1…

【linux基础(一)】Linux基本指令(上)

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到开通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; 这里写目录标题 1. 前言1. 创…

[vulnhub]DC2

文章目录 [vulnhub]DC2信息收集flag1flag2cewlwpscan flag3什么是rbash&#xff1f; flag4flag5git提权 总结 [vulnhub]DC2 信息收集 扫ip&#xff0c;有两种方式&#xff1a;arp、nmap nmap -sP 192.168.56.0/24 -T4arp-scan -l192.168.56.137 扫端口&#xff1a; nmap -…

1312. 让字符串成为回文串的最少插入次数;971. 翻转二叉树以匹配先序遍历

1312. 让字符串成为回文串的最少插入次数 核心思想&#xff1a;最后的回文串有两种情况&#xff0c;一种是奇数回文串&#xff0c;一种是偶数回文串&#xff0c;奇数回文串的中心一定是原来就有的&#xff0c;偶数回文串的中心也是原来就有的。假设除去中心的部分为q,p,最后要…