基于文本提示的图像目标检测与分割实践
近年来,计算机视觉取得了显着的进步,特别是在图像分割和目标检测任务方面。 最近值得注意的突破之一是分段任意模型(SAM),这是一种多功能深度学习模型,旨在有效地从图像和输入提示中预测对象掩模。 通过利用强大的编码器和解码器,SAM 能够处理各种分割任务,使其成为研究人员和开发人员的宝贵工具。
推荐:用 NSDT编辑器 快速搭建可编程3D场景
1、SAM模型简介
SAM 使用图像编码器(通常是视觉变换器 (ViT))来提取图像嵌入,作为掩模预测的基础。 该模型还包含一个提示编码器,它对各种类型的输入提示进行编码,例如点坐标、边界框和低分辨率掩模输入。 然后将这些编码的提示与图像嵌入一起输入掩码解码器以生成最终的对象掩码。
上述架构允许对已编码的图像进行快速、轻松的提示。
SAM 设计用于处理各种提示,包括:
- 掩模:可以提供粗略的、低分辨率的二进制掩模作为初始输入来指导模型。
点:用户可以输入 [x, y] 坐标及其类型(前景或背景)来帮助定义对象边界。 - Box:可以使用坐标 [x1, y1, x2, y2] 指定边界框,以告知模型有关对象的位置和大小。
- 文本:文本提示还可用于提供附加上下文或指定感兴趣的对象。
深入研究 SAM 的架构,我们可以探索其关键组件:
- 图像编码器:SAM默认的图像编码器是ViT-H,但根据具体要求也可以使用ViT-L或ViT-B。
- 下采样:为了降低提示二进制掩模的分辨率,采用了一系列卷积层。
- 提示编码器:位置嵌入用于对各种输入提示进行编码,这有助于告知模型图像中对象的位置和上下文。
- 掩码解码器:修改后的变压器编码器用作掩码解码器,将编码的提示和图像嵌入转换为最终的对象掩码。
- 有效掩码:对于任何给定的提示,SAM 都会生成三个最相关的掩码,为用户提供一系列可供选择的选项。
他们使用焦点、骰子和 IoU 损失的加权组合来训练模型。 权重分别为 20、1、1。
SAM 的优势在于其适应性和灵活性,因为它可以与不同的提示类型一起生成准确的分割掩模。 与作为各种自然语言处理应用程序的坚实基础的基础语言模型 (LLM) 非常相似,SAM 也为计算机视觉任务提供了坚实的基础。 该模型的架构旨在促进下游任务的轻松微调,使其能够针对特定用例或领域进行定制。 通过针对特定于任务的数据微调 SAM,开发人员可以增强其性能并确保其满足应用程序的独特要求。
这种微调能力不仅使 SAM 在各种场景中都能实现令人印象深刻的性能,而且还促进了更高效的开发过程。 以预训练模型为起点,开发人员可以专注于针对特定任务优化模型,而不是从头开始。 这种方法不仅节省时间和资源,而且还利用预训练模型中编码的广泛知识,从而形成更加强大和准确的系统。
2、自然语言提示
文本提示与 SAM 的集成使模型能够执行高度具体且上下文感知的对象分割。 通过利用自然语言提示,SAM 可以根据感兴趣的对象的语义属性、属性或与场景中其他对象的关系来对其进行分割。
在训练 SAM 的过程中,使用最大的公开可用的 CLIP 模型(ViT-L/14@336px)来计算文本和图像嵌入。 这些嵌入在用于训练过程之前会被标准化。
为了生成训练提示,每个掩码周围的边界框首先按 1 倍到 2 倍范围内的随机因子扩展。 然后对展开的框进行方形裁剪以保持其纵横比,并将大小调整为 336×336 像素。 在将裁剪图像输入 CLIP 图像编码器之前,掩模外部的像素以 50% 的概率被清零。 编码器的最后一层使用屏蔽注意力,以确保嵌入集中在对象上,从而将输出标记的注意力限制到屏蔽内的图像位置。 输出标记嵌入作为最终提示。 在训练期间,首先提供基于 CLIP 的提示,然后提供迭代点提示以完善预测。
为了进行推理,使用未修改的 CLIP 文本编码器为 SAM 创建提示。 该模型依赖于 CLIP 实现的文本和图像嵌入的对齐,这使得无需显式文本监督即可进行训练,同时仍使用基于文本的提示进行推理。 这种方法使 SAM 能够有效地利用自然语言提示来实现准确且上下文感知的分割结果。
不幸的是,Meta 还没有发布带有文本编码器的 SAM 的权重(还没有?)。
3、lang-segment-anything
lang-segment-anything 库结合了 GroundingDino 和 SAM 的优势,提出了一种创新的对象检测和分割方法。
最初,GroundingDino 执行零样本文本到边界框(text-to-bounding-box)对象检测,根据自然语言描述有效识别图像中感兴趣的对象。 然后,这些边界框用作 SAM 模型的输入提示,该模型为识别的对象生成精确的分割掩模。
from PIL import Image
from lang_sam import LangSAM
from lang_sam.utils import draw_imagemodel = LangSAM()
image_pil = Image.open('./assets/car.jpeg').convert("RGB")
text_prompt = 'car, wheel'
masks, boxes, labels, logits = model.predict(image_pil, text_prompt)
image = draw_image(image_pil, masks, boxes, labels)
4、Lightning AI应用
你可以使用Lightning AI App框架快速部署应用程序。 我们将使用 ServeGradio 组件通过 UI 部署我们的模型。 你可以在此处了解有关 ServeGradio 的更多信息。
import osimport gradio as gr
import lightning as L
import numpy as np
from lightning.app.components.serve import ServeGradio
from PIL import Imagefrom lang_sam import LangSAM
from lang_sam import SAM_MODELS
from lang_sam.utils import draw_image
from lang_sam.utils import load_imageclass LitGradio(ServeGradio):inputs = [gr.Dropdown(choices=list(SAM_MODELS.keys()), label="SAM model", value="vit_h"),gr.Slider(0, 1, value=0.3, label="Box threshold"),gr.Slider(0, 1, value=0.25, label="Text threshold"),gr.Image(type="filepath", label='Image'),gr.Textbox(lines=1, label="Text Prompt"),]outputs = [gr.outputs.Image(type="pil", label="Output Image")]def __init__(self, sam_type="vit_h"):super().__init__()self.ready = Falseself.sam_type = sam_typedef predict(self, sam_type, box_threshold, text_threshold, image_path, text_prompt):print("Predicting... ", sam_type, box_threshold, text_threshold, image_path, text_prompt)if sam_type != self.model.sam_type:self.model.build_sam(sam_type)image_pil = load_image(image_path)masks, boxes, phrases, logits = self.model.predict(image_pil, text_prompt, box_threshold, text_threshold)labels = [f"{phrase} {logit:.2f}" for phrase, logit in zip(phrases, logits)]image_array = np.asarray(image_pil)image = draw_image(image_array, masks, boxes, labels)image = Image.fromarray(np.uint8(image)).convert("RGB")return imagedef build_model(self, sam_type="vit_h"):model = LangSAM(sam_type)self.ready = Truereturn modelapp = L.LightningApp(LitGradio())
这样就可以了,应用程序在浏览器中启动!
5、结束语
这就是我们对分段任意模型的介绍的总结。 显然,SAM 对于计算机视觉研究人员和开发人员来说是一个有价值的工具,它能够处理各种分割任务并适应不同的提示类型。 其架构允许轻松实施,使其具有足够的通用性,可以根据特定的用例和领域进行定制。 总体而言,SAM 已迅速成为机器学习社区的重要资产,并且肯定会继续在该领域掀起波澜。
原文链接:文本提示目标检测与分割 — BimAnt
相关文章:

