文章精读篇——OMG-Seg

题目:OMG-Seg : Is One Model Good Enough For All Segmentation?

作者:Xiangtai Li1 † Haobo Yuan1 Wei Li1 Henghui Ding1 Size Wu1 Wenwei Zhang1Yining Li2 Kai Chen2 Chen Change Loy1

代码:OMG-Seg

会议:cvpr2024


边读边记:

这里面提到,omg-seg是首个将图像、视频、开放词汇、交互分割,四种结合到一起的模型。之前的unified models是有一个共享的视觉backbone,多个特定任务分枝;而本模型是共享的encoder-decoder架构,所有任务的输出都被统一为一种“查询表示”(Query Representation),通过这种设计,OMG-Seg 能够用一个统一的框架处理多种任务,而无需为每个任务设计单独的分支。

3.1节:定义了图像分割、视频分割、交互分割、开放词汇分割的任务。

其中视频分割提到了tube mask,但是我不太理解tube mask是什么样子的。大概就是每一帧都有mask吧。

interactive segmentation中,编码过程是将每个visual prompt(比如一个点坐标或一个矩形框)转化为一个对象查询向量。

Open-Vocabulary and Multi-Dataset Segmentation中,在视觉任务中使用 CLIP 文本嵌入 (CLIP text embedding)作为掩码分类器(mask classifier)意味着直接用文本嵌入来表示类别。

所以本篇文章是提出了 All the Things are in Queries,通过将所有实体的预测统一到查询机制中,可以实现对多种分割任务的支持。

统一的查询掩码分类框架

作者提到,通过结合不同的任务设置,可以使用相同的基于查询的掩码分类框架来表示所有的分割实体。

  • 具体来说,每个对象查询(object query)对应三个输出:

    • mask掩码(mi):表示预测的分割掩码(即物体的像素级区域)。

    • label标签(ci):表示预测的类别标签(如“人”、“车”等)。

    • ID(di):表示实例的唯一标识(用于区分同一类别的不同实例,常用于实例分割任务)。

  • 不同的分割任务(如语义分割、实例分割、全景分割等)对 mi、ci、di 的格式和范围有不同的要求。例如:

    • 在语义分割中,di 可能不需要,因为只关心类别标签 ci 和掩码 mi

    • 在实例分割中,di 是必需的,因为需要区分同一类别的不同实例。

  • 尽管不同任务对 mi、ci、di 的具体要求不同,但它们的格式和范围是相似的,因此可以统一到一个框架中。

3.2 omg-seg的架构

backbone+pixel decoder+mask decoder

backbone:OpenCLIP 中的 ConvNeXt 架构作为视觉编码器(VLM Encoder)。是冻结的

pixel decoder:作为特征适配器,因为VLM Encoder 提取的特征是冻结的,可能不完全适合特定的分割任务。那么Pixel Decoder 通过多阶段的可变形注意力机制,能够动态调整特征,使其更适合生成高质量的分割掩码。它还能够融合多尺度特征,增强模型对物体大小和形状的适应性。

mask decoder:基于高分辨率特征,生成最终的掩码和类别标签。

Combined Object Queries(组合对象查询):不同任务(如图像、视频、交互式分割)对对象查询的需求不同,图像任务:对象查询关注物体级别的定位和识别;视频任务:对象查询需要考虑时间一致性(如跨帧的物体跟踪);交互式分割:对象查询需要定位用户指定的特定区域。

  • 语义查询(Semantic Queries, QsobjQsobj​)

    • 用于图像和视频任务。

    • 这些查询负责生成图像掩码(image masks)或跟踪的管状掩码(tracked tube masks),并需要语义标签。

    • 例如,在视频任务中,语义查询需要确保同一物体在不同帧中的掩码具有时间一致性。

  • 位置查询(Location Queries, QlobjQlobj​)

    • 用于交互式分割任务。

    • 这些查询通过 Prompt Encoder 将各种视觉提示(visual prompts)编码为与对象查询相同的形式。

    • 例如,用户可以通过点击或框选指定感兴趣的区域,Prompt Encoder 将这些提示转换为位置查询。

  • 组合对象查询

    • 将语义查询 QsobjQsobj​ 和位置查询 QlobjQlobj​ 组合在一起,共享相同的解码器接口。

