CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

第一个针对「Segment Anything」大模型的域适应策略来了!相关论文已被CVPR 2024 接收。
引言

大语言模型(LLMs)的成功激发了计算机视觉领域探索分割基础模型的兴趣。这些基础分割模型通常通过 Prompt Engineer 来进行 zero/few 图像分割。其中,Segment Anything Model(SAM)是最先进的图像分割基础模型。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

cvpr 2024 | 分割一切模型sam泛化能力差?域适应策略给解决了

                             图  SAM 在多个下游任务上表现不佳
但是最近的研究表明,SAM 在多种下游任务中并非具有很强的鲁棒性与泛化性,例如在医学图像、伪装物体、添加干扰的自然图像等领域表现较差。这可能是由于训练数据集与下游的测试数据集之间存在较大的域差异(Domain Shift)所致。因此,一个非常重要的问题是,如何设计域自适应方案,使 SAM 在面对现实世界和多样化的下游任务中更加鲁棒?
将预训练好的 SAM 适应到下游任务主要面临三个挑战:
首先,传统的无监督域自适应范式需要源数据集和目标数据集,由于隐私和计算成本较为不可行。
其次,对于域适应,更新所有权重通常性能更好,同时也受到了昂贵的内存成本的限制
最后,SAM 可以针对不同种类、不同颗粒度的提示 Prompt,展现出多样化的分割能力,因此当缺乏下游任务的提示信息时,无监督适应将非常具有挑战性。

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

                            图 1 SAM 在大规模数据集上进行预训练,但存在泛化性问题。我们使用弱监督的方式在各种下游任务上对 SAM 进行自适应
为了应对上述挑战,我们提出了一种具有锚点正则化低秩微调弱监督自训练架构,以提高自适应的鲁棒性和计算效率
具体而言,我们首先采用无源域的自训练策略,从而避免对源数据的依赖。自训练产生伪标签,用于监督模型的更新,但是容易受到错误伪标签的影响,我们引入冻结的 source model 作为锚定网络,以规范模型的更新。
为了进一步减少更新完整模型权重的高计算成本,我们对编码器应用低秩权重分解,并通过低秩快捷路径进行反向传播。
最后,为了进一步提高无源域自适应的效果,我们在目标域引入了弱监督(weak supervise),例如稀疏的点注释,以提供更强的域适应信息,同时这种弱监督与 SAM 中的提示编码器自然兼容。
借助弱监督作为 Prompt,我们获得了更局部、更明确的自训练伪标签。经过调整的模型在多个下游任务上表现出了更强的泛化能力。
我们总结本工作的贡献如下:
1. 我们受到 SAM 在下游任务中泛化问题的启发,提出了一种与任务无关且无需源数据的解决方案,通过自训练来适应 SAM。
2. 我们利用弱监督,包括 box、point 等标签,以提高自适应效果。这些弱监督标签与 SAM 的提示编码器完全兼容。
3. 我们对 5 种类型的下游实例分割任务进行了大量实验,证明了所提出的弱监督自适应方法的有效性。

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

论文地址:https://arxiv.org/pdf/2312.03502.pdf
项目地址:https://github.com/Zhang-Haojie/WeSAM
论文标题:Improving the Generalization of Segmentation Foundation Model under Distribution Shift via Weakly Supervised Adaptation
方法
方法介绍分为四个部分:
Segment Anything 模型
基于自训练的自适应框架
弱监督如何帮助实现有效的自训练
低秩权重更新
1.Segment Anything Model
SAM 主要由三个组件构成:图像编码器(ImageEncoder)、提示编码器(PromptEncoder)、和解码器(MaskDecoder)
图像编码器使用 MAE 进行预训练,整个 SAM 在拥有 11 亿标注的训练集 SA-1B 上进一步进行微调,训练时使用了 Focal loss 和 Dice loss 的组合。推理时,测试图片 x 首先由图像编码器进行编码,然后给定提示 Prompt,轻量级的解码器将进行三个级别的预测。
2.Source-Free 域适应自训练

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

                              图 2 所提出的具有锚定网络正则化和对比损失正则化的自训练架构
