YOLO-World技术小结

info
paperhttps://arxiv.org/abs/2401.17270
codehttps://github.com/AILab-CVC/YOLO-World
org腾讯
demohttps://huggingface.co/spaces/stevengrove/YOLO-World
个人博客位置http://www.myhz0606.com/article/yolo_world

1 Motivation

这篇文章从计算效率的角度解决开集目标检测问题(open-vocabulary object detection,OVD)。

在这里插入图片描述

在这里插入图片描述

2 Method

经典的目标检测的instance annotation是bounding box和类别对 Ω = { B i , c i } i = 1 N \Omega = \{ B_i, c_i\}^{N}_{i=1} Ω={Bi,ci}i=1N。对于OVD来说,此时的注释变为 Ω = { B i , t i } i = 1 N \Omega = \{ B_i, t_i\}^{N}_{i=1} Ω={Bi,ti}i=1N,此处的 t t t可以是类别名、名词短语、目标描述等。此外YOLO-Word还可以根据传入的图片和text,输出预测的box及相关的object embedding。

2.1 模型架构

在这里插入图片描述

模型架构由3个部分组成

  • YOLO backbone,用于提取多尺度的图片特征
  • text encoder,用于提取名词短语的特征。流程如下:给定一段text,首先会提取里面的名词,随后将提取的每个名词短语输入CLIP中得到向量。可以知道text encoder的输出 W W W ∈ R C × D \in \mathbb{R} ^{C \times D} RC×D, C C C是名词短语的数量, D D D是embedding的维度
  • Vision-Language PAN。用于预测bounding box和object embedding。其架构如下图所示,核心组件有两个,分别为Text-guided CSPLayerImage-Pooling Attention。下面对其进行简单介绍

Text-guided CSPLayer

该层的目的是为了用文本向量来强化图片特征。具体计算公式如下

X l ′ = X l ⋅ δ ( max ⁡ j ∈ { 1.. C } ( X l W j ⊤ ) ) ⊤ (1) X _ { l } ^ { \prime } = X _ { l } \cdot \delta ( \max _ { j \in \{ 1 . . C \} } ( X _ { l } W _ { j } ^ { \top } ) ) ^ { \top } \tag{1} Xl=Xlδ(j{1..C}max(XlWj))(1)

式中: X l   ∈   R   H × W × D   ( l   ∈   { 3 , 4 , 5 } ) X _ { l } \, \in \, \mathbb { R } ^ { \, H \times W \times D } \, ( l \, \in \, \{ 3 , 4 , 5 \} ) XlRH×W×D(l{3,4,5}) 为多尺度的图片特征。 W j W_j Wj为名词 j j j的text embedding。 δ \delta δsigmoid函数。

在这里插入图片描述

**Image-Pooling Attention**

该层的目的是为了用图片特征来强化文本向量。具体做法为:将多尺度图片特征通过max pooling,每个尺度经过max-pooling后的size ∈ R 3 × 3 × D \in \mathbb{R} ^ {3 \times 3 \times D} R3×3×D即9个patch token,因为有3个尺度,总计27个patch token,记作 X ~ ∈ R 27 × D \tilde { X } \in \mathbb{R}^{27 \times D} X~R27×D 。随后将这27个patch token作为 cross-attention的key,value,将text embedding作为query进行特征交互,从而得到image-aware的文本特征向量。

W ′ = W + M u l t i H e a d A t t e n t i o n ( W , X ~ , X ~ )    (2) W ^ { \prime } = W + \mathrm { M u l t i H e a d } \mathrm { A t t e n t i o n } ( W , \tilde { X } , \tilde { X } ) \; \tag{2} W=W+MultiHeadAttention(W,X~,X~)(2)

2.2 优化目标

优化目标分为两部分:其一是针对语义的region-text 对比损失 L c o n \mathcal{L} _ {\mathrm{con}} Lcon,其二是针对检测框的IOU loss L i o u \mathcal{L}_{\mathrm{iou}} Liou和distributed focal loss L f l d \mathcal{L}_{\mathrm{fld}} Lfld,总体优化目标如下:

L ( I )    =    L c o n   +   λ I   ⋅   ( L i o u   +   L d f l ) , (3) { \mathcal L } ( I ) \; = \; { \mathcal L } _ { \mathrm { c o n } } \, + \, \lambda _ { I } \, \cdot \, ( { \mathcal L } _ { \mathrm { i o u } } \, + \, { \mathcal L } _ { \mathrm { d f l } } ) , \tag{3} L(I)=Lcon+λI(Liou+Ldfl),(3)

2.3 一些细节

2.3.1 如何大批量自动化生成训练标注

目前我们可以很方便的拿到图片对数据,此处的目标是如何将图文对数据转化成,图片-instance annotation ( Ω = { B i , t i } i = 1 N \Omega = \{ B_i, t_i\}^{N}_{i=1} Ω={Bi,ti}i=1N)的形式

作者的方法如下:

import string
import nltk
from nltk import word_tokenize, pos_tag

nltk.download('punkt')
nltk.download('averaged_perceptron_tagger')

def extract_noun_phrases(text):
    
    tokens = word_tokenize(text)
    tokens = [token for token in tokens if token not in string.punctuation]
    tagged = pos_tag(tokens)
    print(tagged)
    grammar = 'NP: {<DT>?<JJ.*>*<NN.*>+}'
    cp = nltk.RegexpParser(grammar)
    result = cp.parse(tagged)
    
    noun_phrases = []
    for subtree in result.subtrees():
        if subtree.label() == 'NP':
            noun_phrases.append(' '.join(t[0] for t in subtree.leaves()))
    
    return noun_phrases

[STEP2]: 将图片和提取的名词短语输入到GLIP中检测bounding box

[STEP3]: 将(region_img, region_text)和(img, text)送入到CLIP中计算相关度,如果相关度低,则过滤掉这个图片(作者制定的规则是 s = s i m g ∗ s r e g i o n > 0.3 s = \sqrt { s ^ { i m g } * s ^ { r e g i o n }} > 0.3 s=simgsregion >0.3)。再通过NMS过滤掉冗余的bounding box。

2.3.2 Vision-Language PAN 的重参数化

当推理的词表是固定的时候,此时text encoder的输出是固定的, W ∈ R C ′ × D W\in \mathbb{R} ^{C' \times D} WRC×D , C ′ C' C是offline词表的大小, D D D是embedding的维度。此时可以对Vision-Language PAN 层进行重参数化。

Text-guided CSPLayer 的重参数化

由于此时的 W W W是固定的,可以将其reshape成 W ∈ R C ′ × D × 1 × 1 W \in \mathbb{R} ^{C' \times D \times 1 \times 1} WRC×D×1×1随后作为1x1卷积的权重,此时式1可以转化为:

X ′ = X ⊙ δ ( max ⁡ ( C o n v ( X , W ) , d i m = 1 ) ) , (4) X ^ { \prime } = X \odot \delta ( \max ( \mathtt{Conv} ( X , W ) , \mathtt { d i m } = 1 ) ) , \tag{4} X=Xδ(max(Conv(X,W),dim=1)),(4)

⊙ \odot 表示包含reshape和transpose的矩阵乘法运算

**Image-Pooling Attention 的重参数化**

作者表示可以将式2简化为:

W ′ = W + S o f t m a x ( W ⊙ X ~ ) , d i m = − 1 ) ⊙ W , (5) W ^ { \prime } = W + \mathtt { S o f t m a x } ( W \odot \tilde { X } ) , \mathtt { d i m } = - 1 ) \odot W , \tag{5} W=W+Softmax(WX~),dim=1)W,(5)

