首页 > 其他分享 >学习SAM过程中mask decoder的信息搜集+个人理解

学习SAM过程中mask decoder的信息搜集+个人理解

时间:2024-04-07 17:32:46浏览次数:32  
标签:SAM iou mask tokens token decoder 掩码 模型

SAM主要有图像编码器(image encoder)、提示编码器(prompt encoder)和掩码解码器(mask decoder)三部分构成,前两部分都比较直观,最后的掩码解码器(mask decoder)相对来说复杂一些。以下是搜集到的一些帮助理解掩码解码器(mask decoder)的资料。

文字讲解:

SAM模型详解 - 知乎

代码:

SAM之MaskDecoder总结(个人研究)_sam maskdecoder-CSDN博客

个人笔记内容: 
 

在SAM(Segment Anything Model)中,mask decoder的output tokens由两部分组成:iou token和mask tokens。

  1. iou token:这是一个特殊的token,用于预测模型输出的mask与真实mask之间的IoU(Intersection over Union)分数。IoU分数是一个衡量预测mask质量的指标,它计算预测mask和真实mask之间的交集与并集的比例。iou token通过一个单独的embedding层(iou_token)来生成,并且在Transformer模型的输出中占据第一个位置。

  2. mask tokens:这些tokens对应于模型预测的每个可能的分割mask。在SAM模型中,为了处理可能的歧义,通常会生成多个候选mask(例如,默认情况下可能会生成三个)。每个mask token通过一个嵌入层(mask_tokens)生成,并且它们在Transformer模型的输出中紧随iou token之后。

在mask decoder的前向传播过程中,iou token和mask tokens会一起参与到Transformer的解码过程中。通过这种方式,模型可以同时预测mask的质量评估(通过iou token)和多个可能的分割mask(通过mask tokens)。最终,根据任务的需求和模型的配置,可以选择返回单一的最佳mask或者多个候选mask供进一步分析或决策。

在SAM(Segment Anything Model)中,mask decoder的iou token和mask tokens是可学习的嵌入,它们不是从图像或其他外部数据直接得来的,而是在模型训练过程中学习得到的。

  1. iou token:这个token用于预测分割掩码的质量,即预测模型输出的掩码与真实掩码之间的IoU分数。在模型初始化时,iou token通过一个嵌入层(iou_token)随机初始化,然后在训练过程中通过反向传播算法进行调整,以便更好地预测掩码的质量。

  2. mask tokens:这些tokens代表了模型可能生成的每个分割掩码。与iou token类似,mask tokens也是在模型初始化时通过嵌入层(mask_tokens)随机生成的,并且在训练过程中不断学习以优化模型的分割性能。

在模型的前向传播过程中,这些tokens与图像编码器(image encoder)和提示编码器(prompt encoder)的输出一起输入到mask decoder的Transformer结构中。通过这种方式,模型能够结合图像内容和提示信息来生成准确的分割掩码,并预测每个掩码的质量。这些tokens的可学习性质使得模型能够灵活地适应各种图像分割任务,并提高其泛化能力。

在SAM(Segment Anything Model)的源码中,iou token和mask token的初始化可以在`MaskDecoder`类的构造函数(`__init__`)中找到。以下是相关的代码段,其中详细展示了如何在`MaskDecoder`中初始化这些tokens:

class MaskDecoder(nn.Module):
    def __init__(self, *, transformer_dim: int, transformer: nn.Module, num_multimask_outputs: int = 3, 
                 activation: Type[nn.Module] = nn.GELU, iou_head_depth: int = 3, 
                 iou_head_hidden_dim: int = 256,) -> None:
        super().__init__()
        self.transformer_dim = transformer_dim
        self.transformer = transformer
        self.num_multimask_outputs = num_multimask_outputs
        self.iou_token = nn.Embedding(1, transformer_dim)  # 初始化iou token
        self.num_mask_tokens = num_multimask_outputs + 1  # 计算mask token的数量
        self.mask_tokens = nn.Embedding(self.num_mask_tokens, transformer_dim)  # 初始化mask tokens
        # ... 其他组件的初始化 ...

在这段代码中,`iou_token`是通过`nn.Embedding`层创建的一个嵌入层,它接受1个输入token,并将其嵌入到`transformer_dim`维度的向量空间中。这个嵌入层的输出将代表IoU(Intersection over Union)预测的token。