针对未提供标记的目标数据集 DT={xi} 和预训练的分割模型。我们采用了 student-teacher 架构进行自训练。如图 2 所示,我们维护三个编码器网络,即 anchor model、student model、teacher model,其中 student 和 teacher model 共享权重。
具体来说,对于每个样本 xi,应用一个随机的弱数据增强作为 anchor 和 teacher model 的输入,应用一个随机的强数据增强作为 student model 的输入,三个编码器网络编码产生三个特征图。
在解码器网络中,给定一定数量 Np 的提示 prompt,例如 box、point 或 coarse mask,将推理出一组实例分割的 masks。
基于以上知识,我们下面详细阐述用于自训练的三组优化目标。
1) Student-Teacher 自训练
我们首先使用与训练 SAM 时相同的损失函数作为自训练优化目标来更新 student/teacher model。自训练广泛应用于半监督学习,最近还被证明了对无源域自适应非常有效。具体而言,我们使用 teacher model 产生的预测结果,作为伪标签(Pseudo label),并使用 Focal loss 和 Dice loss 来监督 student 的输出。

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

2) Anchor 损失用于鲁棒正则化
仅使用自训练损失进行网络训练容易受到 teacher 网络预测的错误伪标签积累的影响,即所谓的确认偏差。观察也表明,仅使用自训练长时间迭代后性能会下降。现有的无源域自适应方法通常采用额外的约束来防止自训练的负面影响,例如对预测进行均匀分布。
我们通过 anchor 损失来进行正则化,如公式 3 所示,分别最小化了 anchor model 与 student/teacher model 之间的 Dice loss。冻结的 anchor model 作为从源域(source domain)继承的知识,不鼓励源模型和自训练更新模型之间出现过大的偏差,可以防止模型崩溃。

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

3) 对比损失正则化编码器特征空间

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

                                   图 3 两个分支下的对比损失

以上两个训练目标是在解码器的输出空间中执行的。实验部分揭示出,更新编码器网络是适应 SAM 最有效的方法,因此有必要直接对从编码器网络输出的特征应用正则化。具体如图 3 所示,我们根据 anchor 和 teacher 分支中预测 mask 从特征图中裁剪出每个实例的特征CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

我们进一步定义对比损失中的正负样本对,正样本对是由两个分支中使用相同的 prompt 对应的实例特征构建,而负样本对是由不同 prompt 对应的实例特征来构建的。最终的对比损失如下所示,其中 CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了是温度系数。

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

4) 总损失
我们将上述三个损失函数组合成最终的 Source-Free 自适应损失。

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

3. 自训练的 Prompt 生成
SAM 分割需要 Prompt 输入来指示出待分割的目标对象,但可能会存在颗粒度模糊的问题。Prompt 工程可以以完全自动化的方式实现,也可以通过人工交互实现。
1) 完全自动生成 Prompt
我们首先使用网格密集采样点作为 prompt 输入,通过 Anchor model 生成初始阶段分割的 masks,剔除 IoU 和稳定性得分低的 mask,然后进行非极大值抑制来获得分割结果。接下来从最终的 masks 中产生一组固定的 prompts,作为所有三个分支的 prompt 输入。因此,三个网络分割输出的 mask 长度相同,并且具有精确的一对一对应关系。
2) 弱监督作为 Prompt
尽管可以通过在图像上使用网格采样获得 prompts,并过滤掉质量低和重复的 mask 来进行自动分割。但这些分割质量相对较差,可能包含许多误报预测,并且颗粒度不明确。由此产生的 prompt 质量参差不齐,使得自训练效果较差。
因此,借鉴先前的弱监督域自适应工作,我们提出使用三种弱监督方式,包括边界框 box、稀疏点标注 point 和粗分割多边形 coarse mask。在 SAM 中,这些弱监督方式与 prompt 输入完美匹配,可以无缝集成弱监督以适应 SAM。
4. 低秩权重更新
基础模型庞大的编码器网络使得更新所有模型的权重变得异常困难。然而,许多现有研究表明,更新编码器网络权重是调整预训练模型的有效方法。
为了能够更加有效且低成本地更新编码器网络,我们选择了一种计算友好的低秩更新方法。对于编码器网络中的每个权重 θ,我们使用低秩近似 ω = AB,并设定一个压缩率 r。只有 A 和 B 通过反向传播进行更新以减少内存占用。在推理阶段,通过将低秩近似和原始权重组合来重构权重,即 θ = θ + AB。
实验
在实验中,我们提供了与最先进方法的详细比较和定性结果。最后,我们分析了各个部分的有效性以及网络的具体设计。
1. 数据集
在这项工作中,我们对五种不同类型的下游分割任务进行评估,其中一些与 SA-1B 存在明显的分布偏移。数据集涵盖了清晰的自然图像、添加干扰的自然图像、医学图像、伪装物体和机器人图像,总计 10 种。
数据划分:每个下游数据集被划分为互不重叠的训练集和测试集。
表 1 中列出了每种类型下游任务所评估的数据集,以及训练和测试数据集的划分。

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

