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

Yolo-World网络模型结构及原理分析(三)——RepVL-PAN

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
    • 1. 网络结构
    • 2. 特征融合
    • 3. 文本引导(Text-guided)
    • 4. 图像池化注意力(Image-Pooling Attention)
    • 5. 区域文本匹配(Region-Text Matching)
  • 总结


前言

通过前边的YOLO检测器和文本编码器分别得到了特征图像和词向量,那么如何实现二者的融合,以达到目标检测的目的呢?就是通过yolo-world中提出的新的网络架构RepVL-PAN,下边我们来研究一下他是如何工作的。


RepVL-PAN(Re-parameterizable Vision-Language Path Aggregation Network)是YOLO-World中的一个核心网络结构,它通过融合视觉信息和语言信息来提升目标检测的性能。

1. 网络结构

  • RepVL-PAN基于YOLO架构,并采用特征金字塔网络(FPN)来提取多尺度图像特征,提取图像特征的部分已经在前文讲过,详情参考:Yolo-World网络模型结构及原理分析(一)——YOLO检测器。
  • 它利用Transformer文本编码器(例如CLIP模型)来处理输入文本,生成文本嵌入。这部分也在前文讲过,详情参考:Yolo-World网络模型结构及原理分析(二)——文本编码器

2. 特征融合

通过Top-Down和Bottom-Up的路径来建立特征金字塔,这有助于在不同尺度上融合图像特征。

  • (1)Top-Down Path:从高层特征图向低层特征图传递信息。这种路径通过上采样操作(如反卷积或插值)将高层的抽象特征图扩展到低层的空间分辨率上。这样可以将高层特征与低层特征结合,使得模型在检测较小目标时具有更好的精度。
  • (2)Bottom-Up Path:从低层特征图向高层特征图传递信息。这种路径通过卷积操作将低层的细节特征图逐步融合到高层特征图中,从而保留更多的细节信息。这样可以帮助模型在检测较大目标时更好地保留细节信息。
  • (3)引入Text-guided Cross Stage Partial Layers(T-CSPLayer),这是一种扩展的CSPLayer,它将文本嵌入整合到多尺度图像特征中。图示中的C3,C4,C5就是从YOLO检测器之后获取到的三种不同尺度的特征图,尺寸分别为80x80,40x40,20x20三种尺寸。
    融合过程

3. 文本引导(Text-guided)

  • T-CSPLayer使用文本嵌入来引导图像特征的更新,通过在CSPLayer后应用max-sigmoid注意力机制来聚合文本特征。
    T-CSPLayer结构如图所示:T-CSPLayer
  • (1)首先将传进来的特征图进行Split切分,比如一开始传入的特征图为40x40x512,那么切分之后一份是40x40x256,另一份也是40x40x256。
  • (2)其中一份进入Dark Bottleneck,进行一次普通卷积:使用较小的卷积核(如 1x1 卷积)来减少通道数和计算复杂度。可以有效地压缩特征图中的信息,同时保留重要的特征。然后进行深度可分离卷积:这种卷积方式将标准卷积拆分为深度卷积和逐点卷积两个步骤,从而进一步减少计算量和参数数量。深度卷积在每个通道上独立进行卷积操作,而逐点卷积则在通道间进行卷积。最后进行残差连接来增强模型的训练能力和稳定性。
  • (3)从Dark Bottleneck输出特征图之后进入Max-Sigmoid,同时text文本向量也进入Max-Sigmoid,在Max-Sigmoid中的处理过程是这样的:比如传进来的特征图是40x40x256,文本向量是3x256(3个词汇:“男”“女”“狗”),在特征图中有40x40=1600个像素点,每个像素点与3个文本提示词逐一计算,看哪个像素点与文本提示词的相关性最大,就给哪个像素点更多的权重(sigmoid)。也就是通过这个操作找到特征图中与文本提示词相关性更大的区域。这样就可以实现文本对图像的更新
  • (4)从Max-Sigmoid出来的融合图再与最开始切分之后的特征图拼接,做一个残差连接,生成含有更丰富信息的特征图(注意这里还是特征图,只是有些像素点的权重更大)。

