计算机视觉——通过 OWL-ViT 实现开放词汇对象检测

介绍

传统的对象检测模型大多是封闭词汇类型,只能识别有限的固定类别。增加新的类别需要大量的注释数据。然而,现实世界中的物体类别几乎无穷无尽,这就需要能够检测未知类别的开放式词汇类型。对比学习(Contrastive Learning)使用成对的图像和语言数据,在这一挑战中备受关注。著名的模型包括 CLIP,但将其应用于物体检测,如在训练过程中处理未见类别,仍然是一个挑战。

本文使用标准视觉转换器(ViT)建立了一个开放词汇对象检测模型——开放世界定位视觉转换器(OWL-ViT),只做了极少的修改。该模型在大型图像-文本对的对比学习预训练和端到端检测的微调方面表现出色。特别是,使用类名嵌入可以实现对未学习类别的零检测。
OWL-ViT 在单次检测方面也很强大,因为它可以使用图像嵌入和文本作为查询。特别是在 COCO 数据集中,对于未经训练的类别,OWL-ViT 比以前的一流模型有了显著的性能提升。这一特性对于检测难以描述的对象(如特殊部件)非常有用。

我们还证明,增加预训练时间和模型大小能持续提高检测性能。特别是,我们发现,即使图像-文本对的数量超过 200 亿,开放词汇检测的性能改善仍在继续。此外,通过在检测微调中适当使用数据扩展和正则化,即使使用简单的训练配方,也能实现较高的零次和单次检测性能。

建议方法

OWL-ViT 是一个两阶段的学习过程,具体如下:

  1. 使用大型图像-文本对进行对比预训练。
  2. 将学习过渡到检测任务。

使用大型图像-文本对进行对比预训练

这样做的目的是将视觉和语言模式映射到一个统一的表示空间中。学习过程使用图像和文本编码器进行训练,以处理每种模态,使相关的图像和文本嵌入相互靠近,并使不相关的图像和文本嵌入相互远离。

图像编码器采用视觉变换器(ViT)架构,该架构具有可扩展性和强大的表示能力。图像被划分为多个片段,每个片段都作为一个标记进行处理,从而实现具有空间关系的特征提取。在这一过程中,ViT 标记化过程将图像转换成一串固定长度的标记,并通过变换器层学习各补丁之间的关系。另一方面,文本编码器处理标记化的句子,并生成浓缩整个句子含义的嵌入。文本表示通常是通过转换器最后一层的句末标记(EOS 标记)输出获得的。

OWL-ViT 预训练的一个重要设计特点是图像和文本编码器是独立的。这种设计允许预先计算查询文本和图像的嵌入,从而大大提高了推理过程中的计算效率。这种独立性还为在同一架构中处理查询(无论是文本还是图像)提供了灵活性。

将学习过渡到检测任务

在这里,首先去掉了 ViT 中最后的标记池层(通常用于提取整个图像的表示)。取而代之的是,将一个小型分类头和一个盒式回归头直接连接到每个输出标记。这种设计确保了 ViT 中的每个输出标记都与图像中的不同空间位置相对应,每个标记都代表一个潜在的候选对象。分类头预测物体类别,而方框回归头则估算相应边框的位置。

传统的对象检测模型在分类层中学习每个类别的固定权重,而 OWL-ViT 不使用固定的类别分类层。相反,对象类别名称被输入到文本编码器中,生成的文本嵌入直接用作分类头的权重。只要给出类名,即使是未经训练的类,这种方法也能让模型检测到相应的对象。

转换学习采用 DEtection TRansformer (DETR) 中使用的两端匹配损失来预测物体的位置。这种损失是模型预测的边框与正确边框之间的最佳映射,并计算每一对边框的损失。这样可以调整模型,使预测的物体位置和实际的物体位置保持一致。

在分类方面,焦点 sigmoid 交叉熵用于考虑长尾分布数据集的不平衡。与经常出现的类别相比,这种损失函数对罕见类别的误报惩罚更大,从而提高了罕见类别的检测性能。

