MobileSAM论文笔记

摘要

自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模型的使用方法无缝对接。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HashMap源码分析(三)

迭代&遍历 HashMap总共有3种遍历容器的方式&#xff1a; 1.使用Iterator迭代&#xff08;推荐&#xff09; Iterator<Map.Entry<String, String>> iterator hashMap.entrySet().iterator(); while (iterator.hasNext()){System.out.println(iterator.next(…

C++算法: 最大化数组末位元素的最少操作次数

涉及知识点 数学 题目 给你两个下标从 0 开始的整数数组 nums1 和 nums2 &#xff0c;这两个数组的长度都是 n 。 你可以执行一系列 操作&#xff08;可能不执行&#xff09;。 在每次操作中&#xff0c;你可以选择一个在范围 [0, n - 1] 内的下标 i &#xff0c;并交换 num…

uniapp: 实现pdf预览功能

目录 第一章 实现效果 第二章 了解并解决需求 2.1 了解需求 2.2 解决需求 2.2.1 方法一 2.2.2 方法二 第三章 资源下载 第一章 实现效果 第二章 了解并解决需求 2.1 了解需求 前端需要利用后端传的pdf临时路径实现H5端以及app端的pdf预览首先我们别像pc端一样&#…

webgoat-Challenges

AdminLostpassword 这一题密码藏在logo图片里 请求GET /WebGoat/challenge/logo 搜索admin看到密码&#xff0c;使用账号admin和这个密码登录拿到flag Without password 题目要求&#xff1a;在不知道Larry的密码情况下登录 考虑使用SQL注入 密码输入 123 or 11 -- Admin p…

CSRF漏洞

文章目录 CSRF(跨站请求伪造漏洞&#xff09;关键点目标CSRF类别GET方式post方式 CSRF验证CSRF 实战与 XSS 漏洞相结合 CSRF 防御无效防御有效防御 案例CSRF 漏洞实战 CSRF(跨站请求伪造漏洞&#xff09; ​ 跨站请求伪造(Cross Site Request Forgery&#xff0c;CSRF)是一种攻…

2023最新版JavaSE教程——第6天:面向对象编程(基础)

目录 一、面向对象编程概述(了解)1.1 程序设计的思路1.2 由实际问题考虑如何设计程序1.3 如何掌握这种思想&#xff1f; 二、Java语言的基本元素&#xff1a;类和对象2.1 引入2.2 类和对象概述2.3 类的成员概述2.4 面向对象完成功能的三步骤(重要)2.4.1 步骤1&#xff1a;类的定…

C# Spire.Pdf将PDF文件转换为Word文件

一.开发框架&#xff1a; .NetCore6.0 工具&#xff1a;Visual Studio 2022 二.思路&#xff1a; 1.界面上传PDF文件&#xff0c;并保存 2.PDF文件转换为Word文件并保存 3.使用SHA256Hash判断文件是否已经转换过了&#xff0c;转换过了的话&#xff0c;就返回原先转换过的文…

保姆级使用vuedraggable三方组件

第一步 引入vuedraggable npm i vuedraggable -S 第二步 直接使用&#xff0c;源码如下 <template><draggableclass"list-group"tag"ul"v-model"list"v-bind"{animation: 1000,group: description,disabled: false,ghostClass:…

嵌入式养成计划-49----ARM--计算机相关理论--ARM相关内容

一百二十三、计算机相关理论 123.1 计算机的组成 目前的计算机都还是 冯诺依曼体系 &#xff0c;也就是由&#xff1a;输入、输出、运算器、存储器、控制器&#xff0c;这个五个部分构成。输入&#xff1a;Input&#xff0c;常见的输入设备&#xff0c;比如鼠标&#xff0c;键…

五、L2TPv2 VPN

L2TPv2 VPN 1、L2TPv2概述1.1.目的1.2.特点 2、L2TP原理2.1.基本概念2.2.工作原理2.2.1.协议架构2.2.2.报文结构2.2.3.报文封装2.2.4.报文传输 3、工作过程4、应用场景4.1、远程拨号用户发起L2TP隧道连接4.2、LAC接入拨号请求发起L2TP隧道连接4.3、LAC接入PPPoE用户发起L2TP隧道…

远程运维的定义以及优点详细讲解-行云管家

对于IT运维小伙伴而言&#xff0c;远程运维是最平常不过的一件事情了。比如下班了需要工作&#xff0c;可以远程运维就好了&#xff1b;比如帮助用户远程安装远程运维软件等等。今天我们就一起来简单聊聊远程运维的定义以及优点&#xff0c;顺便看看市面上哪款远程运维软件好用…

开发企业微信群机器人,实现定时提醒

大家好&#xff0c;我是鱼皮&#xff0c;今天分享一个用程序解决生活工作问题的真实案例。 说来惭愧&#xff0c;事情是这样的&#xff0c;在我们公司&#xff0c;每天都要轮流安排一名员工&#xff08;当然也包括我&#xff09;去楼层中间一个很牛的饮水机那里接水。但由于大…

深耕智慧物流夯实竞争优势,极智嘉(Geek+)斩获多项大奖

全球仓储机器人引领者极智嘉(Geek)&#xff0c;一直以来致力于为仓储与制造场景提供高效柔性的智能物流解决方案&#xff0c;强劲的发展实力备受认可。而近段时间&#xff0c;极智嘉更是频频传来好消息&#xff0c;不仅斩获了英国机器人与自动化仓储创新大奖&#xff0c;获评胡…

RT-DETR算法优化改进:一种新颖的动态稀疏注意力(BiLevelRoutingAttention) | CVPR2023

💡💡💡本文独家改进: 提出了一种新颖的动态稀疏注意力(BiLevelRoutingAttention),以实现更灵活的计算分配和内容感知,使其具备动态的查询感知稀疏性 1)代替RepC3进行使用; 2)BiLevelRoutingAttention直接作为注意力进行使用; 推荐指数:五星 RT-DETR魔术师专栏介…

