MobileSAM论文笔记

news2024/11/26 2:37:25

摘要

自Meta研究团队发布SAM(Segment Anything Model)项目依赖,因其令人惊艳的零样本迁移特性和与其他视觉应用兼容的高通用性,引起了极大的关注。由于大多数类似的应用都需要运行在资源限制的边缘设备,如手机,因此,本文的目标是通过使用轻量化的encoder替换原始计算量大的encoder使其称为移动友好型模型。一个简单的思路是按照SAM原文训练一个新的轻量化的SAM,但是效果不理想,尤其是在有限训练资源的情况下。作者发现效果不理想是由于图像编码器和mask解码器的耦合优化(coupled optimization)引起的,因此,提出了解耦蒸馏法。具体而言,就是将原始SAM的图像编码器的知识蒸馏给一个轻量化的encoder,它可以与原始SAM中的mask解码器自动兼容。MoibleSAM的训练过程可以在1天之内单张GPU上完成,相同性能的情况下,参数量少了60多倍。在推理速度上,MobileSAM平均10ms一张图像,特征提取8ms和mask解码2ms。凭借卓越的性能和更高的通用性,MobileSAM比同期的FastSAM小7倍,快5倍,更适合移动端使用。此外,MobileSAM可以在CPU上更加流畅的推理运行。
太长不看版:
作者发现由于图像编码器和mask解码器的耦合优化,使得单纯重新训练一个轻量化的SAM效果不佳,提出了解耦蒸馏法。具体而言,就是将原始SAM的图像编码器的知识蒸馏给一个轻量化的encoder,它可以与原始SAM中的mask解码器自动兼容。
MoibleSAM的训练过程可以在1天之内单张GPU上完成,相同性能的情况下,参数量少了60多倍。在推理速度上,MobileSAM平均10ms一张图像,特征提取8ms和mask解码2ms

模型结构

SAM

在介绍MoibleSAM之前,先了解一下SAM模型。如下图所示,SAM包含两个部分:图像编码器和mask解码器,相比于mask解码器的4M参数量,图像编码器的参数量为632M,这使得部署SAM在移动端非常困难。因此,使用轻量化的模型替换原始的图像编码器成为优化手段。
image.png

解耦蒸馏

如下图所示,左边为coupled distillation,指的是采用知识蒸馏的方法将ViT-H的知识蒸馏给一个更小的图像编码器。然而,这种直接替换在重新训练的难度主要在于图像编码器和mask解码的耦合优化。基于分而治之的思路,作者提出将知识蒸馏的任务分为两个子任务:图像编码器蒸馏和mask编码器微调。如右图所示,将mask解码器冻结之后进行知识蒸馏,这种蒸馏法称为seim-coupled distillation。
image.png
然而,根据经验发现这种优化仍然存在挑战性,因为prompt的选择是随机的,使得mask解码器可变,从而增加了优化难度。因此,提出直接把ViT-H蒸馏到小的图像编码器中,该方法称为decoupled distillation,如下图所示。在图像embedding上直接进行蒸馏的好处是可以使用简单的MSE损失,而不需要使用focal loss和dice loss。
image.png

微调mask解码器的必要性

使用decoupled蒸馏法后,发现由于student图像编码器生成的embedding接近teacher,使得微调mask解码器变成可选项。如果需要微调mask解码器,可以冻结图像编码器或者一起微调可能进一步提升性能。

效果对比

将原始SAM生成的mask作为GT,输入相同点比较coupled和的coupled蒸馏法的效果差异。在coupled蒸馏中,使用ViT-B作为图像编码器,在SA-1B数据集上训练180个迭代。相反,在decoupled蒸馏中,使用SA-1B的1%数据训练55个迭代。结果对比如下表所示,decoupled蒸馏法取得0.75的mIoU。
image.png

实验结果

轻量化图像编码器

本文的目标是通过使用一个轻量化模型替换原始SAM的ViT-H来得到一个高效的SAM。作为一个ViT-based基础网络,ViT-Tiny与Deit-Tiny有相似的参数量但效果更好。例如,在ImageNet-1K数据集上,Deit-Tiny取得72.2%精度但ViT-Tiny是79.1%。因此采用ViT-Tiny作为MobileSAM的图像编码器,验证本文提出的解耦蒸馏法有效性。
image.png

训练和评估细节

为了蒸馏图像编码器,本文使用1%的SA-1B数据在单张GPU上训练8个epoch。由于在知识蒸馏过程中,教师图像编码器占用大部分的计算资源,因此,为了加速蒸馏过程,首先将数据集的图像的embedding保存下来。至此,在单张GPU下,训练不到一天就可以得到MobileSAM。在更多GPU上训练更长时间可以得到更好的效果。最开始的研究结果可知通过微调mask解码器可以进一步提升MobileSAM的性能,但是本文中为了简单跳过了该步骤。为了评估MoblieSAM的效果,计算原始SAM和MobileSAM预测的mask之间的mIoU。

