首页 > 其他分享 >EdgeSAM: Prompt-In-the-Loop Distillation for On-Device Deployment of SAM

EdgeSAM: Prompt-In-the-Loop Distillation for On-Device Deployment of SAM

时间:2024-03-13 16:31:12浏览次数:30  
标签:EdgeSAM Prompt 掩膜 SAM 提示 解码器 蒸馏

EdgeSAM: Prompt-In-the-Loop Distillation for On-Device Deployment of SAM

EdgeSAM论文:https://arxiv.org/pdf/2312.06660.pdf
EdgeSAM代码:https://github.com/chongzhou96/EdgeSAM

1 概述

作者在对各种蒸馏策略进行深入剖析后,证实了task-agnostic的编码器蒸馏难以完全吸收SAM所掌握的全部知识。鉴于此,EdgeSAM巧妙地循环运用bbox与point提示词,并同步对提示词编码器和Mak解码器进行蒸馏,以确保蒸馏模型能够精准地掌握提示词与Mask之间错综复杂的关联。EdgeSAM是首个能在iPhone 14上以超过30 FPS运行的SAM变体。
在这里插入图片描述

  • 在2080Ti上,相比原生SAM,EdgeSAM推理速度快40倍;
  • 在iPhone14上,相比MobileSAM,EdgeSAM推理速度快14倍,达到了38.7fps。

2 EdgeSAM

EdgeSAM的目标是将SAM的功能转移到一个更为紧凑的模型中,使得在边缘设备上的部署变得可行。因此,EdgeSAM保留了SAM的编码器-解码器架构,并旨在保持零样本交互式分割(通过框和点提示)的性能。EdgeSAM的核心是在知识蒸馏过程中考虑提示词,以便学生模型接受任务特定的指导,并专注于更难的训练目标,如更精细的边界。为此引入了一种动态提示词采样策略,旨在实现三个关键目标:(1)从初始提示词(无论是框还是点)中动态生成一组多样化的提示词组合;(2)准确识别学生模型在掩膜内表现不准确的区域,从而将其注意力集中在这些特定部分;(3)迫使教师模型(即SAM)产生高质量的掩膜,以提供更精确的指导。
在这里插入图片描述

2-1 仅编码器知识蒸馏 Encoder-Only Knowledge Distillation

由于学生模型和SAM图像编码器的下采样步长和特征通道并不一致,MobileSAM移除了学生模型最后两个阶段的下采样操作,并使用一个投影层来对齐通道维度。EdgeSAM构建了一个小型FPN(特征金字塔网络),将特征上采样到所需的分辨率,并与前几个阶段的特征进行逐元素相加来保持下采样层不变,最后也使用投影层进行通道对齐。

实验发现,使用不同的backbones、更长的训练计划或者使用为密集预测任务设计的蒸馏损失并没有表现出明显的性能提升。

2-2 循环Prompt知识蒸馏 Prompt-In-the-Loop Knowledge Distillation

SAM的掩膜解码器是一个双流双向转换器,其中来自图像编码器的输出特征图f作为其中一个流的输入,而稀疏提示嵌入p与四个掩膜标记m和一个IoU标记c连接在一起,作为另一个流的输入。稀疏提示可以是正/负点的任意组合以及一个单独的框,用于指示用户感兴趣的对象。

作者观察到,微调掩膜解码器会对零样本泛化能力构成挑战。也就是说,使用特定组合的提示进行训练会破坏其在推理时使用未训练过的提示组合时的能力。因此引入了一种循环Prompt知识蒸馏。这种策略旨在实现三个关键目标:(1)从初始提示(无论是框还是点)中动态生成一组多样化的提示组合;(2)准确识别掩膜内学生模型表现不准确的区域,从而将这些特定部分作为焦点;(3)迫使教师模型(即SAM)生成高质量的掩膜,以提供更精确的指导。策略如下:
在这里插入图片描述
从初始提示开始。以相同的概率,从SA-1B数据集中提供的框或点提示中选取一个,作为教师和学生模型解码器的输入。接着,我们识别出教师和学生模型掩膜预测不一致的区域。如下图所示,以教师的输出为参考,在标记为假负的区域中均匀采样新的正点提示,或在识别为假正的区域中采样新的负点提示。然后,将这些新采样的点与现有的提示组合起来,用于下一次解码迭代。值得注意的是,每个提示都会导致四个不同粒度级别的掩膜预测。其中不一致性是在具有最高IoU分数的教师掩膜与其对应的学生掩膜之间计算的。
在这里插入图片描述
实验表明,相比于依赖专门用于密集预测的损失或基于查询的方法进行蒸馏,在蒸馏过程中动态地将适当的提示组合输入到掩膜解码器中更为有效。提出的循环提示蒸馏方法优先使用策略性提示来增强学习过程。

2-3 粒度先验 Granularity Priors

