【SAM】Segment Anything网络结构详解

Segment Anything网络结构详解

论文链接:http://arxiv.org/abs/2304.02643

代码链接:https://github.com/facebookresearch/segment-anything

一、整体框架

在这里插入图片描述

在这里插入图片描述

二、图像编码器image encoder

  使用一个MAE预训练好的ViT模型(ViT-H/16 使用了 14 × 14 14 \times 14 14×14的窗口注意力和四个等步长的全局注意力模块),最后输出特征宽度为原图大小的1/16。

  使用 1024 × 1024 1024 \times 1024 1024×1024大小的图像作为输入,缩放图像和填充最短边到1024,得到的图像特征大小为 64 × 64 64 \times 64 64×64,为减少特征维度,使用一个 1 × 1 1 \times 1 1×1的卷积核将特征缩放到1024个通道,接着使用一个1024通道 3 × 3 3 \times 3 3×3的卷积核,每个卷积核后面都带有层归一化。同一张图片仅需一次推理。

输入:image
输出:image embedding

三、Prompt encoder

 Prompt encoder:将特征映射为256维的向量embedding。

 一个点代表点位置编码的总和,其中一个可学习的embedding表示前景还是背景。

 一个框有一对embedding表示,分别为左上角点的位置编码和右下角点的位置编码。

 对于文字,则使用CLIP的文字编码。

Dense prompts(例如mask)对应图像上空间位置,输入mask设置为原图像大小的1/4倍。使用两个 2 × 2 2 \times 2 2×2,步长为2的卷积,输出通道分别为4和16。最后加上一个 1 × 1 1 \times 1 1×1的卷积映射到256维特征。每层都使用GELU激活函数和层归一化操作。mask和图像embedding进行元素相加。如果没有mask。就设置为一个可学习的embedding。

输入:point、box point、text、mask
输出:prompt tokens (prompt token + dense prompts token)

四、轻量级的mask解码器lightweight mask decoder

  轻量级的mask解码器:将图像embedding和prompt embedding映射为一个mask输出。在输入前插入一个可学习的输出token embedding。
在这里插入图片描述

输入:image embedding(含位置编码)、output token(dense prompts token) + prompt token(含位置编码)
输出:mask和IOU置信度

每个解码器层执行4个步骤:
1)token之间的自注意力;
2)token(作为查询)到图像嵌入的交叉注意力token to image attn(更新token).;
3)点积MLP更新每个token;
4)图像嵌入(作为查询Q)到token的交叉注意力image to token attn.(更新image embedding)。这一步骤更新了图像embedding,包含了prompt信息。

  在交叉注意力过程中,图像嵌入被视为一组 6 4 2 64^{2} 642个256维的向量。每个自/交叉注意力和MLP都有残差连接 [49],层归一化,以及训练时丢失率为0.1的dropout [93]。下一解码器层将前一层更新的token和更新的图像嵌入作为输入。使用两层的解码器

 解码器中每当参与注意力层,位置编码都会被添加到图像嵌入中,同时还会将原始prompt tokens(包含它们的位置编码ouput token)重新添加到更新的token中。-> 增强prompt token的几何位置和类型有很强的依赖。

  将解码器后更新的图像嵌入使用两个转置卷积上采样4倍。然后将token再次嵌入到图像嵌入中,将更新后的输出token传递到一个小型3层MLP(多层感知器),该MLP输出一个与放大图像嵌入通道维度匹配的向量。最后通过上采样图像嵌入和MLP输出的空间点积预测一个掩码mask。再将更新后的输出token经过一个MLP输出IOU对应的置信度。

五、结构详细说明

  1) Transformer使用输出256维的嵌入维度,Transformer中的MLP中间层使用2048维,在交叉注意层中使用一个 64 × 64 64 \times 64 64×64的图像嵌入,并将查询Q、键K和值V的通道维度减半到128维,使用8个头的注意力层。

  2) 用于上采样输出图像嵌入的2层转置卷积是 2 × 2 2 \times 2 2×2,步长为2,输出通道维度分别是64和32,含有层归一化层和GELU激活函数,token经过3层MLP后,两者点乘获得最后的mask。

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

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

相关文章

如何在JPG文件中隐写数据

概述 最近在做资源管理器背景的一个功能时,需要将信息传递到DLL中去, 主要就是传递一些比较简单的参数,包括图片的契合度,透明度之类的。通信方式有多种,毕竟是练手的功能,就想找一些以前没用过的方式。 …

基于STM32校车安全监控系统的设计(论文+源码+实物)

1 方案设计 根据设计要求,本设计校车安全监控系统的设计以STM32F103单片机作为主控制器,通过MQ传感器实现异常气体的检测,当异常气体浓度异常时会通过继电器打开车窗进行通风,以保证舒适的环境,通过红外传感器用于监…

BUUCTF PWN wp--jarvisoj_level0

第一步 checksec ,该题为64位。 分析一下二进制保护机制: Arch: amd64-64-little 这个字段表示二进制程序的架构是 64 位的小端序的 x86-64 架构。小端序意味着低位字节存储在内存中的低地址上,高位字节存储在高地址上。RELRO: No RELRO …

【Java】 为什么是split 方法按点号分割是用 “ \\. “ ?

前言: 小知识,记录自用and分享。 原因分析: 字符串的很多方法是可以使用正则表达式的,这里就包括了split这个方法。 . 在正则表达式里的意思是通配符,表示:匹配任意单个字符。那么,当使用split…

vue.js项目实战案例详细源码讲解

