经典文献阅读之--FastSAM(快速分割一切)

news2024/12/23 10:06:52

0. 简介

MetaAI提出的能够“分割一切”的视觉基础大模型SAM提供了很好的分割效果,为探索视觉大模型提供了一个新的方向。虽然SAM的效果很好,但由于SAM的backbone使用了ViT,导致推理时显存的占用较多,推理速度偏慢,对硬件的要求较高,在项目应用上有很大的限制。

中科院自动化所近期提出了《Fast Segment Anything》,本文提出了一种具有可比性能的加速替代方法。通过将该任务重新定义为分割生成和提示,作者发现一个常规的CNN检测器结合实例分割分支也可以很好地完成这个任务。论文结果显示最快比SAM快出50倍,同时参数更少,显存占用减少,适合应用部署。

在这里插入图片描述

图1. FastSAM和SAM的比较分析。(a) 在一块NVIDIA GeForce RTX 3090上,FastSAM和SAM的速度比较。(b) 在BSDS500数据集[1, 28]上进行边缘检测的比较。©在COCO数据集[25]上,FastSAM和SAM的目标提议的Box AR@1000评估。SAM和FastSAM都使用PyTorch进行推理,除了FastSAM(TRT)使用TensorRT进行推理。

1. 主要贡献

实时的segment anything模型对于工业应用非常有价值。它可以应用于许多场景。所提出的方法不仅为大量视觉任务提供了新的实用解决方案,而且速度非常快,比当前方法快几十倍或几百倍。此外,它还为通用视觉任务的大型模型架构提供了新的视角。对于特定任务来说,特定的模型仍然可以利用优势来获得更好的效率-准确性平衡。

在模型压缩的角度上,本文方法通过引入人工先验结构,展示了显著减少计算量的可行路径。本文贡献可总结如下:

  • 引入了一种新颖的实时基于CNN的Segment Anything任务解决方案,显著降低了计算需求同时保持竞争性能。
  • 本研究首次提出了将CNN检测器应用于segment anything任务,并提供了在复杂视觉任务中轻量级CNN模型潜力的见解。
  • 通过在多个基准测试上对所提出的方法和SAM进行比较评估,揭示了该方法在segment anything领域的优势和劣势。

2. 概述

图2展示了提出的方法FastSAM的概述。该方法由两个阶段组成,即全实例分割和提示引导选择。 前一个阶段是基础阶段,而第二个阶段实质上是面向任务的后处理。与端到端的Transformer[7,8,19]不同,整体方法引入了许多与视觉分割任务相匹配的人类先验知识,例如卷积的局部连接和感受野相关的对象分配策略。这使得它更适合于视觉分割任务,并且可以在较少的参数数量下更快地收敛。

在这里插入图片描述

图2. FastSAM的框架。它包含两个阶段:全实例分割(AIS)和提示引导选择(PGS)。我们使用YOLOv8-seg [16]来分割图像中的所有对象或区域。然后我们使用各种提示来识别感兴趣的特定对象。这主要涉及到点提示、框提示和文本提示的利用。文本提示基于CLIP [31]。

3. 全实例分割模型架构

YOLOv8 [16] 的架构是基于其前身YOLOv5 [15] 的发展而来的,集成了最近算法(如YOLOX [10]、YOLOv6 [22] 和YOLOv7 [35])的关键设计方面。YOLOv8的主干网络和颈部模块用C2f模块替代了YOLOv5的C3模块。更新后的头部模块采用了解耦结构,将分类和检测头部分开,并从基于锚点的方法转变为无锚点的方法。

实例分割:YOLOv8-seg采用了YOLACT [4] 的实例分割原理。它通过主干网络和特征金字塔网络(FPN)[24]从图像中提取特征,集成了不同尺寸的特征。输出包括检测分支和分割分支。检测分支输出类别和边界框,而分割分支输出k个原型(默认为32个)以及k个掩码系数。分割和检测任务并行计算。分割分支输入高分辨率特征图,保留空间细节,并包含语义信息。该特征图经过卷积层处理,上采样,然后通过另外两个卷积层输出掩码。掩码系数与检测头部的分类分支类似,取值范围在-1到1之间。实例分割结果通过将掩码系数与原型相乘并求和得到。

