当前位置: 首页 > news >正文

“Gold-YOLO:基于聚合与分发机制的高效目标检测新范式”

🏡作者主页:点击! 

🤖编程探索专栏:点击!

⏰️创作时间:2024年12月26日8点00分


神秘男子影,
  秘而不宣藏。
泣意深不见,
男子自持重,
   子夜独自沉。


论文源地址(有视频):

链接icon-default.png?t=O83Ahttps://www.aspiringcode.com/content?id=17326303651908&uid=ab739a84909c4ee6baff8ceb5cc0e2e4

引言

在过去几年里,YOLO系列已经成为了实时目标检测领域最先进以及最常用的方法。许多研究通过修改模型架构、数据增强、设计新的损失函数将baseline提升到了一个更高的水平。但现有的模型仍然存在信息融合的问题,尽管FPN和PANet在一定程度上缓解了该问题。

传统的neck如FPN以及相关变体的结构如上图所示,但是这种信息融合的方法存在一个明显的缺陷:当需要跨层融合信息时(如level-1和level-3),FPN式的结构无法无损的传输信息,对于其他层的信息,只能间接地“递归”获得,level-1 试图利用level-2的信息时,它可以直接访问level-2,也可以融合level-2,如果level-1想要利用level-3的信息,必须先等level-2和level-3信息融合后,然后level-1再与level-2信息融合,才可以间接获取level-3信息。

这种传输模式,导致在计算过程中大量的信息丢失,间隔层之间的信息交互,只能通过中间层选择信息,造成某些信息的丢失;即某一层的信息只能充分地帮助相邻层,而削弱了想其他间隔层提供的帮助。因此信息融合的整体效果受到了限制。

针对FPN式结构存在的问题,本文介绍的方法,在TopFormer理论的基础上,提出了一种新的聚合-分发(GD)机制,它通过融合多层特征并将全局信息注入到更高层,在YOLO中实现高效的信息交换。这显著增加了neck的信息融合能力,同时没有显著增加延迟。

基于此提出了一个新的模型Gold-YOLO,它提高了多尺度特征融合的能力,并在所有尺度上实现了延迟和精度之间的理想平衡。此外,本方法首次在YOLO系列中实现了MAE-style的预训练,使得YOLO系列可以从无监督预训练中受益。

Gold-YOLO

网络结构

由下图可见,Gold-YOLO的网络结构与YOLOv3-v8是非常相似的,最大的不同之处在于,Neck阶段,用Low-GD代替了PANet的上采样融合阶段,用High-GD代替了PANet的下采样融合阶段。

本文的Gold-YOLO提出了聚合-分发机制(gather-and-distribute),其通过Conv + Self-Attention实现,进一步提高了多尺度特征的融合能力。

通过统一的模块对各个尺度的信息进行采集和融合,然后将融合够的特征分发到不同的层,这样既避免了传统FPN结构固有的信息丢失,也在不显著增加延迟的情况下增强了Neck部分的信息融合能力。

采集分发机制(GD)

GD的实现收集-分发的流程包括三个模块:特征对齐模块(FAM)、特征信息融合模块(IFM)、特征信息分发模块(Inject)。

首先,FAM收集backbone不同尺度的特征图,并通过上采样或下采样的方式进行对齐;然后,IFM融合对齐后的特征生成全局特征,然后通过split切片为两部分,后面针对性地对其他尺度进行分发;最后,Inject分发模块(采用类似于self-attention的方式),使用简单的注意力操作(增强分支的检测能力),将全局特征split后分发到各个层级。

为了增加模型检测不同大小对象的能力,提出了两个分支,低阶段GD和高阶段GD。

低阶段分支

如下图所示,B2、B3、B4、B5通过Low-GD进行上采样融合。

信息分发模块

信息分发类似采用自注意力的形式,如下图所示:

高阶段分支

经过Low-GD融合得到的特征P3、P4、P5 再经过High-GD进行特征融合,如下图所示.

信息分发模块

High-GD和Low-GD的分发模块是完全相同的。

增强的跨层信息流

为了进一步提升性能,作者借鉴YOLOv6里的PAFPN提出了一个Inject-LAF模块。这个模块是Inject模块的改进,其中在Inject模块的输入位置新加了一个轻量的相邻层融合模块(lightweight adjacent layer fusion, LAF)。具体结构如下。

