Yolo-World | 检测一切模型:高效实时开放词汇目标检测

〔更多精彩AI内容,尽在 「魔方AI空间」 公众号,引领AIGC科技时代〕

关注了解更多AI内容

本文作者:猫先生

👉🔗 AIGCmagic社区知识库(免费知识库)

原文地址:Yolo-World | 检测一切模型:高效实时开放词汇目标检测

简 介

2024年1月31日,腾讯人工智能实验室发布开放词汇目标检测器YOLO-World,这是一款先进的工具,能够在实时环境中跨越开放词汇表识别对象,无需先前训练。

You Only Look Once (YOLO) 系列检测器已成为高效实用的工具。然而,它们对预定义和训练的对象类别的依赖限制了它们在开放场景中的适用性。

YOLO-World旨在通过视觉语言建模和大规模数据集的预训练来增强 YOLO 的开放词汇检测功能。具体而言,本文提出一种新的可重新参数化的视觉语言路径聚合网络(RepVL-PAN)和区域文本对比损失,以促进视觉和语言信息之间的交互。

该方法擅长以零样本的方式高效地检测各种物体。在具有挑战性的 LVIS 数据集上,YOLO-World 在 V100 上实现了 35.4 AP 和 52.0 FPS,在准确性和速度方面优于许多最先进的方法。此外,经过微调的 YOLO-World 在多个下游任务上实现了出色的性能,包括对象检测和开放词汇实例分割。

项目主页:https://www.yoloworld.cc/

代码地址:https://github.com/AILab-CVC/YOLO-World

论文地址:https://arxiv.org/pdf/2401.17270

YOLO-World亮点:

  • 下一代 YOLO 检测器,旨在实时开放词汇目标检测。

  • 在大规模视觉语言数据集(包括Objects365、GQA、Flickr30K和CC3M)上进行了预训练,这使得YOLO-World具有强大的零样本开放词汇能力和图像落地能力。

  • 实现了快速的推理速度,提出重新参数化技术,以便根据用户的词汇表进行更快的推理和部署。

一、引言

从传统到YOLO-World检测方法的演变

传统目标检测框架

物体检测一直是计算机视觉领域长期存在的基本挑战,在图像理解、机器人和自动驾驶汽车领域有着广泛的应用。随着深度神经网络的发展,大量的工作在目标检测,如Faster R-CNN、SSD和YOLO,取得重大突破。尽管这些方法取得了成功,但它们仍然受到限制,因为它们只能处理具有固定词汇的对象检测,例如 COCO 数据集中的 80 个类别。一旦定义和标记了对象类别,经过训练的检测器就只能检测这些特定类别,从而限制了开放场景的能力和适用性。

开放词汇目标检测的出现

为了应对固定词汇检测器的限制,开放词汇目标检测(OVD)的概念应运而生,旨在识别超出预先建立类别范围之外的对象。这一领域的最初努力,例如GLIP和Grounding DINO,通过广泛的图像-文本数据训练来扩展检测词汇表,从而使模型能够通过简单的提示识别以前无法检测到的对象。

然而,这些模型通常体积较大,需要更多的计算资源,因为它们需要同时处理图像和文本数据进行预测。这种复杂性可能会引入延迟,降低它们在对时间敏感的应用中的实用性。此时,Yolo-world应运而生!!!

此外,本文探索一种提示后检测的范例,以进一步提高现实场景中开放词汇对象检测的效率,如图 2 所示。


图 2:与检测范式的比较。(a) 传统目标检测器:这些目标检测器只能检测训练数据集预定义的固定词汇范围内的目标,例如 COCO 数据集的 80 个类别。固定的词汇限制了开放场景的扩展。 (b) 以前的开放词汇检测器:以前的方法倾向于开发大而重的检测器来进行开放词汇检测,直观上具有很强的能力。此外,这些检测器同时对图像和文本进行编码作为预测的输入,这对于实际应用来说非常耗时。 (c) YOLO-World:展示了轻量级检测器强大的开放词汇性能,例如 YOLO 检测器,这对于现实世界的应用具有重要意义。没有使用在线词汇,而是提出了一种用于高效推理的提示后检测范例,其中用户根据需要生成一系列提示,并且这些提示将被编码到离线词汇中。然后可以将其重新参数化为模型权重,以进行部署和进一步加速。

YOLO-World,旨在实现高效的开放词汇目标检测,并探索大规模预训练方案,将传统的 YOLO 检测器提升到新的开放词汇世界。与之前的方法相比,所提出的 YOLO-World 非常高效,推理速度快,并且易于部署到下游应用程序。

YOLO-World 遵循标准 YOLO 架构,并利用预先训练的 CLIP 文本编码器对输入文本进行编码。我们进一步提出可重新参数化的视觉语言路径聚合网络(RepVL-PAN)来连接文本特征和图像特征,以获得更好的视觉语义表示。在推理过程中,可以删除文本编码器,并将文本嵌入重新参数化为 RepVL-PAN 的权重,以实现高效部署。

过大规模数据集上的区域-文本对比学习,进一步研究了 YOLO 检测器的开放词汇预训练方案,该方案将检测数据、基础数据和图像-文本数据统一为区域-文本对。预训练的YOLO-World具有丰富的区域文本对,表现出强大的大词汇量检测能力,训练更多的数据可以带来开放词汇能力的更大提升。