YOLOv8可以用于各种目标检测任务。通过实例分割分支,YOLOv8-Seg适用于分割任何物体的任务,旨在准确检测和分割图像中的每个对象或区域,无论对象的类别如何。原型和掩模系数为快速引导提供了很多可扩展性。举个简单的例子,我们额外训练了一个简单的提示编码器和解码器结构,以各种提示和图像特征嵌入作为输入,以掩模系数作为输出。在FastSAM中,我们直接使用YOLOv8-Seg方法进行全实例分割阶段。更多的人工设计可能会带来额外的改进,但我们认为这超出了本研究的范围,将其留待未来研究。

4. 提示引导的选择

在使用YOLOv8成功对图像中的所有对象或区域进行分割之后,分割任何物体任务的第二阶段是使用各种提示来识别感兴趣的特定对象。它主要涉及使用点提示、框提示和文本提示

点提示:点提示包括将选定的点与从第一阶段获得的各种掩模进行匹配。目标是确定点所在的掩模。与SAM类似,我们在我们的方法中使用前景/背景点作为提示。在前景点位于多个掩模的情况下,可以利用背景点来过滤与当前任务无关的掩模。通过使用一组前景/背景点,我们能够在感兴趣区域内选择多个掩模。这些掩模将合并为一个单一的掩模,以完全标记感兴趣的对象。此外,我们利用形态学操作来提高掩模合并的性能。

框提示:框提示涉及在第一阶段对应的边界框和各种掩模之间执行交并比(IoU)匹配。目标是确定与选定框具有最高IoU得分的掩模,从而选择感兴趣的对象。

…详情请参照古月居

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

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

相关文章

隧道结构健康监测系统,保障隧道稳定安全运行

隧道是地下隐蔽工程,会受到潜在、无法预知的地质因素影响,早期修建的隧道经常出现隧道拱顶开裂、地表沉降、隧道渗漏水、围岩变形、附近建筑物倾斜等隧道的健康问题变得日益突出,作为城市生命线不可或缺的一部分,为了确保隧道工程…

word中标题及公式自动编号

word中公式自动编号 1. 实现目标2. 详细步骤2.1 添加自动编号功能2.2 输入标题并编号2.3 新建公式2.3.1 编辑公式2.3.4 公式编号的交叉引用2.3.5 公式位置变动以及更新正文中的编号 在word中自动编号公式一直是一个老大难问题,现在通过总结网友们提供的方法&#xf…

3D风速仪 Gill Instruments Limited_R3-50 R3-100 and R3A -100 Manual

R3测量超声波脉冲从上部换能器到相反的下部换能器所花费的时间,并将其与脉冲从下部换能器到上部换能器的时间进行比较。 同样,在其他上下换能器之间比较时间。 如图1所示,每对换能器之间沿轴的空气速度可以从每条轴上的飞行次数计算出来。 …

『PyQt5-Qt Designer篇』| 06 Qt Designer中水平布局和垂直布局的使用

06 Qt Designer中水平布局和垂直布局的使用 1 水平布局1.1 按钮布局1.2 位置移动1.3 先布局再放按钮1.4 保存文件并调用2 垂直布局2.1 按钮布局2.2 保存并调用1 水平布局 1.1 按钮布局 拖动几个按钮: 选中这几个按钮,右键-布局-水平布局: 可以看到按钮间隔等宽水平排列: 也…

【重要】【转载】NOR Flash芯片内执行(XIP)

为什么程序不能直接在nandflash上执行?出于这个疑惑带来了这篇博文,是我在网上找了很多资料后总结的,假如有误,希望马上指出来,免得我误人子弟。谢谢! 首先认识下nandflash和norflash: NOR Flas…

android 实现本地一键打包,告别繁琐的studio操作

前言 在实际开发项目中,我们的工程目录往往是多个app在一个工程下的,每次打包都需要手动的用studio点击Build->Generate Signed Bundle or APK->APK 选择app,签名等,甚至有的app签名还不一样,还需要手动的来回切…

java 多线程编程 CountDownLatch(线程计数器) 和 CyclicBarrier 的用法

CountDownLatch - 线程计数器 包名:java.util.concurrent 功能: 多线程编程中,要并发请求10个接口,等这些接口都返回结果再进行统一处理后,将结果返回。 调用countDown() 方法 ,计数减去 1。 代码示例…

深度学习(前馈神经网络)知识点总结