`mask_tokens`同样是通过`nn.Embedding`层创建的,它初始化了`num_mask_tokens`个mask tokens。`num_mask_tokens`是`num_multimask_outputs`加1,其中`num_multimask_outputs`是模型预测时用于消除歧义的mask数量,默认值为3。这样,加上IoU预测的token,总共会有4个tokens(1个iou token和3个mask tokens)。

这些tokens在模型的前向传播过程中与图像特征和其他提示信息一起输入到Transformer中,用于生成分割掩码和预测它们的质量。初始化的tokens是可学习的,这意味着它们在模型训练过程中会根据数据进行调整,以便更好地执行图像分割任务。

标签:SAM,iou,mask,tokens,token,decoder,掩码,模型
From: https://blog.csdn.net/m0_46690805/article/details/137455944

相关文章

  • Sam Altman 联手苹果前首席设计官打造 AI 设备;特斯拉将推出无人驾驶出租车丨 RTE 开发
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人......
  • linux 搭建Samba服务
    Samba简介SAMBA是⼀个实现不同操作系统之间⽂件共享和打印机共享的⼀种SMB协议的免费软件,SMB(ServerMessageblock)协议是window下所使⽤的⽂件共享协议,我们在linux系统或者其类unix系统当中可以通过samba服务来实现SMB功能。(1)在⽹络上共享⽬录,决定访问权限;(2)在⽹络上共享......
  • #样题7 6.OpenVPN VPN 客户端只能与 InsideCli 客户端网段通信,允许访问 StorageSrv 主
    #样题76.OpenVPNVPN客户端只能与InsideCli客户端网段通信,允许访问StorageSrv主机上的SAMBA服务,允许访问AppSrv上的dns服务;VPN客户端可使用的地址范围是:172.16.0.100-172.16.0.120/24;在OutsideCli上创建连接服务“openvpn@csk.services”。......
  • Delving into Sample Loss Curve to Embrace Noisy and Imbalanced Data
    这篇论文:提出了prob-and-allocate训练策略,在prob阶段获得样本损失,在allocate阶段分配样本权重。以[2]的meta-weight-net为Baseline,取名为CurveNet,进行部分改动。另外,这篇论文提供的源码结构混乱,复现难度较大。主要的工作也是基于meta-weight-net,创新的内容有限。但是,这篇文章......
  • DMKD: IMPROVING FEATURE-BASED KNOWLEDGE DISTILLATION FOR OBJECT DETECTION VIA DU
    摘要最近主流的掩模蒸馏方法是通过从教师网络的特征图中重建学生网络的选择性掩模区域来实现的。在这些方法中,需要适当的选择掩模区域,使重构的特征像教师特征一样具有足够的识别和表示能力。然而,以前的掩模蒸馏方法只关注空间掩模,使得得到的掩模区域偏向于空间重要性,而没有......
  • webscoket 中的 mask 细节
    掩码用于给客户端到服务端的帧数据加密(异或的方式,非常简单),对此RFC6455中给了一些细节如下:Themaskingkeyiscontainedcompletelywithintheframe,asdefinedinSection5.2asframe-masking-key.Itisusedtomaskthe"Payloaddata"definedinthesamesection......
  • Windows 上设置 Samba
    Samba安装打开控制面板→程序和功能→启用或关闭Windows功能。Win10找不到控制面板的,可以按键盘上的Win+R键,输入control打开控制面板。   在弹出窗口中勾选SMB1.0/CIFS文件共享支持,子项中的三项全部勾选。SMB直通同样勾选上,然后点确定。   等......
  • 深度学习-卷积神经网络--Mask RCNN-62
    目录1.总体网络结构2.MaskRCNN细节3.loss4.预测参考链接:https://blog.csdn.net/qq_47233366/article/details/131326554?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522171196013016800213023649%252522%25252C%252522scm%252522%25253A%252522201......
  • fedora39免密访问samba设置
    个人备忘firewall-cmd--get-active-zonessudofirewall-cmd--permanent--zone=FedoraWorkstation--add-service=sambasudofirewall-cmd--reloadsudosemanagefcontext--add--type"samba_share_t""/home/share(/.*)?"sudorestorecon-R/hom......
  • mask
    maskTakesanytypeofpolygonandanoptionalmaskandreturnsapolygonexteriorringwithholes.获取任意类型的多边形和一个可选的遮罩,并返回一个带孔的多边形外部环。参数参数类型描述polygon(FeatureCollection|Feature<(Polygon|MultiPolygon)>)GeoJSON......