【论文阅读】YOLO-World | 开集目标检测

在这里插入图片描述

  • Date:2024.02.22,Tencent AI Lab,华中科技大学
  • Paper:https://arxiv.org/pdf/2401.17270.pdf
  • Github:https://github.com/AILab-CVC/YOLO-World

论文解决的问题: 通过视觉语言建模和大规模数据集上的预训练来增强YOLO的开发词汇检测能力。

YOLO-world提出了一种prompt-then-detect范式:先提示,再检测。即将单词先转化成一系列离线的embedding,再将其重参数为模型的参数,参与到目标检测任务中来。相当于在部署的时候可以直接砍掉CLIP部分,直接把想要检测的类别的text embedding放到YOLO-World中进行推理,所以前向速度非常快。

文章目录

  • 1 文章贡献
  • 2 网络结构
    • 2.1 RepVL-PAN(Reparameterizable Vision-Language PAN)
    • 2.2 Text Contrastive Head
  • 3 训练过程
    • 3.1 损失函数
    • 3.2 训练策略
  • 4 训练数据的生成
  • 5 消融实验上的一些结论

1 文章贡献

  • 推出了一个可部署的开放词汇目标检测器YOLO-World,可用于部署。具有较强的零样本能力,在LVIS数据集上的map指标为35.4,fps为52(V100);
  • 提出了一个可重参数化的网络的结构RepVL-PAN来连接视觉和文本特征;

2 网络结构

在这里插入图片描述

  • text encoder使用的预训练的CLIP的text encoder,当文本是描述时,使用n-gram算法提取名词
  • 文本的特征于图像的特征(multi-scale)在RepVL-PAN结构中进行融合
  • RepVL-PAN输出Image-aware的text embedding,检测段输出bbox和text-aware的image embedding
  • 最后再通过计算text embedding和image embedding之间距离来判断目标框中的类别
  • YOLO backbone使用的是YOLOv8

2.1 RepVL-PAN(Reparameterizable Vision-Language PAN)

在这里插入图片描述

  • Text-guide CSPLayer: 采用max-sigmoid attention来实现文本和图像的融合其中 X l X_l Xl是来自不同层的图像特征,W是text embedding,计算特征图与text embedding的相似度矩阵,取最大值在sigmoid后作为权重加权原特征图
    X l ′ = X l ⋅ δ ( max ⁡ j ∈ { 1.. C } ( X l W j ⊤ ) ) ⊤ X_l^{\prime}=X_l \cdot \delta\left(\max _{j \in\{1 . . C\}}\left(X_l W_j^{\top}\right)\right)^{\top} Xl=Xlδ(j{1..C}max(XlWj))
    不过在代码实现的时候,其实concat了每一个block的输出:
    在这里插入图片描述

    # yolo_world/models/layers/yolo_bricks.py:145行
    def forward(self, x: Tensor, guide: Tensor) -> Tensor:
        """Forward process."""
        x_main = self.main_conv(x)
        x_main = list(x_main.split((self.mid_channels, self.mid_channels), 1))
        x_main.extend(blocks(x_main[-1]) for blocks in self.blocks)
        x_main.append(self.attn_block(x_main[-1], guide))
        return self.final_conv(torch.cat(x_main, 1))
    
  • Image-Pooling Attention: 利用图像感知信息增强text embedding,文本嵌入的更新方式如下:
    W ′ = W + MultiHead-Attention ( W , X ^ , X ^ ) W^{\prime}=W+\text{MultiHead-Attention}(W,\hat X, \hat X) W=W+MultiHead-Attention(W,X^,X^)
    X是来自于3个不同尺度的图像特征,对每个尺度进行最大池化max-pooling,得到3x3大小的特征图,3组就是27个patch-token。

2.2 Text Contrastive Head