Shared Multi-Task Decoder(共享多任务解码器):核心操作:交叉注意力(cross-attention)。输入:组合对象查询(QsobjQsobj​ 和 QlobjQlobj​)和图像/视频特征 {Fjfuse}{Fjfuse​}。输出:精炼后的对象查询(refined object queries)。最终掩码通过精炼后的查询和高分辨率特征 F3fuse的点积得到。

图像任务加入2d位置嵌入,视频任务是要加入3d位置嵌入的:

4 实验

数据集:coco分割的一堆等 还有视频分割的Youtube-VIS-2021, ADE-20k [102], and DAVIS-2017 datasets 等

实现细节:

  • 实现框架:基于 MMDetection,使用 32 张 A100 GPU 进行分布式训练。

  • 数据增强:采用大规模抖动方法。

  • 训练步骤:统一训练步数,确保公平比较。

  • 模型初始化:使用 OpenCLIP 初始化 backbone,并替换分类器为文本嵌入。

  • 输入处理:将图像输入视为伪视频,统一图像和视频任务的输入格式。

  • 训练策略:调整采样率平衡数据集,报告冻结和训练 backbone 的结果。

  • 小知识:

  • 分布式训练总 Batch Size 是所有 GPU 上样本的总和。每个 GPU 的 Mini-batch Size 是单个 GPU 上处理的样本数量。

  • 在 OMG-Seg 中,每个 GPU 的 Mini-batch Size 为 1,意味着每个 GPU 每次处理 1 张图像,32 个 GPU 一起处理 32 张图像(总 Batch Size = 32)。


---还没写完 先发布 后面接着写

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

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

相关文章

vite 开启 gzip压缩

使用vite 如何开启 gzip压缩 文章目录 使用vite 如何开启 gzip压缩1. 引言为什么需要 Gzip 压缩?Gzip 压缩的作用 2. Vite 项目中的 Gzip 压缩Vite 的基本概念Gzip 压缩的原理 3. 使用 Vite 插件开启 Gzip 压缩安装 vite-plugin-compression配置 vite-plugin-compre…

【Qt学习】| 如何使用QVariant存储自定义类型