可视化结果

MobileSAM给出了基于点和目标框的两种预测mask结果,以及分割一切的结果对比,如下图所示。
image.png
image.png
image.png

消融实验

如下图所示,可以发现在相同迭代次数情况下,增大batch size可以提升模型性能。此外,在相同batch size下,通过增加训练epoch可以提升性能。
image.png

与FastSAM对比

如下表所示,FastSAM包含68M参数量,推理一张图片用时40ms。相反,MoibleSAM参数量小于10M,推理时间进行12ms。
image.png
FastSAM推理mask时需要输入多个points,因此将其中1个点设为前景,其余都为背景点。下图为对比结果,可以看到FastSAM的mIoU远小于MobileSAM表明FastSAM预测的mask与原始SAM的偏差较大。
image.png

结论

本文工作的目标是通过使用轻量化的模型替换原始SAM的图像编码器,使其移动端友好。由于SAM中图像编码器和mask解码器的耦合优化,使得直接训练一个轻量化模型效果不佳,因此提出了解耦蒸馏,将图像编码器ViT-H的知识蒸馏给一个轻量化的编码器。MobileSAM的参数量比原始SAM少了60多倍,同时MobileSAM延续原始SAM模型的接口,仅仅替换了图像编码器,因此,可以与SAM模型的使用方法无缝对接。

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

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

相关文章

苹果独占鳌头,国产手机围攻,双十一“照妖镜”显露谁有真实力

随着双十一购物节的结束,电商平台也给出了各手机品牌的销量数据,苹果毫无疑问成为双十一的赢家,不过两家国产手机品牌也显露了他们的实力,已具有与苹果一战之力。 与去年双十一和今年618类似,苹果仍然占据热销榜前列&a…

YOLOv8-Seg改进:SPPF系列改进篇 | 大核分离卷积注意力模块( Large Separable Kernel Attention)

🚀🚀🚀本文改进:大核分离卷积注意力模块( Large Separable Kernel Attention),实现涨点的目标并且降低计算复杂度和显存,引入到YOLOv8,与SPPF结合实现二次创新; 🚀🚀🚀Large Separable Kernel Attention 亲测在多个数据集能够实现涨点,同样适用于小目标分…

自己动手重装电脑Win10系统方法教程

如果我们自己电脑系统出现问题了,无法通过简单的操作解决,这时候最佳的解决方法,就是给电脑重装安装操作系统。有用户想给电脑重装Win10系统,但不清楚具体的重装步骤方法,下面小编就给大家详细介绍自己手动重新安装Win…

win下oracle安装与navicat远程连接配置

oracle安装 navicat远程连接配置 1、打开navicat,工具>选项>环境 2、配置 找到oracle安装目录 3、连接

7.jvm对象内存布局

目录 概述对象里的三个区对象头验证代码控制台输出分析 验证2代码控制台输出 实例数据对其填充 访问对象结束 概述 jvm对象内存布局详解。 相关文章在此总结如下: 文章地址jvm基本知识地址jvm类加载系统地址双亲委派模型与打破双亲委派地址运行时数据区地址运行时数…

【C/PTA——8.数组2(课外实践)】

C/PTA——8.数组2&#xff08;课外实践&#xff09; 7-4 矩阵运算7-2 方阵循环右移7-3 螺旋方阵7-4 数组-杨辉三角7-5 数组-对角线求和7-6 数组-矩阵最小值 7-4 矩阵运算 #include<stdio.h> int main() {int n, i, j;int a[10][10] { 0 };scanf("%d", &n)…

CodeEase标准化的低代码平台

目录 一、引言二、网站简介三、网站特色四、为什么推荐这个网站&#xff1f;五、总结 一、引言 随着互联网的快速发展&#xff0c;我们每天都会浏览各种各样的网站。今天&#xff0c;我想向大家推荐一个独特而出色的网站——CodeEase&#xff0c;这是一个致力于为用户提供便捷…

LLM App ≈ 数据ETL管线

虽然现有的 LLM 应用程序工具&#xff08;例如 LangChain 和 LlamaIndex&#xff09;对于构建 LLM 应用程序非常有用&#xff0c;但在初始实验之外不建议使用它们的数据加载功能。 当我构建和测试我的LLM应用程序管道时&#xff0c;我能够感受到一些尚未开发和破解的方面的痛苦…

TrOCR模型微调【基于transformer的光学字符识别】