在这里插入图片描述
YOLO-World的检测头还是复用了YOLOv8的解耦头,只不过将分类分支修改成了object embedding。object embedding与text embedding需要先进行L2范数归一化,再进行距离计算,其计算公式如下:
s k , j = α ∣ ∣ e k ∣ ∣ 2 ∗ ∣ ∣ w j ∣ ∣ 2 + β s_{k,j} = \alpha ||e_k||^2*||w_j||^2 + \beta sk,j=α∣∣ek2∣∣wj2+β
其中 s k , j s_{k,j} sk,j表示文本 w j w_j wj与目标嵌入 e k e_k ek之间的距离, α \alpha α β \beta β是可学习的比例因子和位移因子。

3 训练过程

3.1 损失函数

  • 输出K个预测结果和其对应的gt:{box,text},使用TaskAlignAssigner进行匹配。匹配后通过计算object-text之间的交叉熵,也就是所谓的Region-text constrastive loss(没错,就是CLIP中Image-text constrastive loss,只不过这里不是使用全图的embedding,而是使用检测区域的embedding)。
  • 使用IoU loss和DFL(Distribute Focal Loss)来计算box的回归损失,这就意味着yolo-world使用的也是解耦头,并将回归任务转化成了分类任务。最后的总loss为:
    L ( I ) = L c o n + λ i ( L i o u + L d f l ) L(I) = L_{con} + \lambda_i(L_{iou} + L_{dfl}) L(I)=Lcon+λi(Liou+Ldfl)
    其中 λ i \lambda_i λi是indicator factor(指标因子),当图像来自于detection或者grounding data时设置为1,来自于image-text时设置为0。

3.2 训练策略

训练使用在线词汇表,推理使用离线词汇表。

  • 训练时:

    • 输入图片:4张组成的mosaic图片
    • 在线词汇表:T
    • 每次训练的时候需要从词汇表中抽取图片中含有的N个名词,再随机抽选80-N个不存在于该图中的目标名称,因此每次送入网络中的名词数量默认为80个
  • 测试时: 设置需要的词,并直接获取词向量参与到目标检测中,而不再用CLIP进行编码。

  • 其他细节:

    • 训练框架:MMYOLO
    • Text encoder:预训练的CLIP
    • GPU:32个V100
    • Batch:512
    • 数据增强:随机色彩、翻转、仿射、4张mosaic

4 训练数据的生成

文章中设计了一个数据生产流程,对CC3M中的246K图片生成了821K的伪标注。
在这里插入图片描述
其生成流程如下:

  1. 提取名词短语: n-gram
  2. 伪标签(pseudo label): 使用预训练的开放词汇检测器(GLIP),给每个图像给定的名词短语生成检测框,从而提供粗略的region-text pairs
  3. 过滤(filter): 使用预训练的CLIP来评估region-text pairs的相关性,过滤掉相关性低的注释和图像。给定图像I,图像描述T和粗略的region-text对 ( B i , t i , c i ) (B_i,t_i,c_i) (Bitici)
    3.1. 计算Image-text score得到S(img)
    3.2. 裁出region区域,计算region-text的相似度S(region)
    3.3. [可选] Re-labeling:裁剪后的图片与所有名词计算相似度,选择最高的名词作为该区域的text,用于纠正GLIP错标的文本
    3.4. Rescoring:用region-text的相似度S(region)对置信度重新评分 c i = ( c i ∗ s i r e g i o n ) c_i = \sqrt{(c_i * s^{region}_i)} ci=(cisiregion)
    3.5. 区域级过滤(Region-level filtering):根据文本分成不同的组,同类别使用NMS(0.5),过滤置信度低的(0.3)
    3.6. 图像级过滤(Image-level filtering):计算保留的所有region的平均分数,得到图像级置信度分数 S = ( S ( i m g ) ∗ S ( r e g i o n ) ) S = \sqrt{(S(img) * S(region))} S=(S(img)S(region)) ,保留分数大于0.3的图像。
  4. 使用NMS过滤冗余的检测框。
  • 训练集数据情况
    在这里插入图片描述
  • 测试集数据情况: 在LVIS进行zero-shot evaluation
    • 包含1203个类别,远超训练集的类别
    • 主要在LVIS minival上测试固定AP
    • 最大预测数量设置为1000
      在这里插入图片描述
      总结:可以看出检测效果非常Amazing,而且更关键的是速度非常快! 其速度快的原因在于测试的时候,可以直接将text embeding先算出来,让后作为YOLO-World的参数来进行前向推理。直接砍掉了CLIP在推理阶段的耗时。这个思路非常nice!