为了实现速度和精度的平衡,设计了两种LAF:low-level LAF和high-level LAF,分别用于低层注入(合并相邻两层的特征)和高层注入(合并相邻一层的特征),在Low-stage中,用于合并相邻的两层的特征,如由原来的B3B3变为B2B2(AvgpoolAvgpool下采样)、B3B3、B4B4(双线性上采样)的合并;在High-stage中,用于合并相邻一层的特征,如由原来的P4P4变为P3P3、P4P4的合并。

掩码图像建模预训练

掩码图像建模预训练是一种自监督学习方法,它在计算机视觉领域中被用来训练模型以学习图像的有效表示。这种方法受到自然语言处理中掩码语言模型(如BERT)的启发,其中模型被训练来预测输入数据中被随机掩盖(masked)的部分。在图像的上下文中,这意味着模型需要预测图像中被遮盖或掩盖的区域。

作者采用了MIM Pre-training方法来预训练模型的backbone。以下是这种方法的详细步骤和原理:

  1. 掩码图像生成:首先,从原始图像中随机选择一定比例的像素,并将这些像素的值设置为零或某个特定的掩码值,从而生成掩码图像。
  2. 稀疏卷积编码:由于掩码操作导致图像的大部分区域缺失,模型需要能够处理这种不规则和随机的掩码输入。在Gold-YOLO中,作者使用稀疏卷积来编码未被掩码的像素,将它们视为3D点云的稀疏体素。
  3. 层次化解码器:为了从多尺度编码的特征中重建图像,作者采用了类似UNet的层次化解码器。这个解码器能够处理不同尺度的稀疏特征图,并将所有空间位置填充为嵌入的掩码。

在预训练过程中,作者使用了LAMB优化器和余弦退火学习率策略。通过MIM Pre-training,模型能够学习到更加丰富和鲁棒的特征表示,这有助于提高模型在下游任务上的性能。在Gold-YOLO中,预训练显著提高了模型的收敛速度和准确性。

实验

使用Microsoft COCO数据集进行模型训练和验证,在ImageNet-1K数据集上对模型的backbone进行MIM预训练。

比较实验

作者选择了多个YOLO系列的模型进行比较,包括YOLOv5, YOLOX, PPYOLOE, YOLOv7, YOLOv8, 和YOLOv6-3.0。实验结果如下。

Gold-YOLO-N与YOLOv8-N, YOLOv6-3.0-N, 和YOLOv7-Tiny在AP上进行了比较,Gold-YOLO在相似或更低的延迟下具有更高的AP。Gold-YOLO-S与YOLOX-S和PPYOLOE-S相比,在保持更快的FPS的同时,AP有显著提升。Gold-YOLO-M在与YOLOv6-3.0-M, YOLOX-M, 和PPYOLOE-M的比较中,具有更高的AP和相似的速度。Gold-YOLO-L与YOLOv8-L和YOLOv6-3.0-L相比,在保持相似的FPS的同时,AP有小幅提升。

消融实验

GD机制

通过比较包含和不包含Low-GD和High-GD分支的模型,可以观察到这两个分支对模型性能有显著提升,尤其是在检测小尺寸和大尺寸物体时。

消融实验显示,LAF模块在增强特征融合和提高模型对不同尺度物体的检测能力方面发挥了重要作用。

泛化性能

在Mask R-CNN中替换necks后,GD机制显著提高了实例分割的准确率,尤其是在分割小尺寸物体时。

在PointRend中应用GD机制后,语义分割的mIoU(平均交并比)和mAcc(平均准确率)得到了提升,这表明GD机制在捕捉全局上下文信息方面的优势。

复现

训练

  • 步骤1:训练基础模型

运行如下的命令:

python -m torch.distributed.launch --nproc_per_node 8 tools/train.py \--batch 128 \--conf configs/gold_yolo-n.py \--data data/coco.yaml \--epoch 300 \--fuse_ab \--use_syncbn \--device 0,1,2,3,4,5,6,7 \--name gold_yolo-n

  • 步骤2:自蒸馏训练

运行如下的命令:

python -m torch.distributed.launch --nproc_per_node 8 tools/train.py \--batch 128 \--conf configs/gold_yolo-n.py \--data data/coco.yaml \--epoch 300 \--device 0,1,2,3,4,5,6,7 \--use_syncbn \--distill \--teacher_model_path runs/train/gold_yolo_n/weights/best_ckpt.pt \--name gold_yolo-n

测试

运行如下发命令:

python tools/eval.py --data data/coco.yaml --batch 32 --weights weights/Gold_s_pre_dist.pt --task val --reproduce_640_eval

推理结果

模型部分推理结果展示如下:

可以看到,模型具有相当高的准确性。

总结

Gold-YOLO是一种新型高效的目标检测模型,它通过引入聚合和分发机制显著提升了多尺度特征融合的能力。Gold-YOLO通过其创新的GD机制,在目标检测领域实现了最佳性能,尤其是在处理多尺度物体时。该模型的高效性和准确性使其成为边缘设备部署的理想选择。

GD机制不仅在目标检测任务中表现出色,还在实例分割和语义分割等其他视觉任务中显示出良好的适应性和有效性。

总体而言,Gold-YOLO通过其先进的GD机制和无监督预训练策略,在目标检测领域提供了一个高效且准确的解决方案,为未来的研究和应用奠定了坚实的基础。

相关文章:

“Gold-YOLO:基于聚合与分发机制的高效目标检测新范式”