此外,对于联合数据集,即并非所有图像都注释了所有类别,但每幅图像中只注释了有限数量的类别的数据集,对于每幅训练图像,查询是注释了的类别(正例明确标注为不存在的类别(负面示例)作为查询。这样,模型就能根据明确识别的信息进行学习,并减少对负面示例的错误处理。为了进一步避免对未注明类别的误解,我们在训练过程中随机选择类别并将其作为 “伪负例”,为每幅图像准备了至少 50 个负例查询。

试验

实验中使用了多个数据集。在训练中,我们主要使用 OpenImages V4(约 170 万张图像,600 多个类别)、Visual Genome(8.45 万张图像,包括大量对象关系信息)和 Objects365(包含 365 个类别的大型检测数据集)。一方面,评估使用了长尾分布。同时,评估主要使用了长尾分布的 LVIS v1.0,特别是用于验证零镜头性能。此外,COCO 2017 用于比较标准对象检测性能,Objects365 用于验证一般检测能力。

对开放词汇对象检测的评估主要集中在 LVIS 数据集上未经训练类的性能上。在该实验中,OWL-ViT 在零拍摄条件下的 APrare 达到了 31.2%,明显优于现有的先进方法。这表明,在预训练过程中使用图像-文本对能够从类名和描述中有效提取对象的语义特征。尤其是文本条件检测法,只需输入类别名称的文本查询,就能高精度地检测出未学习过的类别,这是该方法与以往方法的主要区别。

Hewshot 图像条件检测实验评估了 COCO 数据集上图像查询的检测性能;OWL-ViT 比现有的最先进方法提高了 72%,AP50 分数从 26.0 提高到 41.8。这些结果表明,OWL-ViT 综合利用了视觉和语言表征,即使对于没有给出名称的未知对象,也能提供出色的检测性能。特别是,图像条件检测通过使用包含特定对象的图像嵌入作为查询,有效地检测出了视觉上相似的对象。

对缩放特性的分析证实,增加预训练中使用的图像-文本对数量和模型大小可持续提高检测性能。特别是,在预训练中使用超过 200 亿个图像-文本对往往能显著提高零点检测性能。这一结果表明,在预训练中使用大规模数据也能有效地过渡到物体检测任务。同样明显的是,基于视觉转换器的模型比其他架构具有更好的扩展性能,尤其是在模型规模较大的情况下。

拓展与增强

背景知识

  • 对比学习的重要性:对比学习通过将图像和文本对齐到一个共享的嵌入空间,使得模型能够理解视觉和语言之间的语义关系。这对于开放词汇对象检测至关重要,因为它允许模型通过文本描述来识别未见过的类别。
  • 视觉转换器(ViT)的优势:ViT 将图像分割成固定大小的补丁,并将每个补丁视为一个标记,类似于自然语言处理中的单词。这种设计使得 ViT 能够捕捉图像中的全局特征和局部特征,从而在视觉任务中表现出色。

相关工作

  • CLIP 模型:CLIP 是一个开创性的模型,它通过对比学习将图像和文本嵌入到一个共享的向量空间中。虽然 CLIP 主要用于图像分类和文本生成任务,但其思想为 OWL-ViT 提供了重要的启发。OWL-ViT 在此基础上进一步扩展,将对比学习应用于对象检测任务。
  • DETR 模型:DETR 使用 Transformer 架构来处理对象检测任务,通过端到端的方式学习对象的位置和类别。OWL-ViT 借鉴了 DETR 的思想,使用两端匹配损失来优化检测性能。

实际应用场景

  • 工业检测:在工业环境中,OWL-ViT 可以用于检测生产线上的缺陷或异常部件。通过提供图像查询或类别名称,模型能够快速定位并识别问题,从而提高生产效率和质量控制。
  • 自动驾驶:在自动驾驶场景中,OWL-ViT 可以帮助车辆识别道路上的未知障碍物或交通标志。通过实时检测和识别,车辆可以做出更安全的决策。
  • 医疗影像分析:在医疗领域,OWL-ViT 可以用于分析医学影像,如 X 光或 CT 扫描。通过提供疾病名称或图像示例,模型能够帮助医生快速定位病变区域,辅助诊断。

行业影响

  • 推动开放词汇检测的发展:OWL-ViT 的出现为开放词汇对象检测领域带来了新的突破。它证明了通过对比学习和 Transformer 架构,可以有效地识别未见过的类别,为未来的研究提供了新的方向。
  • 促进多模态学习的发展:OWL-ViT 结合了图像和文本两种模态,展示了多模态学习的强大潜力。这种结合不仅提高了检测性能,还为其他领域(如自然语言处理和计算机视觉的交叉领域)提供了新的思路。

总结

利用视觉转换器进行简单的开放词汇对象检测(OWL-ViT)是一项开创性的研究。这项研究的最大贡献在于,它利用图像和文本的大规模对比预训练,实现了对未知类别的零次和一次对象检测,而且准确率很高。特别是直接使用预训练的文本编码器输出作为类嵌入,而不是使用固定的类分类层的设计,在灵活性和可扩展性方面取得了重大进展。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大语言模型的“模型量化”详解 - 04:KTransformers MoE推理优化技术

基本介绍 随着大语言模型(LLM)的规模不断扩大,模型的推理效率和计算资源的需求也在迅速增加。DeepSeek-V2作为当前热门的LLM之一,通过创新的架构设计与优化策略,在资源受限环境下实现了高效推理。 本文将详细介绍Dee…

排序算法详解笔记

评价维度 运行效率就地性稳定性 自适应性:自适应排序能够利用输入数据已有的顺序信息来减少计算量,达到更优的时间效率。自适应排序算法的最佳时间复杂度通常优于平均时间复杂度。 是否基于比较:基于比较的排序依赖比较运算符(…

【“星瑞” O6 评测】 — llm CPU部署对比高通骁龙CPU

前言 随着大模型应用场景的不断拓展,arm cpu 凭借其独特优势在大模型推理领域的重要性日益凸显。它在性能、功耗、架构适配等多方面发挥关键作用,推动大模型在不同场景落地 1. CPU对比 星睿 O6 CPU 采用 Armv9 架构,集成了 Armv9 CPU 核心…

Ocelot的应用案例

搭建3个项目,分别是OcelotDemo、ServerApi1和ServerApi2这3个项目。访问都是通过OcelotDemo进行轮训转发。 代码案例链接:https://download.csdn.net/download/ly1h1/90715035 1.架构图 2.解决方案结构 3.步骤一,添加Nuget包 4.步骤二&…

DeepSeek+Dify之五工作流引用API案例

DeepSeekDify之四Agent引用知识库案例 文章目录 背景整体流程测试数据用到的节点开始HTTP请求LLM参数提取器代码执行结束 实现步骤1、新建工作流2、开始节点3、Http请求节点4、LLM节点(大模型检索)5、参数提取器节点(提取大模型检索后数据&am…

《从分遗产说起:JS 原型与继承详解》

“天天开心就好” 先来讲讲概念: 原型(Prototype) 什么是原型? 原型是 JavaScript 中实现对象间共享属性和方法的机制。每个 JavaScript 对象(除了 null)都有一个内部链接指向另一个对象,这…

立马耀:通过阿里云 Serverless Spark 和 Milvus 构建高效向量检索系统,驱动个性化推荐业务

作者:厦门立马耀网络科技有限公司大数据开发工程师 陈宏毅 背景介绍 行业 蝉选是蝉妈妈出品的达人选品服务平台。蝉选秉持“陪伴达人赚到钱”的品牌使命,致力于洞悉达人变现需求和痛点,提供达人选高佣、稳变现、速响应的选品服务。 业务特…

Android显示学习笔记本

根据博客 Android-View 绘制原理(01)-JAVA层分析_android view draw原理分析-CSDN博客 提出了我的疑问 Canvas RenderNode updateDisplayListDirty 这些东西的关系 您的理解在基本方向上是对的,但让我详细解释一下 Android 中 updateDisplayListDirty、指令集合、…

JavaWeb学习打卡-Day4-会话技术、JWT、Filter、Interceptor

会话技术 会话:用户打开浏览器,访问web服务器的资源,会话建立,直到有一方断开连接,会话结束。在一次会话中可以包含多次请求和响应。会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求…

让数据优雅落地:用 serde::Deserialize 玩转结构体实体

前言 想象一下,服务器突然飞来一堆 JSON 数据,就像一群无头苍蝇冲进办公室,嗡嗡作响,横冲直撞。此刻,你的任务,就是把这群“迷路数据”安置进正确的格子里,分门别类,秩序井然,不混不乱,不漏一只。 好在 Rust 早就为我们备好瑞士军刀:serde::Deserialize。它不仅刀…

Virtio 技术解析 | 框架、设备实现与实践指南

本文为 “Virtio” 相关文章合辑。 略作重排,如有内容异常,请看原文。 Virtio 简介(一)—— 框架分析 posted 2021-04-21 10:14 Edver 1. 概述 在传统设备模拟中,虚拟机内部设备驱动完全不知自身处于虚拟化环境&a…

云计算赋能质检LIMS的价值 质检LIMS系统在云计算企业的创新应用

在云计算技术高速发展的背景下,实验室信息化管理正经历深刻变革。质检LIMS(实验室信息管理系统)作为实验室数字化转型的核心工具,通过与云计算深度融合,为企业提供了高弹性、高安全性的解决方案。本文将探讨质检LIMS在…

【win11 安装WSL2 详解一遍过!!】

共有五个步骤,按部就班的做,保准成功! 1. 打开开发者模式 设置->系统->开发者模式 2. 打开linux的win子系统 找到控制面板-程序和功能-启用或关闭Windows功能,选中“适用于Linux的Windows子系统”,“虚拟机…

Godot开发2D冒险游戏——第三节:游戏地图绘制

一、初步构建游戏地图 在游戏场景当中添加一个新的子节点:TileMapLayer 这一层称为瓦片地图层 根据提示,下一步显然是添加资源 为TileMapLayer节点添加一个TileSet 将地板添加进来,然后选择自动分割图集 自定义时要确保大小合适 让Godot自…

Django创建的应用目录详细解释以及如何操作数据库自动创建表

创建好Django项目后 如果要创建 python manage.py startapp 模块名模块 使用 我创建一个system模块后是 注意:urls是我自己建的文件 1.migrations目录 存放数据库的迁移文件,当models.py中模型定义发生变化时,通过迁移操作能同步数据库结构变化 __init__ 使该目录…

将输入帧上下文打包到下一个帧的预测模型中用于视频生成

Paper Title: Packing Input Frame Context in Next-Frame Prediction Models for Video Generation 论文发布于2025年4月17日 Abstract部分 在这篇论文中,FramePack是一种新提出的网络结构,旨在解决视频生成中的两个主要问题:遗忘和漂移。 具体来说,遗忘指的是在生成视…

STM32 串口USART

目录 常见的通信方式 串行通信和并行通信 全双工,半双工和单工通信 同步通信和异步通信 通信速率 常见的通信协议 串口基础知识 电平特性 串口传输协议 STM32F103的USART资源 端口引脚 数据寄存器单元 发送接收控制单元 实现串口发送 printf…

Taro on Harmony :助力业务高效开发纯血鸿蒙应用

背景 纯血鸿蒙逐渐成为全球第三大操作系统,业界也掀起了适配鸿蒙原生的浪潮,用户迁移趋势明显,京东作为国民应用,为鸿蒙用户提供完整的购物体验至关重要。   去年 9 月,京东 AP…

gem5-gpu教程05 内存建模

memory-modeling|Details on how memory is modeled in gem5-gpu gem5-gpu’s Memory Simulation gem5-gpu在很大程度上避开了GPGPU-Sim的单独功能模拟,而是使用了gem5的执行中执行模型。因此,当执行存储/加载时,内存会被更新/读取。没有单独的功能路径。(顺便说一句,这…

【python】lambda用法(结合例子理解)

目录 lambda 是什么? 为什么叫 lambda? 语法 举例 1. 最简单的 lambda:单个数字处理 2. 用 lambda 排序一组字符串(按照长度排序) 3. 在列表里找出绝对值最小的数字 4. 给 map() 用 lambda 5. 组合使用:筛选出偶数 lambda 和 def 的对比 lambda 适合用在什么地…