二、速度与精度曲线

本文比较了预训练的 YOLO-World 和最近的开放词汇检测器在零样本 LVIS 评估上的速度和准确性曲线:

在速度和准确性方面将 YOLO-World 与最新的开放词汇方法进行比较。所有模型均在 LVIS minival 上进行评估,推理。

三、Yolo-world 整体架构

所提出的 YOLO-World 的整体架构如图 3 所示,它由 YOLO 检测器、文本编码器和可重参数化视觉语言路径聚合网络(RepVL-PAN)组成。给定输入文本,YOLO-World 中的文本编码器将文本编码为文本嵌入。 YOLO 检测器中的图像编码器从输入图像中提取多尺度特征。然后,利用 RepVL-PAN 通过利用图像特征和文本嵌入之间的跨模态融合来增强文本和图像表示。

图 3:YOLO-World 整体架构。
  • 使用基于 CLIP 的冻结文本编码器构建 YOLO 检测器,用于从输入文本中提取文本嵌入,例如对象类别或名词短语。

  • 包含一个可重新参数化的视觉语言路径聚合网络(RepVL-PAN),以促进多尺度图像特征和文本嵌入之间的交互。 RepVL-PAN可以将用户的离线词汇重新参数化为模型参数,以实现快速推理和部署。

  • 在大规模区域文本数据集上进行了预训练,并具有区域文本对比损失,以学习视觉和语言之间的区域级对齐。对于普通的图像文本数据集,例如 CC3M,我们采用自动标记方法来生成伪区域文本对。

RepVL-PAN的原理: 采用文本引导的CSPLayer将语言信息注入图像特征,并采用图像集中注意力增强图像感知文本嵌入。

图 4:RepVL-PAN 的图示

预训练方案

介绍了在大规模数据集上进行开放词汇的区域-文本对比预训练的方案,包括使用大规模检测数据、grounding数据和图像-文本数据进行预训练。

给定mosaic样本I和文本T,YOLO-World输出K个对象预测{Bk,sk}以及注释Ω = {Bi,ti}。利用任务对齐的标签分配,将预测与真值注释匹配,并为每个正预测分配一个文本索引作为分类标签。基于这个词汇表,通过对象-文本(区域-文本)相似度和对象-文本分配之间的交叉熵构建区域-文本对比损失Lcon。此外,采用IoU损失和分布式focal损失进行边界框回归,总训练损失定义为:L(I) = Lcon + λI · (Liou + Ldfl)。

还提出了使用伪标签进行预训练的方法,包含三个步骤:

  • 提取名词短语:首先利用 n-gram 算法从文本中提取名词短语;

  • 伪标签:采用预训练的开放词汇检测器GLIP,为给定的名词短语生成伪框,从而为每个图像提供粗略的区域-文本对;

  • 过滤:使用预训练的CLIP评估图像-文本对和区域-文本对的相关性,并过滤低相关性的伪注释和图像。使用非最大抑制(NMS)进一步过滤冗余的边界框。

 技术交流

加入「AIGCmagic社区」群聊,一起交流讨论,涉及 AI视频、AI绘画、Sora技术拆解、数字人、多模态、大模型、传统深度学习、自动驾驶等多个不同方向,可私信或添加微信号:【m_aigc2022】,备注不同方向邀请入群!!

更多精彩内容,尽在「魔方AI空间」,关注了解全栈式 AIGC内容!!

推荐阅读

《三年面试五年模拟》版本更新白皮书,迎接AIGC时代

AIGC | 「视频生成」系列之Suno制作MV视频工作流分享(保姆级)

AIGC|一文梳理「AI视频生成」技术核心基础知识和模型应用

 AIGC潮流:2023年的冲击与2024年的趋势预测

AIGC|OpenAI文生视频大模型Sora技术拆解(含全网资料汇总)

The error message you're encountering suggests that there's an issue with importing the `YOLO_WORLD_EfficientSAM` module from a Python package. The `ImportError: attempted relative import with no known parent package` typically indicates that the code is trying to use a relative import (`from . import ...`) but the current directory structure does not have a proper package structure or the parent package has not been imported correctly. Here's what you can do to resolve this: 1. **Check package structure**: Ensure that you have a `__init__.py` file in the root directory of your package, as this is required for Python to recognize it as a package. If the module you're trying to import is in a subdirectory, move it up to the same level or create the necessary levels of directories (e.g., `your_package/your_subpackage`). 2. **Use absolute imports**: Instead of using relative imports, try importing the module using an absolute path, like `from yoloworld import YOLO_WORLD_EfficientSAM`. 3. **Ensure correct import statement**: If you are within a package, make sure you're importing the package correctly before attempting to import the submodule. For example, if the package is called `yoloworld`, you might need to do `import yoloworld` first and then use `from yoloworld.YOLO_WORLD_EfficientSAM import *`. 4. **Update PYTHONPATH**: If you're working in a development environment, ensure your PYTHONPATH environment variable includes the correct path to the package location. If you provide more details about your project setup and the exact context where you're encountering this error, I could give a more tailored solution. Here are some related questions for further clarification:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值