当前位置: 首页 > 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;删除...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...