2. 实验细节
Segment-Anything 模型:由于内存限制,我们采用 ViT-B 作为编码器网络。采用标准提示编码器和 mask 解码器。
Prompt 生成:训练和评估阶段的 Prompt 输入均是由从实例分割 GT mask 计算而来,模拟人类交互作为弱监督。
具体来说,我们从整个 GT mask 的最小边界框中提取 box。Point 是通过在 GT mask 内随机选择 5 个正样本点和 5 个 mask 外的负样本点创建的。Coarse mask 是通过将多边形拟合到 GT mask 来模拟的。
3. 实验结果
表 2、3、4、5 分别是在添加干扰的自然图像、清晰的自然图像、医学图像、伪装物体数据集上的测试结果,完整的实验结果可以在论文中找到。实验证明了我们的方案在几乎所有的下游分割数据集上都优于预训练的 SAM 和最先进的域适应方案。

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

无阶未来模型擂台/AI 应用平台 无阶未来模型擂台/AI 应用平台

无阶未来模型擂台/AI 应用平台,一站式模型+应用平台

无阶未来模型擂台/AI 应用平台 35 查看详情 无阶未来模型擂台/AI 应用平台

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

4. 可视化结果
部分可视化结果如图 4 所示,更多的可视化结果可以在论文中找到。

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

                                 图 4 部分实例的可视化结果
5. 消融实验和额外分析
我们在 COCO 数据集上分析了三个自训练优化目标各自的有效性,如表 7 所示。表 7 中,我们还分析了所提出方法在不使用任何弱监督信息时进行自适应的效果。

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

我们分析了训练和测试使用不同类别的 prompt 的性能差异,如表 8 所示。实验表明我们的方案在 cross-prompt 条件下依然表现良好。

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

此外,我们还分析了优化不同模块,包括解码器、LayerNorm 和不同的 finetune 方案以及他们的组合的实验结果,实验证明了 finetune 编码器的 LoRA 方案效果最佳。

CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了

总结
尽管视觉基础模型可以在分割任务上表现出色,但其在下游任务中仍会存在性能不佳的情况。我们研究了 Segment-Anything 模型在多个下游图像分割任务中的泛化能力,并提出了一种基于锚点正则化和低秩微调的自训练方法。该方法无需访问源数据集、内存成本低、与弱监督自然兼容,可以显著提升自适应效果。经过广泛的实验验证,结果表明我们提出的域适应方法可以显著改善 SAM 在各种分布迁移下的泛化能力。

以上就是CVPR 2024 | 分割一切模型SAM泛化能力差?域适应策略给解决了的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/616773.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
系统重装怎么删除数据
上一篇 2025年11月11日 04:24:38
系统重装后怎么没有信息
下一篇 2025年11月11日 04:25:01