4. 图像池化注意力(Image-Pooling Attention)

  • 为了增强文本嵌入的图像意识,RepVL-PAN使用图像池化操作来更新文本嵌入。
  • 通过在多尺度特征上应用最大池化,生成小区域的patch tokens,然后使用多头注意力机制来更新文本嵌入。

Image-Pooling Attention结构如图所示:
Image-Pooling Attention

  • (1)多尺度特征聚合:在I-Pooling Attention中,首先对图像进行多尺度特征提取。这意味着模型会从不同分辨率的图像中提取特征,以捕捉图像的不同层次的信息。
  • (2)最大池化操作:在提取多尺度特征后,使用最大池化(max pooling)操作来聚合这些特征。最大池化是一种常用的池化技术,它选择每个池化窗口内的最大值作为输出,这有助于保留图像中最重要的信息。
  • (3)生成Patch Tokens:通过最大池化操作,将每个特征图(80x80,40x40,20x20三种尺寸)聚合成3x3的区域,每个区域生成一个patch token。这样,对于一个给定的图像,总共会生成27个patch tokens(3x3),每个token都是一个特征向量,其维度为D。
  • (4) 更新文本嵌入:生成的patch tokens随后用于更新文本嵌入。这是通过多头注意力机制实现的。具体来说,原始的文本嵌入w与patch tokens (含有文本信息w和图像信息token的向量)进行多头注意力计算,然后将结果加到原始文本嵌入上,得到更新后的文本嵌入w’,实现用图像更新文本嵌入,模型可以在更新文本嵌入时同时考虑来自图像的多个不同区域的特征。

5. 区域文本匹配(Region-Text Matching)

区域-文本匹配的目的是将检测到的图像区域(bounding boxes)与文本中提到的对象类别或名词进行匹配的过程。
区域文本匹配图示:
区域文本匹配

  • (1) 通过RepVL-PAN网络之后,输出的P3 P4 P5是含有语义信息的特征图,将特征图输入到不同的Head中,首先通过BoxHead预测图像中每个对象的位置,这些位置以边界框(bounding boxes)的形式表示,每个边界框包含了对象的位置和大小信息。
  • (2)除了边界框,检测器还会为每个检测到的对象生成一个对象嵌入向量(object embeddings)。这个嵌入向量是一个高维空间中的点,它编码了对象的特征信息(每个对象含有语义信息“男”“女”“狗”),使得不同对象之间可以进行比较和区分
  • (3)文本对比头(Text Contrastive Head)
    通过RepVL-PAN网络之后得到的Image-aware Embeddings也含有了图像信息,object embeddings中含有了语义信息。利用文本对比头计算的相似度分数来匹配文本中提到的类别或名词与图像中的对象。找到对象嵌入与哪个文本嵌入之间的相似性最大。这样,模型不仅能够识别图像中的对象,还能够理解这些对象与用户输入的文本之间的关系。
    也就是说YOLO-World 为每个边界框分配一个最匹配的类别或名词。这是基于相似度计算结果,模型会选择与对象嵌入最相似的文本嵌入所对应的类别或名词。
  • (4)零样本学习能力
    YOLO-World 的一个关键特点是其零样本学习能力。这意味着即使在训练数据中没有见过某些类别或名词,模型也能够通过其语言和视觉的联合表示来识别和匹配这些新对象。

总结

通过RepVL-PAN网络,YOLO-World 展示了如何有效地结合视觉信息和语言描述,以实现对图像内容的深入理解和准确的自动标注,为开放词汇表对象检测领域提供了一种新的解决方案。

相关文章:

Yolo-World网络模型结构及原理分析(三)——RepVL-PAN

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言1. 网络结构2. 特征融合3. 文本引导(Text-guided)4. 图像池化注意力(Image-Pooling Attention)5. 区域文本匹配&…...

代码随想录——一和零(Leetcode474)