睿登RD6012P数控可调电源简单开箱评测

睿登RD6012P恒压恒流数控直流可调电源简单开箱评测&#xff0c;测试了一下 空载功耗和效率测试、恒流输出精度和电流回读精度测试、恒压输出精度和电压回读精度测试、输出纹波&#xff0c;还有简单分析了一下用到的芯片&#xff08;背面可看到的芯片&#xff0c;没有拆开看里面…

Flutter实践二:repository模式

1.repository 几乎所有的APP&#xff0c;从简单的到最复杂的&#xff0c;在它们的架构里几乎都包括状态管理和数据源这两部分。状态管理常见的有Bloc、Cubit、Provider、ViewModel等&#xff0c;数据源则是一些直接和数据库或者网络客户端进行交互&#xff0c;取得相应的数据&…

Spring的Redis客户端

如何在Spring中操作redis 在创建springboot项目的时候引入redis的依赖. 在配置文件里指定redis主机的地址和端口,此处我们配置了ssh隧道,所以连接的就是本机的8888端口. 创建一个controller类,注入操作redis的对象. 前面使用jedis,是通过jedis对象里的各种方法来操作redis的,此…

python用pychart库,实现将经纬度信息在地图上显示

python使用pyecharts对给到的经纬度数据进行位置标注&#xff0c;下面是批量更新。给入数据&#xff0c;将地图生成。实验数据在下面附件。 from pyecharts import options as opts from pyecharts.charts import Geo import osfolder_path F:\\GPS file_names os.listdir(f…

腾讯小程序音视频 TRTC live-pusher 黑屏等各种问题

微信小程序进行音视频开发, 主要会用到live-player live-pusher,这两个媒体组件. 在开发的过程中,会遇到各种各样的问题,其中最直接的就是黑屏问题, 以下就这个问题进行整理. 文档: https://developers.weixin.qq.com/miniprogram/dev/component/live-player.html https://dev…

【Python】jupyter notebook(学习笔记)

Jupyter Notebook初见 1、Jupyter Notebook介绍 web版的ipython 编程、写文档、记笔记、展示 格式.ipynb 2、为什么使用Jupyter Notebook? 画图方面的优势&#xff1a;图像的生成不会堵塞后面代码的执行数据展示方面的优势&#xff1a;生成的数据可以保存在文件中 3、J…