用于个人知识点回顾,非详细教程 1.梯度下降 前向传播 特征输入—>线性函数—>激活函数—>输出 反向传播 根据损失函数反向传播,计算梯度更新参数 2.激活函数(activate function) 什么是激活函数? 在神经网络前向传播中&#x…

【Linux系列】离线安装openjdk17的rpm包

首发博客地址 首发博客地址[1] 系列文章地址[2] 视频地址[3] 准备 RPM 包 请从官网下载:https://www.oracle.com/java/technologies/downloads/#java17[4] 如需不限速下载,请关注【程序员朱永胜】并回复 1020 获取。 安装 yum localinstall jdk-17_linux…

renren-fast-vue环境升级后,运行正常打包后,访问页面空白

网上各种环境,路径都找了一遍,也没成功。后来发现升级后打包的dist文件结构发生了变化, 1.最开始正常版本是这样 2.升级后是这样,少了日期文件夹 3.问题:打包后的index.html中引入的是config文件夹,而打…

Matlab(画图进阶)

目录 大纲 1.特殊的Plots 1.1 loglog(双对数刻度图) ​1.3 plotyy(创建具有两个y轴的图形) 1.4yyaxis(创建具有两个y轴的图) 1.5 bar 3D条形图(bar3) 1.6 pie(饼图) 3D饼图 1.7 polar 2.Stairs And Ste阶梯图 3.Boxplot 箱型图和Error Bar误差条形图 3.1 boxplot 3.2 …

国外地址如何地理编码?Python三行代码解决!

对于单个地址基于Python中的geocoder库获取经纬度非常方便,代码如下: # codingutf-8 import geocoder # 输入地址 address Akala Temple lonLat geocoder.osm(address) print(lonLat.latlng) # 输出结果 [27.8569644, 84.0893767]若地址数量较多&am…

Gradio项目所学

从项目中学习Gradio:快速搭建AI算法可视化部署演示(侧重项目搭建与案例分享) 我们通常使用的两款AI可视化交互应用: Gradio 与 StreamList 本次我们通过项目案例对Gradio从简单使用到进阶进行讲解介绍 Gradio的优势 Gradio的优势在于其代码结构的简单性与…

Java“牵手”京东商品详情数据,京东API接口申请指南

京东平台商品详情接口是开放平台提供的一种API接口,通过调用API接口,开发者可以获取京东商品的标题、价格、库存、月销量、总销量、库存、详情描述、图片等详细信息 。 获取商品详情接口API是一种用于获取电商平台上商品详情数据的接口,通过…

面试总结 - 计算机网络

计算机网络 1 OSI 七层模型 | TCP与UDP | 响应状态码 OSI 模型 应用层: 计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。 HTTP SMTP FTP DNS 表示层: 负责数据格式的转换&…

鸿蒙系列-如何更好地使用 ArkUI 的 Image 组件?

如何使用好 ArkUI 的 Image 组件? 开发者经常需要在应用中显示一些图片,例如:按钮中的logo、网络图片、本地图片等。在应用中显示图片需要使用 Image 组件实现,Image支持多种图片格式,包括png、jpg、bmp、svg和gif&am…

实现公网远程访问:Windows本地快速搭建SFTP文件服务器并配置端口映射

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#xff0…

镜头翻转大师:视频剪辑高手的魔法技巧

在数字媒体时代,视频制作已成为各种规模的组织和个人的必备技能。无论是小型家庭活动还是大型企业项目,都需要通过视频来展示成果、传播信息,或是仅仅为了分享生活的美好瞬间。然而,视频制作并非易事,其中最困难的步骤…

气传导蓝牙耳机排行榜,值得大家选择的气传导耳机推荐!

​随着科技的不断进步,气传导耳机已经成为了市场上备受瞩目的产品之一。相比传统耳机,气传导耳机的音质表现更加出色,同时还具有更好的佩戴感受。下面跟着我脚步来,推荐几款值得大家选择的气传导耳机,看看哪款更好&…

【错误记录】exe4j 打包程序无法设置 jar 包依赖的问题 ( 将源码 和 依赖库打包到同一个 jar 包中 )

文章目录 一、问题描述二、解决方案 一、问题描述 在 【错误记录】IntelliJ IDEA 导出可执行 jar 包执行报错 ( java.lang.ClassNotFoundException | 打包时没有选择依赖库 ) 博客中遇到 java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriverat j…