相关推荐

  • 开源免费PHP工具 PHP开发效率提升利器

    推荐开源免费PHP开发工具以提升效率:VS Code、Sublime Text轻量高效,PhpStorm专业强大;调试用Xdebug、Kint、Ray;依赖管理选Composer;代码质量工具包括PHPStan、Psalm、PHP_CodeSniffer;数据库管理可用%ignore_a_1%MyA…

    2026年5月10日
    000
  • JavaScript 闭包:理解闭包原理与内存泄漏问题

    闭包是函数访问其外部作用域变量的能力,即使外部函数已执行完毕。如 inner 函数引用 outer 中的 count,形成闭包,使变量持久存在。闭包本身无害,但可能因延长变量生命周期导致内存泄漏,例如事件监听器引用大对象时。若未及时清理 DOM 事件或定时器,闭包会阻止垃圾回收,造成内存占用过高。解…

    2026年5月10日
    000
  • 谷歌浏览器如何截图 谷歌浏览器页面截图技巧

    谷歌浏览器如何截图 谷歌浏览器页面截图技巧谷歌浏览器如何截图 谷歌浏览器页面截图技巧谷歌浏览器如何截图 谷歌浏览器页面截图技巧谷歌浏览器如何截图 谷歌浏览器页面截图技巧

    使用谷歌浏览器的开发者工具截图步骤:1. 按ctrl+shift+i(windows/linux)或cmd+option+i(mac)打开开发者工具。2. 点击右上角三个点,选择”更多工具”,再选择”截图”。3. 选择截取整个页面。推荐的谷歌浏览器扩展…

    2026年5月10日 用户投稿
    100
  • JavaScript计算器开发:解决数值显示与初始化问题

    本教程深入探讨了使用JavaScript构建计算器时常见的数值显示异常问题,特别是由于类属性未初始化导致的`Cannot read properties of undefined`错误。我们将详细分析问题根源,并通过在构造函数中调用初始化方法来解决该问题,同时优化显示逻辑,确保计算器功能稳定且界面显…

    2026年5月10日
    000
  • NextAuth getToken 在服务端返回 null 的问题排查与解决

    问题描述 在使用 Next.js 和 NextAuth 构建应用程序时,有时需要在服务端获取用户的身份验证信息。getToken 函数是 NextAuth 提供的一个便捷方法,用于从请求中提取 JWT (JSON Web Token)。然而,在某些情况下,尤其是在使用 getServerSidePr…

    2026年5月10日
    000
  • HTML文档如何工作?如何编辑HTML格式文件?

    HTML文档如何工作?如何编辑HTML格式文件?HTML文档如何工作?如何编辑HTML格式文件?HTML文档如何工作?如何编辑HTML格式文件?HTML文档如何工作?如何编辑HTML格式文件?

    浏览器解析和渲染html的过程包括:1. 解析html构建dom树;2. 结合css构建渲染树;3. 布局计算元素位置;4. 绘制像素到屏幕。编辑html可使用记事本、vs code、sublime text等文本或代码编辑器,其中vs code因语法高亮、自动补全和插件生态成为主流选择。标准htm…

    2026年5月10日 用户投稿
    000
  • GolangWeb项目异常捕获与日志记录

    答案:通过中间件使用defer和recover捕获panic,结合zap等结构化日志库记录请求链路信息,为每个请求生成trace ID,实现异常捕获与可追踪日志,提升系统稳定性与可观测性。 在Go语言Web项目中,异常捕获与日志记录是保障系统稳定性和可维护性的关键环节。Go本身没有像其他语言那样的t…

    2026年5月10日
    000
  • Python官网用户调查的参与方式_Python官网反馈提交详细教程

    答案是通过访问Python官网新闻页面、邮件邀请链接或GitHub仓库提交反馈。具体为:访问官网查找用户调查公告,或点击邮件中的专属链接参与,在GitHub的cpython仓库提交技术建议,并注意如实填写问卷与保护隐私。 如果您希望参与Python官网的用户调查并提交反馈,可以通过官方指定的渠道完成…

    2026年5月10日
    000
  • Go语言连接外部MySQL数据库:DSN配置与常见错误解析

    本文详细阐述了go语言使用`go-sql-driver/mysql`驱动连接外部mysql数据库的正确方法。重点介绍了数据源名称(dsn)的规范格式,特别是主机地址部分的配置,以避免常见的“getaddrinfow: the specified class was not found.”等网络解析错…

    2026年5月10日
    000
  • Tensorflow 音乐预测

    在本文中,我展示了如何使用张量流来预测音乐风格。在我的示例中,我比较了电子音乐和古典音乐。 你可以在我的github上找到代码:https://github.com/victordalet/sound_to_partition i – 数据集 第一步,您需要创建一个数据集文件夹,并在里面…

    2026年5月10日
    000
  • 学习了Python的Flask后,Go语言的Web框架该选Gin还是Beego?

    学习编程时,选择合适的框架至关重要。许多开发者在掌握Python Flask后,转向Go语言Web开发时,常常在Gin和Beego之间难以抉择。本文将深入分析,助您做出明智选择。 虽然网上搜索结果多建议使用Go原生标准库http,但实际上所有框架都是对http的封装。虽然使用http开发灵活,但工作…

    2026年5月10日
    000
  • JavaScript动态下拉菜单:实现日期选项与价格计算关联

    在现代web应用中,动态生成表单元素并使其具备交互逻辑是常见的需求。特别是在需要根据用户选择调整价格或服务参数的场景下,下拉菜单()常被用来展示一系列选项。本教程将指导您如何利用javascript动态生成一个包含日期选项的下拉菜单,并为每个选项关联一个具体的数值(如剩余天数),进而实现一个基于用户…

    2026年5月10日
    000
  • Golang如何提升TCP长连接处理效率_Golang TCP长连接处理性能优化实践详解

    答案:通过非阻塞I/O、单Goroutine双工模型、sync.Pool对象复用、TCP_NODELAY优化及高效心跳管理,结合系统调优,可显著提升Golang百万级TCP长连接处理效率。 在高并发网络服务场景中,TCP长连接的处理效率直接影响系统的吞吐能力和资源消耗。Golang凭借其轻量级Gor…

    2026年5月10日
    000
  • Golang 文件IO操作与性能优化实践

    合理使用Go标准库并优化IO策略可显著提升文件处理性能。1. 使用bufio减少系统调用,适合小块读写;2. 大文件用流式读取避免OOM,小文件可一次性加载;3. 并发分片读取大文件并配合预读提升吞吐;4. 结合系统调优如O_DIRECT、关闭atime等防止IO瓶颈。 Go语言在文件IO操作上提供…

    2026年5月10日
    000
  • 如何在不暴露密钥的情况下,在客户端创建 Stripe Payment Link

    本文介绍了在纯静态网站环境下,如何利用 Stripe Payment Link 实现商品售卖,并着重讨论了在不暴露 Stripe 密钥的前提下,客户端创建 Payment Link 的可行性。分析了直接在客户端使用密钥的风险,并提出了预先生成 Payment Link 或使用后端服务动态生成 Pay…

    2026年5月10日
    000
  • 解决Go语言中GOPATH未设置错误及工作区配置指南

    本文旨在解决go语言开发中常见的“gopath not set”错误,并提供详细的go工作区配置指南。内容涵盖`gopath`环境变量的设置、go项目目录结构、`path`变量的扩展,以及一些高级配置技巧,旨在帮助开发者建立一个高效、规范的go开发环境,确保包的下载、编译和运行顺利进行。 Go语言在…

    2026年5月10日
    000
  • 掌握 JavaScript 中的高阶函数

    现代 javascript 开发严重依赖函数式编程,掌握其基本思想将极大提高你的编码能力。 高阶函数是这个范式最有力的武器之一。为了帮助您掌握它们,本文将介绍它们的定义、应用程序和独特的实现。 1. 函数式编程 函数式编程是一种编程范式,强调: 纯函数:没有副作用的函数,对于相同的输入返回相同的输出…

    2026年5月10日
    000
  • Golang使用assert库简化测试断言

    使用testify/assert库可提升Go测试代码的可读性和效率,通过go get github.com/stretchr/testify/assert安装后导入包,用assert.Equal等函数替代冗长的手动判断,支持丰富断言方法如Equal、True、Nil、Contains等,并可添加自定…

    2026年5月10日
    100
  • 如何处理在线编辑HTML时外部链接验证的处理方法

    在线编辑HTML时需验证外部链接以保障安全与可用性,可通过自动检测标记外链并添加rel属性提升安全性;2. 实时验证链接有效性,利用HEAD请求检查状态码并在编辑界面提示结果;3. 配置可信域名白名单控制高风险链接输入,适用于合规要求高的场景;4. 提供友好反馈机制,对无效或可疑链接弹出提示并支持新…

    2026年5月10日
    000
  • Python Pandas:高效合并多工作簿多工作表 Excel 数据

    本教程详细指导如何使用 Python Pandas 库高效合并来自多个 Excel 文件中指定工作表的数据。文章将解释如何遍历文件目录、正确加载 Excel 文件、识别并解析特定工作表,并将来自不同文件的同名工作表数据智能地整合到一个 Pandas DataFrame 字典中,同时提供完整的示例代码…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信