题目链接 0-1背包 class Solution {public int findMaxForm(String[] strs, int m, int n) {// 本题m,n为背包两个维度// dp[i][j]:最多右i个0和j个1的strs的最大子集大小int[][] dp new int[m 1][n 1];// 遍历strs中字符串for(String str : strs){int num0 …...

力扣题解(组合总和IV)

377. 组合总和 Ⅳ 给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 思路: 本题实质上是给一些数字,让他们在满足和是targ…...

Postgresql主键自增的方法

Postgresql主键自增的方法 一.方法(一) 使用 serial PRIMARY KEY 插入数据 二.方法(二) 🎈边走、边悟🎈迟早会好 一.方法(一) 使用 serial PRIMARY KEY 建表语句如下&#xf…...

【源码阅读】Sony的go breaker熔断器源码探究

文章目录 背景源码分析总结 背景 在微服务时代,服务和服务之间调用、跨部门调用都是很常见的事,但这些调用都存在很多不确定因素,如核心服务A依赖的部门B服务挂掉了,那么A本身的功能将会受到直接的影响,而这些都会影响…...

LeetCode题(66,69,35,88)--《c++》

66.加一 // // Created by wxj05 on 2024/7/20. // //法一 class Solution { public:vector<int> plusOne(vector<int>& digits) {bool carry true; // 进位标志for (int i digits.size() - 1; i > 0 && carry; --i) {digits[i] 1;carry digit…...

来参与“向日葵杯”全国教育仿真技术大赛~

可点击进行了解&#xff1a;“向日葵杯”全国教育仿真技术大赛 (sunmooc.cn) 本次大赛共分为四个赛道&#xff1a;自主命题赛道、教育知识图谱设计赛道、FPGA硬件扑克牌对抗赛道、EasyAR元宇宙空间设计赛道。 参赛对象 &#xff1a; 具有正式学籍的在校研究生&#xff0c;本科…...

SQL每日一题:删除重复电子邮箱

题干 表: Person -------------------- | Column Name | Type | -------------------- | id | int | | email | varchar | -------------------- id 是该表的主键列(具有唯一值的列)。 该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。 编写解决方案 删除 所有重复…...

3、宠物商店智能合约实战(truffle智能合约项目实战)

3、宠物商店智能合约实战&#xff08;truffle智能合约项目实战&#xff09; 1-宠物商店环境搭建、运行2-webjs与宠物逻辑实现3-领养智能合约初始化4-宠物领养实现5-更新宠物领养状态 1-宠物商店环境搭建、运行 https://www.trufflesuite.com/boxes/pet-shop 这个还是不行 或者…...

数据库系列

目录 一、数据库的概念和作用 1.数据库的特点 2.数据模型 二、数据库系统 1.数据库管理系统 2.数据库的基本操作 一、数据库的概念和作用 数据库是指长期存储在计算机内&#xff0c;有组织的、可共享的数据集合。它可视为一个电子化的文件柜&#xff0c;用来存储电子文件…...

极狐GitLab如何启用和配置PlantUML?

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…...

Shell 构建flutter + Android 生成Apk

具体步骤 #shell 具体实现和说明如下: echo "build_start_apk!" echo "编译此脚本的前提条件如下:" #在Android 项目的主工程下,进入主工程文件夹,创建build-android 文件夹,在其文件夹下有build-android.sh文件,此文件就是整个文章的脚本内容(…...

如何用手机压缩视频?手机压缩视频方法来了

高清视频的大文件大小常常成为分享和存储的障碍&#xff0c;尤其是在数据流量有限或存储空间紧张的情况下。幸运的是&#xff0c;无论是智能手机还是个人电脑&#xff0c;都有多种方法可以帮助我们轻松压缩视频文件&#xff0c;以适应不同的需求和情境。本文将介绍如何在手机上…...

Linux下如何安装配置Elastic Stack日志收集系统

安装和配置Elastic Stack日志收集系统&#xff0c;包括Elasticsearch、Logstash和Kibana&#xff0c;是一个相对复杂的过程。本篇文章将逐步引导您完成整个过程。 安装Java Elasticsearch、Logstash和Kibana都需要Java运行环境。首先&#xff0c;您需要在Linux系统上安装Java…...

【深入C++】map和set的使用

文章目录 C 中的容器分类1. 顺序容器2. 关联容器3. 无序容器4. 容器适配器5. 字符串容器6. 特殊容器 set1.构造函数2.迭代器3.容量相关的成员函数4.修改器类的成员函数5.容器相关操作的成员函数 multiset1.equal_range map1.初始化相关的函数2.迭代器3.容量相关的成员函数4.访问…...

跟代码执行流程,读Megatron源码(二)训练入口pretrain_gpt.py

Megatron-LM默认支持GPT、T5、BERT等多个常见模型的预训练&#xff0c;当下大模型流行&#xff0c;故以pretrain_gpt.py为例做源码的走读。 一. 启动pretrain_gpt.py pretrain_gpt.py为GPT类模型的训练入口&#xff0c;它通过命令行形式被调用&#xff0c;其精确执行路径位于M…...

MATLAB练习题——矩阵(2)

逻辑运算 a [5 0.2 0 -8 -0.7 ]&#xff0c;在进行逻辑运算时&#xff0c;a 相当于什么样的逻辑量。 相当于 a[1 1 0 1 1] 角度运算 在 sin(x)运算中&#xff0c;x 是角度还是弧度&#xff1f; 在 sin(x)运算中&#xff0c;x 是弧度&#xff0c;MATLAB 规定所有…...

arm、AArch64、x86、amd64、x86_64 的区别

arm vs AArch64 vs amd64 vs x86_64 vs x86 的区别 当涉及到 CPU 的时候&#xff0c;有许多术语&#xff1a;AArch64、x86_64、amd64、arm 等等。了解它们是什么以及它们之间的区别。 当你查看数据表或软件下载页面时是否被 ARM、AArch64、x86_64、i386 等术语混淆&#xff1f;…...

【SpringBoot】 jasypt配置文件密码加解密

目前我们对yml配置文件中的密码都是明文显示&#xff0c;显然这不安全&#xff0c;有的程序员离职了以后可能会做一些非法骚操作&#xff0c;所以我们最好要做一个加密&#xff0c;只能让领导架构师或者技术经理知道这个密码。所以这节课就需要来实现一下。 我们可以使用jasypt…...

复杂网络的任意子节点的网络最短距离

复杂网络的任意子节点的网络最短距离 题目要求介绍 本文算法测试用的数据集为空手道俱乐部&#xff0c;其中空手道俱乐部的数据集可通过这个链接进行下载•http://vlado.fmf.uni-lj.si/pub/networks/data/Ucinet/UciData.htm#zachary 摘要 本文旨在解决复杂网络中任意子节点…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

掌握 HTTP 请求:理解 cURL GET 语法

cURL 是一个强大的命令行工具&#xff0c;用于发送 HTTP 请求和与 Web 服务器交互。在 Web 开发和测试中&#xff0c;cURL 经常用于发送 GET 请求来获取服务器资源。本文将详细介绍 cURL GET 请求的语法和使用方法。 一、cURL 基本概念 cURL 是 "Client URL" 的缩写…...

node.js的初步学习

那什么是node.js呢&#xff1f; 和JavaScript又是什么关系呢&#xff1f; node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说&#xff0c; 需要在node.js的环境上进行当JavaScript作为前端开发语言来说&#xff0c;需要在浏览器的环境上进行 Node.js 可…...

医疗AI模型可解释性编程研究:基于SHAP、LIME与Anchor

1 医疗树模型与可解释人工智能基础 医疗领域的人工智能应用正迅速从理论研究转向临床实践,在这一过程中,模型可解释性已成为确保AI系统被医疗专业人员接受和信任的关键因素。基于树模型的集成算法(如RandomForest、XGBoost、LightGBM)因其卓越的预测性能和相对良好的解释性…...