QVariant是Qt框架中的一个通用数据类型,可以存储多种类型的数据,主要作用是提供一种类型安全的方式来存储和传递不同类型的数据,而不需要显示地指定数据类型。 QVariant提供了诸多构造函数可以非常方便地对基础数据类型(如&#x…

【Python量化金融实战】-第1章:Python量化金融概述:1.4 开发环境搭建:Jupyter Notebook、VS Code、PyCharm

在量化金融开发中,选择合适的开发环境至关重要。本章介绍三种主流工具:Jupyter Notebook(交互式分析)、VS Code(轻量级编辑器)、PyCharm(专业IDE),并通过实战案例展示其应…

查看 nginx 是否已经启动

在 Ubuntu 或其他 Linux 系统上,要查看 Nginx 是否已经启动,您可以使用以下几种方法之一: 方法一:使用 systemctl 命令 Nginx 通常作为 systemd 服务运行,因此您可以使用 systemctl 命令来检查其状态。 打开终端。 …

解释 Vue 中的虚拟 DOM,如何通过 Diff 算法最小化真实 DOM 更新次数?

1. 虚拟DOM核心原理(附代码示例) // 简化的VNode结构示意 class VNode {constructor(tag, data, children) {this.tag tag // 标签名this.data data // 属性/指令等this.children children // 子节点数组} }// 两个新旧虚拟节点树示例 const oldV…

Pytorch使用手册-音频数据增强(专题二十)

音频数据增强 torchaudio 提供了多种方式来增强音频数据。 在本教程中,我们将介绍一种应用效果、滤波器、RIR(房间脉冲响应)和编解码器的方法。 最后,我们将从干净的语音合成带噪声的电话语音。 import torch import torchaudio import torchaudio.functional as Fprin…

Linux-Ansible模块扩展

文章目录 Archive UnarchiveSetup模块Lineinfile Replace 🏡作者主页:点击! 🤖Linux专栏:点击! ⏰️创作时间:2025年02月23日18点11分 Archive Unarchive Archive和Unarchive模块 需求&#x…

Redhat及其衍生系统安装python

目录 更新包列表 安装 Python 3 安装特定版本的 Python 验证安装 安装 pip 更新包列表 在安装任何软件之前,建议先更新系统的包列表,以确保安装的是最新版本的软件包: sudo dnf update 安装 Python 3 RHEL 9 默认安装了 Python 3&…

Python条件控制和循环语句

目录 条件控制语句 1. if 语句 2. if-else 语句 3. if-elif-else 语句 循环语句 1. for 循环 2. while 循环 循环控制语句 1. break 语句 2. continue 语句 3. else 子句(与循环结合) 嵌套循环 常见应用场景 条件控制 循环语句 条件控制语…

*PyCharm 安装教程

PyCharm 安装教程,适用于 Windows、macOS 和 Linux 系统: 1. 下载 PyCharm 官网地址:https://www.jetbrains.com/pycharm/版本选择: Community(社区版):免费,适合基础 Python 开发…

Three.js 快速入门教程【二】透视投影相机

系列文章目录 系列文章目录 Three.js 快速入门教程【一】开启你的 3D Web 开发之旅 Three.js 快速入门教程【二】透视投影相机 Three.js 快速入门教程【三】渲染器 Three.js 快速入门教程【四】三维坐标系 Three.js 快速入门教程【五】动画渲染循环 Three.js 快速入门教程【六…

IntelliJ IDEA 控制台输出中文出现乱码

IntelliJ IDEA 控制台输出中文出现乱码通常是由于编码设置不一致导致的。以下是常见原因及解决方法 1. 项目编码设置 检查路径:File → Settings → Editor → File Encodings 确保 Project Encoding、Global Encoding 和 Default Encoding for Properties Files 均…

C#初级教程(7)——初级期末检测

练习 1:计算圆的周长和面积 改编题目:编写一个 C# 程序,让用户输入圆的半径,然后计算并输出该圆的周长和面积,结果保留两位小数。 using System;class CircleCalculation {static void Main(){const double pi 3.14…

Java 集合:单列集合和双列集合的深度剖析

引言 在 Java 编程中,集合是一个非常重要的概念。它就像是一个容器,能够存储多个数据元素,帮助我们更方便地管理和操作数据。Java 集合框架主要分为单列集合和双列集合两大类,它们各自有着独特的特点和适用场景。接下来&#xff0…

layui 远程搜索下拉选择组件(多选)

模板使用&#xff08;lay-module/searchSelect&#xff09;&#xff0c;依赖于 jquery、layui.dist 中的 dropdown 模块实现&#xff08;所以data 格式请参照 layui文档&#xff09; <link rel"stylesheet" href"layui-v2.5.6/dist/css/layui.css" /&g…

通俗易懂的DOM1级标准介绍

前言 在前端开发中&#xff0c;DOM&#xff08;文档对象模型&#xff09;是我们操作网页内容的核心工具。前面的文章我们介绍了DOM0级、DOM2级事件模型&#xff0c;没有DOM1级事件模型这种概念&#xff0c;但有DOM1级标准。今天我们就来讨论DOM1级标准&#xff0c;看看它到底做…

python~http的请求参数中携带map

背景 调试 http GET请求的 map 参数&#xff0c;链路携带参数一直有问题&#xff0c;最终采用如下方式携带map 解决 user{"demo":"true","info":"王者"}url encode之后的效果如下所示 user%7B%22demo%22:%22true%22,%22info%22:%22…

(java/Spring boot)使用火山引擎官方推荐方法向大模型发送请求

首先在maven里面引入官方依赖 <dependency><groupId>com.volcengine</groupId><artifactId>volcengine-java-sdk-ark-runtime</artifactId><version>LATEST</version></dependency>然后我们编写测试类 package com.volcengin…

Scrum方法论指导下的Deepseek R1医疗AI部署开发

一、引言 1.1 研究背景与意义 在当今数智化时代&#xff0c;软件开发方法论对于项目的成功实施起着举足轻重的作用。Scrum 作为一种广泛应用的敏捷开发方法论&#xff0c;以其迭代式开发、快速反馈和高效协作的特点&#xff0c;在软件开发领域占据了重要地位。自 20 世纪 90 …

LeetCode 热题 100_搜索插入位置(63_35_简单_C++)(二分查找)(”>>“ 与 “/” 对比)

LeetCode 热题 100_搜索插入位置&#xff08;63_35&#xff09; 题目描述&#xff1a;输入输出样例&#xff1a;题解&#xff1a;解题思路&#xff1a;思路一&#xff08;二分查找&#xff09;&#xff1a; 代码实现代码实现&#xff08;思路一&#xff08;二分查找&#xff09…