由于SA-1B是一个类别无关、多粒度、自动标注的数据集,其标注分布可能与由人力密集标注的数据集(如COCO)存在很大差异。
因此,对于模糊提示词,如单点,SAM很难确定所需的输出粒度。如下图所示,使用框提示词时,SAM可以轻松地确定目标粒度。
在这里插入图片描述
构建了一个轻量级的区域提议网络(RPN)[41],该网络由特征金字塔网络(FPN)和一个共享检测头组成。RPN在特定数据集(例如COCO)上进行训练,以捕获其粒度先验。在推理过程中,合并那些中心点为点提示词的K个最近邻(根据置信度得分加权)的提议框。最后,将合并后的框与点输入一起作为提示词,输入到掩膜解码器中。

3 Experiments

在这里插入图片描述
在这里插入图片描述

标签:EdgeSAM,Prompt,掩膜,SAM,提示,解码器,蒸馏
From: https://blog.csdn.net/shanglianlm/article/details/136683942

相关文章

  • Samtec理念 | 测试在工程中的意义
    【摘要/前言】测试是所有制造过程的最后一个步骤,本应是非常重要的步骤,但却经常被忽视。测试不缜密的产品一旦流入市场,必然会摧毁质量声誉。在当今按键发文就能让全世界知晓的全民媒体时代,测试的重要性就更加彰显。与此同时,随着产品本身日渐复杂,受测产品的精密程度也随之攀升......
  • jmeter 取样器超时(Sample timeout) 设置
    1.取样器超(Sampletimeout)设置可以对采样器设置最大超时时间注:当设置为0时,0是个特殊值,相当于无限大,永不超时右键>>>添加>>>前置处理器>>>取样器超时(SampleTimeout) Sampletimeout(inmilliseconds):超时时间,默认时间为10s秒注:当设置为0时,0是个特殊值,相当于无限大,永......
  • RAG实战5-自定义prompt
    RAG实战5-自定义prompt在阅读本文之前,先阅读RAG实战4。在RAG实战4中我们分析了LlamaIndex中RAG的执行过程,同时留下了一个尚待解决的问题:LlamaIndex中提供的prompttemplate都是英文的,该如何使用中文的prompttemplate呢?直接看以下代码:importloggingimportsysimporttorchf......
  • A Sample of Ozaria Assessments and Quizzes
      HowTo:ShareLesson&ActivitySlideswithyourStudentsOzariaprovideseducatorswithturnkeycurriculumresources.TheseincludeLessonSlides,whichcanbefoundforeachmoduleintheCurriculumGuide: TheyalsoincludeActivitySlide......
  • 解密prompt系列26. 人类思考vs模型思考:抽象和发散思维
    在ChainofThought出来后,出现过许多的优化方案例如Treeofthought,GraphofThought,AlgorithmofThought等等,不过这些优化的出发点都更加"MachineLike",而非"HumanLike",哈哈不是说机器化不好,仅仅是对AGI的一些个人偏好而已。所以如果我们从人类思考的角度出发,能否把当......
  • ChatGPT 正确使用 prompt
    ChatGPT正确使用prompt什么是promptprompt可以提问或指导像ChatGPT这样的语言模型输出的过程,它允许用户控制模型的输出,生成符合其特定需求的文本。prompt公式prompt公式是prompt的特定格式,通常由三个主要元素组成:任务:明确而简洁地陈述prompt要求模型生成的内容。指......
  • ubuntu 22.04 安装samba服务
    1.安装软件sudoaptinstallsambasamba-common如果出现类似错误:dpkg:处理软件包samba-common-bin(--configure)时出错参考如下处理:sudosumv/var/lib/dpkg/info/var/lib/dpkg/info_bakmkdir/var/lib/dpkg/infoapt-getupdate&&apt-get-finstallmv/var/l......
  • (续)signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library) —— 强化学
    前文:signal-slot:python版本的多进程通信的信号与槽机制(编程模式)的库(library)——强化学习ppo算法库sample-factory的多进程包装器,实现类似Qt的多进程编程模式(信号与槽机制)——python3.12版本下成功通过测试......
  • 指令(Prompt)基本格式
    指令(Prompt)基本格式:参考信息:包含文心一言完成任务时需要知道的必要背景和材料,如:报告、知识、数据库、对话上下文等动作:需要文心一言帮你解决的事情,如:撰写、生成、总结、回答等目标:需要文心一言生成的目标内容,如:答案、方案、文本、图片、视频、图表等要求:需要文心一言遵循的任......
  • Linux下挂在samba 文件夹到本地
    在Linux中,可以使用mount命令来打开SMB(ServerMessageBlock)共享。sudomount-tcifs//服务器IP地址/共享目录路径/本地挂载点-ousername=用户名,password=密码其中,需要将"//服务器IP地址/共享目录路径"替换为实际的SMB共享路径;"/本地挂载点"替换为希望在本地创建的文件夹作......