基于文本提示的图像目标检测与分割实践
近年来,计算机视觉取得了显着的进步,特别是在图像分割和目标检测任务方面。 最近值得注意的突破之一是分段任意模型(SAM),这是一种多功能深度学习模型,旨在有效地从图像和输入提示中预测对象掩模。 通过利用…...

【4-5章】Spark编程基础(Python版)
课程资源:(林子雨)Spark编程基础(Python版)_哔哩哔哩_bilibili 第4章 RDD编程(21节) Spark生态系统: Spark Core:底层核心(RDD编程是针对这个)Spark SQL:…...

04 卷积神经网络搭建
一、数据集 MNIST数据集是从NIST的两个手写数字数据集:Special Database 3 和Special Database 1中分别取出部分图像,并经过一些图像处理后得到的[参考]。 MNIST数据集共有70000张图像,其中训练集60000张,测试集10000张。所有图…...
【hadoop运维】running beyond physical memory limits:正确配置yarn中的mapreduce内存
文章目录 一. 问题描述二. 问题分析与解决1. container内存监控1.1. 虚拟内存判断1.2. 物理内存判断 2. 正确配置mapReduce内存2.1. 配置map和reduce进程的物理内存:2.2. Map 和Reduce 进程的JVM 堆大小 3. 小结 一. 问题描述 在hadoop3.0.3集群上执行hive3.1.2的任…...
数据结构--6.5二叉排序树(插入,查找和删除)
目录 一、创建 二、插入 三、删除 二叉排序树(Binary Sort Tree)又称为二叉查找树,它或者是一棵空树,或者是具有下列性质的二叉树: ——若它的左子树不为空,则左子树上所有结点的值均小于它的根结构的值…...

无需公网IP,在家SSH远程连接公司内网服务器「cpolar内网穿透」
文章目录 1. Linux CentOS安装cpolar2. 创建TCP隧道3. 随机地址公网远程连接4. 固定TCP地址5. 使用固定公网TCP地址SSH远程 本次教程我们来实现如何在外公网环境下,SSH远程连接家里/公司的Linux CentOS服务器,无需公网IP,也不需要设置路由器。…...
Java工具类
一、org.apache.commons.io.IOUtils closeQuietly() toString() copy() toByteArray() write() toInputStream() readLines() copyLarge() lineIterator() readFully() 二、org.apache.commons.io.FileUtils deleteDirectory() readFileToString() de…...