5 消融实验上的一些结论

结论一:增加高质量数据效果提升显著。
在这里插入图片描述
验证Text-guided CSPLayers和Image-Pooling Attention的作用分别可以提升0.8和0.3个点,但是只加入GQA数据集可以直接提升7.2个点,还是证明了加入数据的有效性。

*注:GQA是斯坦福大学教授 Christopher Manning 及其学生 Drew Hudson 一同打造的全新图像场景图问答数据集,旨在推动场景理解与视觉问答研究领域的进步,详细数据链接:https://cs.stanford.edu/people/dorarad/gqa * 。

结论二:在YOLO-Wolrd里面,CLIP优于BERT。
在这里插入图片描述

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

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

相关文章

HTTP/HTTPS详解

HTTP/HTTPS详解 1. HTTP1.1 HTTP基础知识1.2 HTTP建立和断开连接 2. HTTPS 1. HTTP 1.1 HTTP基础知识 HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用 于从WWW服务器传输超文本到本…

学习一下选择排序,快速排序

1.选择排序 我们可以根据这动图看到,就是在这个数组里面我们选出最小的放进第一个位置,然后再选除了第一个位置最小的,剩下的数里面最小的放到第二个位置,是不是非常简单呢。 void SelectSort2(int* arr, int n) {int begin 0;…

Stable Diffusion 3 API 发布!超越Midjourney v6和DALL-E 3

Stable Diffusion 3 于 2 月首次宣布作为预览版发布。而今天,StabilityAI 正式推出了 Stable Diffusion 3 和 Stable Diffusion 3 Turbo API 的API接口服务。 Stability AI 称仍在持续改进该模型,并没有说明发布日期。模型还没发布,但API先来…

安装importlib_resources库的方法最终解答!_Python库

安装Python库importlib_resources 我的环境:Window10,Python3.7,Anaconda3,Pycharm2023.1.3 importlib_resources importlib_resources是一个用于访问Python包中非代码资源(如文本、图片等)的库&#xff…

neo4j使用详解(终章、neo4j的java driver使用模板及工具类——<可用于生产>)

Neo4j系列导航: neo4j安装及简单实践 cypher语法基础 cypher插入语法 cypher插入语法 cypher查询语法 cypher通用语法 cypher函数语法 neo4j索引及调优 neo4j java Driver等更多 1. 简介 本文主要是java使用neo4j driver操作neo4j的模板项目及非常有用的工具类,主要包括: 图…

yolov7模型输出层预测方法解读

本文从代码的角度分析模型训练阶段输出层的预测包括以下几个方面: 标注数据(下文统称targets)的正样本分配策略,代码实现位于find_3_positive。候选框的生成,会介绍输出层的预测值、GT、grid、 anchor之间的联系损失函…

【原创】springboot+mysql疫苗预约管理系统设计与实现

个人主页:程序猿小小杨 个人简介:从事开发多年,Java、Php、Python、前端开发均有涉猎 博客内容:Java项目实战、项目演示、技术分享 文末有作者名片,希望和大家一起共同进步,你只管努力,剩下的交…

《Kubernetes部署篇:基于Kylin V10+ARM架构CPU+外部etcd使用containerd部署K8S 1.26.15容器版集群(多主多从)》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:企业级K8s集群运维实战 1、在当前实验环境中安装K8S1.25.14版本,出现了一个问题,就是在pod中访问百度网站,大…

ollama大语言模型

查看已经安装的大语言模型 ollama list运行大语言模型 ollama run llama2:latest

【EI会议征稿通知】2024年图像处理、机器学习与模式识别国际学术会议(IPMLP 2024)

2024年图像处理、机器学习与模式识别国际学术会议(IPMLP 2024) 2024 International Conference on Image Processing, Machine Learning and Pattern Recognition 重要信息 大会官网:www.ipmlp.net(点击参会/投稿/了解会议详情)…

Elasticsearch:简化 KNN 搜索

作者:来自 Elastic Panagiotis Bailis 在这篇博客文章中,我们将深入探讨我们为了使 KNN 搜索的入门体验变得更加简单而做出的努力! 向量搜索 向量搜索通过在 Elasticsearch 中引入一种新的专有的 KNN 搜索类型,已经可以使用一段…

蓝桥杯2024年第十五届省赛真题-数字接龙

思路:DFS,因为输入的i,j的顺序导致,方向向量中x是行编号,y是列编号。方向向量可能和直觉上不同。 错的 //int dx[8]{0,1,1,1,0,-1,-1,-1}; //int dy[8]{1,1,0,-1,-1,-1,0,1}; 对的 int dx[]{-1,-1,0,1,1,1,0,-1}; int…

论文复现《SplaTAM: Splat, Track Map 3D Gaussians for Dense RGB-D SLAM》

前言 SplaTAM算法是首个开源的基于RGB-D数据,生成高质量密集3D重建的SLAM技术。 通过结合3DGS技术和SLAM框架,在保持高效性的同时,提供精确的相机定位和场景重建。 代码仓库:spla-tam/SplaTAM: SplaTAM: Splat, Track & Map 3…

算法一:数字 - 两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 来源:力扣(LeetCode) 链接&#xf…

政安晨:【Keras机器学习示例演绎】(一)—— 利用类 U-Net 架构进行图像分割

目录 下载数据 准备输入图像的路径和目标分割掩码 一幅输入图像和相应的分割掩码是什么样子的? 准备数据集,以加载和矢量化成批数据 准备 U-Net Xception 风格模型 预留验证分割 训练模型 可视化预测 政安晨的个人主页:政安晨 欢迎 &…

4.18学习总结

多线程补充 等待唤醒机制 现在有两条线程在运行,其中一条线程可以创造一个特殊的数据供另一条线程使用,但这个数据的创建也有要求:在同一时间只允许有一个这样的特殊数据,那么我们要怎样去完成呢?如果用普通的多线程…

FTP客户端Transmit 5 for Mac中文激活版

Transmit 5是一款功能强大的Mac FTP客户端软件,它由Panic公司开发,为用户提供简单、高效的文件传输体验。 Transmit 5 for Mac中文激活版下载 Transmit 5支持多种传输协议,如FTP、SFTP、WebDAV和Amazon S3等,满足用户不同的文件传…

eCongnition 获取特征(shp)

目录 1、加载数据和分割的shp文件 2、将专题(导入的shp)转换为对象 3、导出特征 1、加载数据和分割的shp文件 我们加载数据,在第二个框(Thematic La..)里加载矢量shp 导入的.shp文件称为专题层(Thematic Layer), 显示方式如下所示&#x…

深入探索:Facebook如何重塑社交互动

在当代社会中,社交互动已成为日常生活的核心组成部分。而在众多的社交媒体平台中,Facebook凭借其卓越的用户基础和创新的功能,已经成为了全球最大的社交媒体平台。本文将深入探讨Facebook如何通过其独特的特性和功能,重塑了人们的…

Python 字符串 Base64

因消息传输的需要,我们需要对大量文本的字符串进行一下 Base64 转换。 这样的好处是因为在传输的字符串中可能有存在一些特殊字符,这些特殊在经过网络传输的时候会出现编码的问题,并且会影响传输稳定性。 使用 Base64 可以避免这个问题。 方…