🏡作者主页:点击! 🤖编程探索专栏:点击! ⏰️创作时间:2024年12月26日8点00分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文源地址(有视频&#xf…...

神经网络-AlexNet

AlexNet是在2012年的ImageNet竞赛后,整理发表的文章,也是对CNN网络的衍生。 网络结构 AlexNet网络结构如下图所示,网络分为了上下两部分,对应两个不同的GPU训练,可以更好的利用GPU算力。只有在特殊的网络层后&#x…...

Hutool 发送 HTTP 请求的几种常见写法

最简单的 GET 请求: String result HttpUtil.get("https://www.baidu.com");带参数的 GET 请求: // 方法1: 直接拼接URL参数 String result HttpUtil.get("https://www.baidu.com?name张三&age18");// 方法2: 使用 HashMap…...

【Linux】进度条

本文中,我们来写一个进度条。 本文大纲: 写一个命令行版的进度条。 1.回车换行 2.缓冲区问题(本文不深究) ​ 2.1测试代码 3.写一个什么样的进度条? ​ version1 ​ version2 回车换行 这俩不是一个概念&…...

【zookeeper核心源码解析】第四课:客户端与服务端读写的io核心流程

系列文章目录 【zookeeper核心源码解析】第一课:zk启动类核心流程序列图 【zookeeper核心源码解析】第二课:俯瞰QuorumPeer启动核心流程,实现选举关键流程 【zookeeper核心源码解析】第三课:leader与follower何时开始同步&#…...

强化学习蘑菇书笔记

绪论 强化学习就是一个智能体在一个不确定的环境中最大化它的奖励。智能体在一个环境中获取某个状态后,做一个动作,也称为决策,在环境中执行这个决策以后,会有一个奖励。尽可能多地获得更多的奖励。 强化学习概述 强化学习与监…...

《机器学习》——线性回归模型

文章目录 线性回归模型简介一元线性回归模型多元线性回归模型误差项分析一元线性模型实例完整代码 多元线性模型实例完整代码 线性回归模型简介 线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。 相关关系&…...

Linux(Centos 7.6)网卡信息没有了问题处理

1.问题现象 虚拟机打开后&#xff0c;使用ifconfig查看IP信息&#xff0c;虚拟机默认的网卡名称是ens33&#xff0c;ifconfig没有看到相关问题&#xff0c;远程连接工具Xshell也不能正常访问该虚拟机。 [rootnode1 ~]# ifconfig lo: flags73<UP,LOOPBACK,RUNNING> mtu…...

WEB攻防-通用漏洞-文件上传-js验证-MIME验证-user.ini-语言特征

目录 定义 1.前端验证 2.MIME验证 3.htaccess文件和.user. ini 4.对内容进行了过滤&#xff0c;做了内容检测 5.[ ]符号过滤 6.内容检测php [] {} ; 7.()也被过滤了 8.反引号也被过滤 9.文件头检测 定义 文件上传漏洞是指攻击者上传了一个可执行文件&#xff08;如木马…...

mybatis-plus代码生成器

<!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><!--mybatis-plus-generator 生成器--><depende…...

12.24-12.28Mysql锁阅读笔记

1.Mysql的锁有哪些种类 全局锁&#xff0c; 通过flush tables with read lock 应用场景是全局备份&#xff0c;备份的时候如果有两个表&#xff0c;备份 先备份了用户表&#xff0c;然后用户了商品&#xff0c;再备份商品表 那么商品表库存减少了&#xff0c;然而用户表的育儿…...

支持最新 mysql9的workbench8.0.39 中文汉化教程来了

之前在 B 站上发布了 mysql8 workbench 汉化教程&#xff0c;一年多来帮助很多初学者解决了不熟悉英文的烦恼。 汉化视频可以访问&#xff1a; 2024最新版mysql8.0.39中文版mysql workbench汉化 中文升级 旧版汉化报错解决_哔哩哔哩_bilibili MySql Workbench汉化_哔哩哔哩_…...

golang连接jenkins构建build

1.安装jenkins依赖 go get github.com/bndr/gojenkins2.代码 import ("context""file/utils/logs""github.com/bndr/gojenkins""github.com/gin-gonic/gin""net/http""time" )// 接收单个静态文件上线参数 type…...

SCAU高程进阶题(自用)

18711 字符串去重 Description 一个完全由小写字母组成的长度为n的字符串&#xff0c;现在要求你去除所有重复的字母&#xff0c;并将剩下的字母按从小到大的次序输出。 如输入baaadccaab&#xff0c;输出abcd。 输入格式 第一行一个整数n&#xff0c;表示字符串长度(0<n&…...

基于STM32F103控制L298N驱动两相四线步进电机

文章目录 前言一、模块参数二、接口说明三、准备工作四、直流电机驱动引脚接线效果展示 五、两相四线步进电机驱动步进电机相关概念拍数驱动时序引脚接线效果展示 六、参考示例 前言 L298N 是一种常见的双 H 桥电机驱动模块&#xff0c;广泛用于驱动直流电机和步进电机。它基于…...

libreoffice在Windows和Linux环境的安装和结合Springboot使用教程

前言&#xff1a; 在公司做开发时&#xff0c;遇到一个需求&#xff0c;要求上传的文件有图片&#xff0c;也有word和pdf。预览信息时&#xff0c;既要求能水印展示出来&#xff0c;又要求能大图水印预览。思索许久&#xff0c;我决定采取全部打水印然后转成图片Base64&#x…...

前端开发 -- 自动回复机器人【附完整源码】

一&#xff1a;效果展示 本项目实现了一个简单的网页聊天界面&#xff0c;用户可以在输入框中输入消息&#xff0c;并点击发送按钮或按下回车键来发送消息。机器人会根据用户发送的消息内容&#xff0c;通过关键字匹配来生成自动回复。 二&#xff1a;源代码分享 <!DOCTYP…...

vue+echarts实现疫情折线图

效果&#xff1a; 代码&#xff1a; <<template><div><div id"left1" style "height:800px;width:100%"></div></div> </template><script> //疫情数据//export default {data() {return {data:{//疫情数据…...

服务器nfs文件共享

1. 配置 NFS 服务器(NFS Server) 在 Ubuntu/Debian 上: sudo apt update sudo apt install nfs-kernel-server在 CentOS/RHEL 上: sudo yum install nfs-utils1.2 创建共享目录 选择一个要共享的目录,并确保该目录的权限正确设置。例如,假设我们要共享 /srv/nfs 目录…...

基于Vue+SSM+SpringCloudAlibaba的科目课程管理系统

功能1&#xff1a;科目列表 功能2&#xff1a;条件查询 功能3&#xff1a;分页查询 功能4&#xff1a;excel批量导入 功能5&#xff1a;修改 功能6&#xff1a;删除...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

synchronized 学习

学习源&#xff1a; https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖&#xff0c;也要考虑性能问题&#xff08;场景&#xff09; 2.常见面试问题&#xff1a; sync出…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

MFC内存泄露

1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

【生成模型】视频生成论文调研

工作清单 上游应用方向&#xff1a;控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性&#xff1a; 隐藏字段的实现细节 提供对字段的受控访问 访问控制&#xff1a; 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性&#xff1a; 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑&#xff1a; 可以…...