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

🏡作者主页:点击!
🤖编程探索专栏:点击!
⏰️创作时间:2024年12月26日8点00分

神秘男子影,
秘而不宣藏。
泣意深不见,
男子自持重,
子夜独自沉。
论文源地址(有视频):
链接
https://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。以下是这种方法的详细步骤和原理:
- 掩码图像生成:首先,从原始图像中随机选择一定比例的像素,并将这些像素的值设置为零或某个特定的掩码值,从而生成掩码图像。
- 稀疏卷积编码:由于掩码操作导致图像的大部分区域缺失,模型需要能够处理这种不规则和随机的掩码输入。在Gold-YOLO中,作者使用稀疏卷积来编码未被掩码的像素,将它们视为3D点云的稀疏体素。
- 层次化解码器:为了从多尺度编码的特征中重建图像,作者采用了类似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分 神秘男子影, 秘而不宣藏。 泣意深不见, 男子自持重, 子夜独自沉。 论文源地址(有视频…...
神经网络-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.问题现象 虚拟机打开后,使用ifconfig查看IP信息,虚拟机默认的网卡名称是ens33,ifconfig没有看到相关问题,远程连接工具Xshell也不能正常访问该虚拟机。 [rootnode1 ~]# ifconfig lo: flags73<UP,LOOPBACK,RUNNING> mtu…...
WEB攻防-通用漏洞-文件上传-js验证-MIME验证-user.ini-语言特征
目录 定义 1.前端验证 2.MIME验证 3.htaccess文件和.user. ini 4.对内容进行了过滤,做了内容检测 5.[ ]符号过滤 6.内容检测php [] {} ; 7.()也被过滤了 8.反引号也被过滤 9.文件头检测 定义 文件上传漏洞是指攻击者上传了一个可执行文件(如木马…...
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的锁有哪些种类 全局锁, 通过flush tables with read lock 应用场景是全局备份,备份的时候如果有两个表,备份 先备份了用户表,然后用户了商品,再备份商品表 那么商品表库存减少了,然而用户表的育儿…...
支持最新 mysql9的workbench8.0.39 中文汉化教程来了
之前在 B 站上发布了 mysql8 workbench 汉化教程,一年多来帮助很多初学者解决了不熟悉英文的烦恼。 汉化视频可以访问: 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的字符串,现在要求你去除所有重复的字母,并将剩下的字母按从小到大的次序输出。 如输入baaadccaab,输出abcd。 输入格式 第一行一个整数n,表示字符串长度(0<n&…...
基于STM32F103控制L298N驱动两相四线步进电机
文章目录 前言一、模块参数二、接口说明三、准备工作四、直流电机驱动引脚接线效果展示 五、两相四线步进电机驱动步进电机相关概念拍数驱动时序引脚接线效果展示 六、参考示例 前言 L298N 是一种常见的双 H 桥电机驱动模块,广泛用于驱动直流电机和步进电机。它基于…...
libreoffice在Windows和Linux环境的安装和结合Springboot使用教程
前言: 在公司做开发时,遇到一个需求,要求上传的文件有图片,也有word和pdf。预览信息时,既要求能水印展示出来,又要求能大图水印预览。思索许久,我决定采取全部打水印然后转成图片Base64&#x…...
前端开发 -- 自动回复机器人【附完整源码】
一:效果展示 本项目实现了一个简单的网页聊天界面,用户可以在输入框中输入消息,并点击发送按钮或按下回车键来发送消息。机器人会根据用户发送的消息内容,通过关键字匹配来生成自动回复。 二:源代码分享 <!DOCTYP…...
vue+echarts实现疫情折线图
效果: 代码: <<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:科目列表 功能2:条件查询 功能3:分页查询 功能4:excel批量导入 功能5:修改 功能6:删除...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
MySQL的pymysql操作
本章是MySQL的最后一章,MySQL到此完结,下一站Hadoop!!! 这章很简单,完整代码在最后,详细讲解之前python课程里面也有,感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...