makefile之使用函数wildcard和patsubst
Makefile之调用函数 调用makefile机制实现的一些函数 $(function arguments) : function是函数名,arguments是该函数的参数 参数和函数名用空格或Tab分隔,如果有多个参数,之间用逗号隔开. wildcard函数:让通配符在makefile文件中使用有效果 $(wildcard pattern) 输入只有一个参…...
算法通关村第十八关——排列问题
LeetCode46.给定一个没有重复数字的序列,返回其所有可能的全排列。例如: 输入:[1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 元素1在[1,2]中已经使…...

基于STM32设计的生理监测装置
一、项目功能要求 设计并制作一个生理监测装置,能够实时监测人体的心电图、呼吸和温度,并在LCD液晶显示屏上显示相关数据。 随着现代生活节奏的加快和环境的变化,人们对身体健康的关注程度越来越高。为了及时掌握自身的生理状况,…...
Go-Python-Java-C-LeetCode高分解法-第五周合集
前言 本题解Go语言部分基于 LeetCode-Go 其他部分基于本人实践学习 个人题解GitHub连接:LeetCode-Go-Python-Java-C Go-Python-Java-C-LeetCode高分解法-第一周合集 Go-Python-Java-C-LeetCode高分解法-第二周合集 Go-Python-Java-C-LeetCode高分解法-第三周合集 G…...
【前端知识】前端加密算法(base64、md5、sha1、escape/unescape、AES/DES)
前端加密算法 一、base64加解密算法 简介:Base64算法使用64个字符(A-Z、a-z、0-9、、/)来表示二进制数据的64种可能性,将每3个字节的数据编码为4个可打印字符。如果字节数不是3的倍数,将会进行填充。 优点࿱…...

leetcode 925. 长按键入
2023.9.7 我的基本思路是两数组字符逐一对比,遇到不同的字符,判断一下typed与上一字符是否相同,不相同返回false,相同则继续对比。 最后要分别判断name和typed分别先遍历完时的情况。直接看代码: class Solution { p…...
[CMake教程] 循环
目录 一、foreach()二、while()三、break() 与 continue() 作为一个编程语言,CMake也少不了循环流程控制,他提供两种循环foreach() 和 while()。 一、foreach() 基本语法: foreach(<loop_var> <items>)<commands> endfo…...

Mojo安装使用初体验
一个声称比python块68000倍的语言 蹭个热度,安装试试 系统配置要求: 不支持Windows系统 配置要求: 系统:Ubuntu 20.04/22.04 LTSCPU:x86-64 CPU (with SSE4.2 or newer)内存:8 GiB memoryPython 3.8 - 3.10g or cla…...

艺术与AI:科技与艺术的完美融合
文章目录 艺术创作的新工具生成艺术艺术与数据 AI与互动艺术虚拟现实(VR)与增强现实(AR)机器学习与互动性 艺术与AI的伦理问题结语 🎉欢迎来到AIGC人工智能专栏~艺术与AI:科技与艺术的完美融合 ☆* o(≧▽≦…...

Android常用的工具“小插件”——Widget机制
Widget俗称“小插件”,是Android系统中一个很常用的工具。比如我们可以在Launcher中添加一个音乐播放器的Widget。 在Launcher上可以添加插件,那么是不是说只有Launcher才具备这个功能呢? Android系统并没有具体规定谁才能充当“Widget容器…...

探索在云原生环境中构建的大数据驱动的智能应用程序的成功案例,并分析它们的关键要素。
文章目录 1. Netflix - 个性化推荐引擎2. Uber - 实时数据分析和决策支持3. Airbnb - 价格预测和优化5. Google - 自然语言处理和搜索优化 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专…...

jupyter 添加中文选项
文章目录 jupyter 添加中文选项1. 下载中文包2. 选择中文重新加载一下,页面就变成中文了 jupyter 添加中文选项 1. 下载中文包 pip install jupyterlab-language-pack-zh-CN2. 选择中文 重新加载一下,页面就变成中文了 这才是设置中文的正解ÿ…...
系列十、Java操作RocketMQ之批量消息
一、概述 RocketMQ可以一次性发送一组消息,那么这一组消息会被当做一个消息进行消费。 二、案例代码 2.1、pom 同系列五 2.2、RocketMQConstant 同系列五 2.3、BatchConsumer package org.star.batch.consumer;import cn.hutool.core.util.StrUtil; import lom…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
《Playwright:微软的自动化测试工具详解》
Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

FFmpeg avformat_open_input函数分析
函数内部的总体流程如下: avformat_open_input 精简后的代码如下: int avformat_open_input(AVFormatContext **ps, const char *filename,ff_const59 AVInputFormat *fmt, AVDictionary **options) {AVFormatContext *s *ps;int i, ret 0;AVDictio…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...

Axure 下拉框联动
实现选省、选完省之后选对应省份下的市区...

自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...