[作者解读] SAM2-UNet: Segment Anything 2 Makes Strong Encoder for Natural and Medical Image Segmentation

[论文地址] [代码] [arXiv 24.08]

Abstract

图像分割在视觉理解中发挥着重要作用。最近,新兴的视觉基础模型在各种任务中不断取得优异的性能。继这些成功之后,我们在本文中证明了 Segment Anything Model 2 (SAM2) 可以成为 U 型分割模型的强大编码器。我们为多功能图像分割提出了一个简单而有效的框架,称为 SAM2-UNet。具体来说,SAM2-UNet 采用 SAM2 的 Hiera 骨干作为编码器,而解码器则采用经典的 U 型设计。此外,还在编码器中插入了Adapter,以便进行参数高效微调。在各种下游任务(如伪装目标检测、显著目标检测、海洋动物分割、镜面检测和息肉分割)上进行的初步实验表明,我们的 SAM2-UNet 完全可以击败现有的最先进专业方法,而无需任何花哨设计。


TL;DR

SAM2的Hiera Backbone可以直接单独拿出来给其他任务用,效果有明显提升。(即标题中的"Makes Strong Encoder")


Framework

SAM2-UNet的网络结构如下所示:
在这里插入图片描述
整体由四部分构成:

  • Encoder:采用的是SAM2中的Hiera Backbone。由于Hiera同样具有层次化结构,因此其完全可以用于替换一些现有的经典Encoder,例如ResNet,Swin,PVT等等。
  • RFBs:用于降采样兼提取多尺度特征。该部分理论上可以使用任意其他Attention模块替换。更进一步的,也可以直接放弃降维直接将原始Encoder特征跨层连接至Decoder。
  • Adapter:用于实现参数高效微调,以降低训练的显存占用。参数高效微调的原理可以参见此处
  • Decoder:采用了标准的U-Net Decoder设计,每个Decoder Block包括两个Conv-BN-ReLU块。

Result

由于SAM2本身是在分割任务上预训练,因此finetune至下游分割任务时效果明显好于基于ImageNet预训练的方法。以伪装目标检测的性能为例,对比了SINet (CVPR 20), PFNet (CVPR 21),ZoomNet (CVPR 22),FEDER (CVPR 23):
在这里插入图片描述

该结果甚至能打一些基于SAM1的方法,例如DSAM (ACM MM 24)。


Ablation

主要讨论了不同尺寸的Hiera。哪怕对于Hiera-Tiny,其结果依然能打过一些较老的方法如SINet和PFNet。而Hiera-Tiny的参数量为28M,对比现有的一些backbone,如Res2Net-50的25.7M,消耗增加并不算多,因此完全是有可能在后续工作中进行替换的。

在这里插入图片描述


Q&A

Q1: 训练的显存占用情况?
A1: 在4090机器上,batch size 12占用显存约为16G,如果调小batch size完全能在2080ti等小显存机器上运行。

Q2: 输入分辨率为什么是352,而非SAM2默认的1024?
A2: 尝试过调整为1024,有的数据集性能会略微上升,而有的变化不大。由于网络本身的decoder设计非常简单,并没有做大感受野设计,因此直接提升分辨率容易导致全局特征出现问题。此外,使用1024分辨率也会明显地降低训练速度。

Q3: SAM1的Vanilla ViT是否也能用类似的思路?
A3: 之前做过一个类似的工作Mammo-SAM,将SAM1的decoder去掉换成U-Net风格的级联解码器,但效果有限,而且引入U-Net中经典的Skip Connection后更难训练,不像SAM2这样直接方便。不过这几天也有同期工作讨论了对应的做法,例如SAM-UNet

Q4: 与其他SAM2微调方法的对比?
A4: 另一个经典工作为SAM2-Adapter。从分割性能来讲,两者互有胜负。从结构来讲,SAM2-UNet删去了SAM2中大部分的模块,上手难度会明显更低,后续可扩展上限更高;而SAM2-Adapter对SAM2的结构基本进行了保留,更适合需要使用SAM特性的场景(如Prompting)。

Q5: 后续可以改进的方向?
A5: 例如可以把decoder做的更复杂,改善Adapter的结构和插入位置等等。


Citation

如果SAM2-UNet对你有所启发或帮助,欢迎来我们的GitHub点一个Star以及引用本篇论文。非常感谢!

@article{sam2unet,
  title={SAM2-UNet: Segment Anything 2 Makes Strong Encoder for Natural and Medical Image Segmentation},
  author={Xiong, Xinyu and Wu, Zihuang and Tan, Shuangyi and Li, Wenxue and Tang, Feilong and Chen, Ying and Li, Siying and Ma, Jie and Li, Guanbin},
  journal={arXiv preprint arXiv:2408.08870},
  year={2024}
}
### 关于 Trinity 组装报错解决方案 在处理 Trinity 组装过程中遇到的错误时,可以从以下几个方面入手分析并解决问题: #### 1. **环境变量配置** 确保安装了必要的依赖项,并正确设置了环境变量。如果未设置路径或某些工具不可用,则可能导致组装失败。例如,在 Linux 系统中可以通过以下方式设置 Miniconda 的路径[^2]: ```bash export PATH="/trainee/Apr4311/miniconda3/bin:$PATH" ``` 此命令会将 Miniconda 安装目录中的 `bin` 文件夹添加到系统的 `$PATH` 中,从而允许系统识别 Trinity 及其相关组件。 #### 2. **内存不足问题** Trinity 是一种高资源消耗的应用程序,尤其是在数据集较大时可能会因内存不足而崩溃。建议运行前确认服务器有足够的可用 RAM 和交换空间 (swap space),或者通过调整参数减少内存占用。可以尝试使用如下选项来优化内存使用: ```bash --max_memory <value> ``` 其中 `<value>` 表示分配给 Trinity 的最大内存量(单位 GB)。这有助于防止由于内存耗尽而导致的任务中断[^3]。 #### 3. **输入文件质量** 低质量的 RNA-seq 数据也可能引发各种类型的错误消息。因此,预处理阶段非常重要,包括去除接头序列、过滤掉短读片段以及修剪低质量碱基等操作。推荐利用 FastQC 或 MultiQC 工具评估原始 reads 质量,并采用 Trimmomatic 进行清理工作[^4]: ```bash java -jar trimmomatic.jar PE input_forward.fq.gz input_reverse.fq.gz output_prefix ... ``` #### 4. **版本兼容性** 有时特定版本间的不匹配也会造成执行异常。务必验证所使用的 Trinity 版本是否与操作系统及其他软件库保持一致。官方 GitHub 页面通常提供详细的发行说明和支持矩阵供查阅[^5]。 --- ### 示例脚本 下面给出一个完整的 Trinity 执行流程模板作为参考: ```bash #!/bin/bash # 设置环境变量 source activate trinity_env || conda create --name trinity_env && source activate trinity_env conda install -c bioconda trinity # 准备输入 FASTQ 文件 INPUT_FORWARD="cleaned_R1.fastq" INPUT_REVERSE="cleaned_R2.fastq" # 启动 Trinity 组件化装配过程 Trinity \ --seqType fq \ --left $INPUT_FORWARD \ --right $INPUT_REVERSE \ --CPU 8 \ --max_memory 30G \ --output trinity_output_dir ``` 上述代码展示了如何加载适当的工作区、指定 CPU 数目和上限存储容量,同时指定了配对末端测序数据的位置。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值