​ 大家好,我是程序员小羊! 前言: 为帮助大家更好地掌握Vue.js项目的开发流程,我将为你讲解一个完整的Vue.js实战案例,并提供详细的源码解析。这个案例将涵盖从项目创建到实现各种功能模块的全过程,适合用于…

媲美Flux pro! Ideogram 发布了 2.0 图像生成模型, 照片级真实感和高质量文本渲染!

Ideogram 发布了 2.0 模型,图像生成质量大幅提高,产品易用性改善,文字生成能力也提升许多。Ideogram 2.0 在图像快速对齐、照片级真实感和文本渲染质量方面取得了显著进步。人工评估一致认为 Ideogram 2.0 比 Flux Pro 和 DALLE 3 有了显著改进。尽管我们…

python网络爬虫(四)——实战练习

0.为什么要学习网络爬虫 深度学习一般过程:   收集数据,尤其是有标签、高质量的数据是一件昂贵的工作。   爬虫的过程,就是模仿浏览器的行为,往目标站点发送请求,接收服务器的响应数据,提取需要的信息&#xff0c…

vscode 未定义标识符 “uint16_t“C/C++(20) 但是可以顺利编译

这是没有指定编译器的原因 解决方法: 打开 或c_cpp_properties.json,添加编译器

AIGC提示词(2):塑造未来内容创作的核心力量

引言 🌟 在这个数字化的时代,人工智能生成内容(AIGC)正变得越来越普遍。从自动写作到图像生成,AI正以前所未有的速度和多样性创造内容。然而,要实现高质量和相关性强的内容生成,关键在于有效地…

PyCharm 自定义字体大小

常用编程软件自定义字体大全首页 文章目录 前言具体操作1. 打开设置对话框2. 设置编辑器字体3. 选择外观字体 前言 PyCharm 自定义字体大小,统一设置为 JetBrains Mono 具体操作 【File】>【Settings...】>【Editor】>【Font】 统一设置为字体样式 JetB…

算法基础-离散化

1、a数组可能存在重复元素 去重 排序 2、如何算出 x 离散化后的值 二分 1、add 和 query 记录每次填入的两个数 2、将位置 x 和每次询问的两个数 l 和 r 添加到 alls 进行排序去重 3、通过Collections.binarySearch映射(一定能找到,不用判…

如何构造哈夫曼树

目录 一、哈夫曼树的概念 1、结点的权: 2、结点的带权路径长度 3、树的带权路径长度 4、哈夫曼树 二、哈夫曼树的构造 1、构造步骤 三、哈夫曼树的编码 一、哈夫曼树的概念 1、结点的权: 定义: 每个结点的权重(重要性…

Linux终端简单配置(Vim、oh-my-zsh和Terminator)

文章目录 0. 概述1. 完整Vim配置2. Vim配置方案解释2.1 状态行与配色方案2.2 文件管理与缓存设置2.3 搜索与导航优化2.4 缩进与格式化设置2.5 粘贴模式快捷切换2.6 文件编码与格式2.7 性能优化 3. 安装 Oh My Zsh 及配置3.1 安装 Oh My Zsh3.2 Oh My Zsh 配置 3. Terminator终端…

Linux Grep案例

目录 一. 查询两个文件第一列的数据并去重二. 抽取日志中指定的字段三. 服务器指定时间点异常查询四. 从csv文件中抽取指定的数据五. 获取除了空白行和注释之外的部分 一. 查询两个文件第一列的数据并去重 📚file1.log 123 aaa 你好 345 bbb 我好 345 ccc 大家好 …

神经网络搭建实战与Sequential的使用

一、需要处理的图像 二、对上述图片用代码表示: import torch from torch import nn from torch.nn import Conv2d, MaxPool2d, Flatten, Linearclass SUN(nn.Module):def __init__(self):super(SUN, self).__init__()self.conv1 Conv2d(3, 32, 5, padding2)self…

RSTP的改进有哪些

华为设备生成树有几种模式? 4种模式:传统STP(802.1D)、RSTP(802.1w)、MSTP(802.1s)、VBST(基于VLAN的生成树,兼容某些厂商的每VLAN一颗生成树) A…

【大数据算法】时间亚线性算法之:串相等判定算法。

串相等判定算法 1、引言2、串相等判定算法2.1 定义2.2 核心原理2.3 应用场景2.4 算法公式2.4.1 Rabin-Karp算法2.4.2 哈希函数 2.5 代码示例 3、总结 1、引言 小屌丝:鱼哥, 啥是串相等判定算法啊 小鱼:这个… en…en… 小屌丝:咋…

Rust Linux开发人员自比道路建设者和寻路者的区别

红帽公司(Red Hat)的长期直接渲染管理器(Direct Rendering Manager,DRM)子系统维护者大卫-艾尔里(David Airlie)撰写了一篇有趣的博文,将开发人员的类型与筑路工人、寻路者与酒店进行…

swift自定义数据集微调Qwen-7B大模型,转换模型后使用ollama跑起来

前文:swift微调Qwen-7B大模型-CSDN博客 我详细介绍了swift如何进行微调,但数据集均来自魔搭社区,如何想训练自定义数据集,实际上也很简单。 一、自定义数据集微调 export MKL_THREADING_LAYERGNU \ CUDA_VISIBLE_DEVICES0,1,2…

本地编写Markdown格式文件,浏览器查看

编写准备 下载VsCode并安装,打开后在内部安装Markdown All in One、Markdown Preview Enhanced、Paste Image三个插件。新建一个文件夹用以后期保存你的笔记等文件在左侧新建文件,.md结尾,即完成创建右侧可实时的查看你的编写结果&#xff0…