TrOCR&#xff08;基于 Transformer 的光学字符识别&#xff09;模型是性能最佳的 OCR 模型之一。 在我们之前的文章中&#xff0c;我们分析了它们在单行打印和手写文本上的表现。 然而&#xff0c;与任何其他深度学习模型一样&#xff0c;它们也有其局限性。 TrOCR 在处理开箱…

任正非说:要提高合同质量,使我们从广种薄收转向有效益的扩张。

你好&#xff01;这是华研荟【任正非说】系列的第38篇文章&#xff0c;让我们聆听任正非先生的真知灼见&#xff0c;学习华为的管理思想和管理理念。 华研荟注&#xff1a;前两天为大家分享了任正非先生讲话中关于IPD、ISC、LTC流程的一些内容。今天来看看任正非对于合同的要求…

Programming Abstractions in C阅读笔记:p196

《Programming Abstractions in C》学习第63天&#xff0c;p196总结。涉及到编程之外的知识&#xff0c;依然是读起来很费劲&#xff0c;需要了解作者在书中提到的人物(Edouard Lucas)、地点(Benares)、神话传说(Brahma)等等。虽然深知自己做不到对人文知识&#xff0c;历史知识…

【教3妹学编程-算法题】阈值距离内邻居最少的城市

3妹&#xff1a;好冷啊&#xff0c; 冻得瑟瑟发抖啦 2哥 : 立冬之后又开始降温了&#xff0c; 外面风吹的呼呼的。 3妹&#xff1a;今天还有雨&#xff0c;2哥上班记得带伞。 2哥 : 好的 3妹&#xff1a;哼&#xff0c;不喜欢冬天&#xff0c;也不喜欢下雨天&#xff0c;要是我…

Vue学习day01:追风记事本

文章目录 一、插值表达式二、Vue常用指令2.1 内容渲染指令2.2 条件渲染指令2.3 事件绑定指令2.4 属性绑定指令2.5 列表渲染指令2.6 双向绑定指令 三、案例&#xff1a;追风记事本 一、插值表达式 插值表达式是一种Vue的模板语法&#xff0c;我们可以用插值表达式渲染出Vue提供的…

通用的链栈实现(C++)

template<class T> class MyStack//链栈 { private:struct StackNode{T data;StackNode* next;StackNode(const T& val T(), StackNode* p nullptr) :data(val), next(p) {}//};StackNode* top;int cursize;void clone(const MyStack& s){Clear();cursize s.c…

基于 Junit 的接口自动化测试框架实现!

分层的自动化测试 5~10 年前&#xff0c;我们接触的自动化测试更关注的是 UI 层的自动化测试&#xff0c;Mercury 的 WinRunner/QTP 是那个时代商业性自动化测试产品的典型代表&#xff0c;在那个时代大家单纯想的都是能用一个自动化操作的工具替代人力的点击&#xff0c;商业…

CorelDraw(cdr)2023最新版本的图形设计软件

CorelDRAW 2023是Corel公司推出的最新版本的图形设计软件。CorelDRAW是一款功能强大的矢量图形编辑工具&#xff0c;被广泛用于图形设计、插图、页面布局、照片编辑和网页设计等领域。 CorelDraw&#xff08;cdr&#xff09;2023 1. 新增的设计工具&#xff1a;CorelDRAW 2023…

vue3中的getCurrentInstance()函数,为什么要解构出proxy,因为proxy是响应式对象,要用响应式对象

Vue3组合式API&#xff1a;getCurrentInstance_vue3 getcurrentinstance-CSDN博客 1.getCurrentInstance函数只能写在生命周期钩子函数里&#xff0c;不能写在除生命周期之外的普通函数里&#xff0c;写了拿到的是null 2.调用 getCurrentInstance函数拿到的是一个对象&#xf…

HTML字符实体

从注释汲取知识&#xff0c;由代码熟悉用法&#xff0c;所以直接看代码吧&#xff01;&#x1f447;&#x1f447;&#x1f447; <body><!-- 空格 --><!-- 三个空格&#xff0c;实际只显示一个 --><div>我 嘎嘎嘎</div><!-- 用字符实体代替…

观察者模式-C++

观察者模式&#xff08;Observer&#xff09;是一种行为型设计模式&#xff0c;它用于在对象之间建立一对多的依赖关系&#xff0c;当一个对象发生改变时&#xff0c;所有依赖它的对象都会收到通知进行相应的改变。 观察者模式中有两种核心角色&#xff1a; 观察者&#xff0…

关于三维模型几何坐标修正的技术方法探究

关于三维模型几何坐标修正的技术方法探究 倾斜摄影三维模型的几何坐标修正是保证模型准确性和一致性的重要步骤。下面将探讨几种常见的技术方法用于倾斜摄影三维模型几何坐标修正。 1、块内坐标转换&#xff1a;在倾斜摄影中&#xff0c;可以将整个场景划分为多个块&#xff0…