论文给出的这个公式似乎有点问题,dim=-1不确定对应哪个操作?,此公式位于论文式6。
另外 ⊙ \odot 这个符号似乎有点歧义,在式4中, ⊙ \odot 应该是对应元素相乘(Hadamard product),式5中应该是普通矩阵乘法 (matmul product

3 Result

3.1 YOLO world的zero-shot能力

下表展现了YOLO-world在LVIS数据集上的zero-shot能力,可见效果优于当前Sota,但速度更快(评估硬件:NVIDIA V100 GPU w/o TensorRT)。

在这里插入图片描述

3.2 预训练数据集对效果的影响

Object365GlodG就能达到较好的效果。加入CC3M效果提升不是很大,可能是因为CC3M的标签是用2.3.1节的方法生成的,含有较多噪声导致。

在这里插入图片描述

3.3 text encoder对效果的影响

如果用轻量backbone最好结合微调。CLIP本身预训练的数据规模特别大,如果微调数据不多的话,frozen的效果反而好。

在这里插入图片描述

5 参考文献

YOLO-World: Real-Time Open-Vocabulary Object Detection

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ping 8.8.8.8和ping www.baidu.com都OK,但是打不开网页

ping 8.8.8.8和ping www.baidu.com都OK&#xff0c;但是打不开网页 打开设置 -> 网络 找到IPV4, DNS栏输入 8.8.8.8 , apply 设置里界面变成这样 然后网页就能加载了

开源软件的利弊

目录 开源软件 优势 免费 透明 可更改 可协作 影响力 坏处 安全隐患 良莠不齐 学习成本 持续性问题 未知风险 开源软件 开源软件是一种基于开放协作和共享的软件开发模式&#xff0c;其利弊对于软件产业和社会发展具有重要意义 优势 免费 谁能拒绝不要钱的东西…

C# redis 菜鸟级别 订阅与频道,发送消息

// 建立 Redis 连接 发送部分代码 using StackExchange.Redis; ConnectionMultiplexer redis ConnectionMultiplexer.Connect("127.0.0.1:6379,password123456"); // 获取发布者 ISubscriber publisher redis.GetSubscriber(); // 发布消息到指定频道 string c…

day4 2/21

1>使用多线程完成两个文件的拷贝&#xff0c;第一个线程拷贝前一半&#xff0c;第二个线程拷贝后一半&#xff0c;主线程回收两个线程的资源 #include<myhead.h> typedef struct Inof {const char*srcfile;const char*destfile;int start;int len; }inof;int do_len…

洗地机哪一款好用?洗地机热门品牌测评

虽然说现在市面上有很多洗地机牌子不断推陈出新&#xff0c;但是洗地机的功能使用总是不分你我&#xff0c;因为不管产品怎么变&#xff0c;一款优秀的洗地机都必须要具备良好的操控性能以及优秀的续航水平&#xff0c;另外在此基础上&#xff0c;继续考察其贴边清洁效果和杀菌…

【医学大模型】InMD-X:超精细化 + 内科医生的大语言模型

InMD-X&#xff1a;超精细化 内科医生的大语言模型 提出背景数据训练持续预训练监督式微调参数高效微调 提出背景 论文&#xff1a;https://arxiv.org/pdf/2402.11883.pdf 现有的医学语言模型往往将医疗健康视为一个单一领域&#xff0c;忽视了其复杂的子专业。 解法: 将内科…

【代码随想录python笔记整理】第十二课 · 位置互换

前言:本笔记仅仅只是对内容的整理和自行消化,并不是完整内容,如有侵权,联系立删。 一、变量交换的实现 这节我们讨论一个简单的问题——怎么交换两个变量的值。比如说,一个瓶子里是水,一个瓶子里是油,想要将两个瓶子中的东西互换,我们应该怎么做呢?要实现上述过程,我们…

测试环境搭建整套大数据系统(四:ubuntu22.4创建普通用户)

一&#xff1a;创建用户&#xff0c;修改密码&#xff0c;增加sudo权限。 useradd dolphinscheduler #输入密码 passwd dolphinscheduler # 配置 sudo 免密 sed -i $adolphinscheduler ALL(ALL) NOPASSWD: NOPASSWD: ALL /etc/sudoers sed -i s/Defaults requirett/#Defa…

【OpenSSH+Jenkins搭建项目自动化部署】

OpenSSHJenkins搭建项目自动化部署 一、Windows安装OpenSSH1.下载2.解压3.安装4.启停服务5.SSH免密登录 二、Jenkins安装1.下载2.安装启动3.登录 三、项目自动化部署1.SSH配置2.项目配置3.权限控制 一、Windows安装OpenSSH 1.下载 https://github.com/PowerShell/Win32-0penS…

2024,深层互联第二代IndoorLink领夹式讲解器面世!

新年之初&#xff0c;每一步都举足轻重。2024开年之际&#xff0c;资深讲解器厂家深层互联重磅推出第二代IndoorLink领夹式无线讲解器&#xff0c;各项性能指标全线升级&#xff0c;成为新的行业标杆&#xff0c;一经面世即引起巨大反响。 2023年2月&#xff0c;首代IndoorLin…

WSL2配置Linux、Docker、VS Code、zsh、oh my zsh

0. 写在前面 本篇笔记来自于UP主麦兜搞IT的合集视频Windows10开发环境搭建中的部分内容 1. 安装WSL2 按照微软官方文档进行操作&#xff0c;当然也可以直接wsl --install 也可以按照 旧版手动安装的步骤 来进行操作 选择安装的是Ubuntu 20.04 LTS 注&#xff1a;WSL默认安装…

SparkSQL学习01

目录 1.SparkSQL特点1.1易整合1.2统一的数据访问1.3兼容Hive1.4标准的数据连接 2 SparkSQL编程模型DataFrameDataSet2.1 SQL2.2 DataFrame是什么2.3 DataSet是什么2.4 RDD&#xff0c;DataSet&#xff0c;DataFrame 3 SparkSQL核心编程3.1 编程入口3.2 SparkSQL基本编程3.2.1编…

《VitePress 简易速速上手小册》第2章:Markdown 与页面创建(2024 最新版)

文章目录 2.1 Markdown 基础及扩展2.1.1 基础知识点解析2.1.2 重点案例&#xff1a;技术博客2.1.3 拓展案例 1&#xff1a;食谱分享2.1.4 拓展案例 2&#xff1a;个人旅行日记 2.2 页面结构与布局设计2.2.1 基础知识点解析2.2.2 重点案例&#xff1a;公司官网2.2.3 拓展案例 1&…

来看看投资界最关心的 Sora 几大问题

作者&#xff1a;苍何&#xff0c;前大厂高级 Java 工程师&#xff0c;阿里云专家博主&#xff0c;CSDN 2023 年 实力新星&#xff0c;土木转码&#xff0c;现任部门技术 leader&#xff0c;专注于互联网技术分享&#xff0c;职场经验分享。 &#x1f525;热门文章推荐&#xf…

嵌入式开发-STM32CUBEMX使用—基于STM32G431RBTx

嵌入式–基于STM32G431RBTX 1.利用STM32CUBEMX生成工程框架 2.利用STM32CUBEMX生成初始化代码文件 创建文件 选择外晶振 Clock Configuration配置 按如下数据配置 Project Manager配置 Code Generator 在进行如上配置后即可生成 运行 在运行前需要把启动文件加入Applicati…

游戏被攻击如何处理

游戏服务器被攻击对于开发者来说是很常见的事情&#xff0c;一般游戏刚上线或者日活比较高的时候&#xff0c;很容易成为攻击者的目标&#xff0c;为了利益&#xff0c;攻击者会利用大量肉鸡发起DDoS跟CC攻击&#xff0c;导致游戏服务器瘫痪、网络卡顿、或用户掉线等情况&#…

多个.C 文件关于全局变量如何使用

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

uniapp运动课程健身打卡系统微信小程序

考虑到实际生活中在我来运动管理方面的需要以及对该系统认真的分析,将系统分为小程序端模块和后台管理员模块&#xff0c;权限按管理员和用户这两类涉及用户划分。 (a) 管理员&#xff1b;管理员使用本系统涉到的功能主要有&#xff1a;首页、个人中心、用户管理、课程类别管理…

【知识分享】自动化测试首选接口自动化?

在分层测试的“金字塔”模型中&#xff0c;接口测试属于第二层服务集成测试范畴。 相比UI自动化测试而言&#xff0c;接口自动化测试收益更大&#xff0c;且容易实现&#xff0c;维护成本低&#xff0c;有着更高的投入产出比。因此&#xff0c;项目开展自动化测试的首选一般为接…

计网day5

六 传输层 6.1 传输层概述 6.2 UDP协议 6.3 TCP协议 TCP连接管理&#xff1a; TCP可靠传输&#xff1a; TCP拥塞控制&#xff1a;
最新文章