Meta 实验室开源的 Segment Anything Model 3(SAM3)被誉为视觉分割领域的"终极形态",它以"一个模型,搞定一切视觉识别任务"为口号,确实在自然图像的零样本分割能力上达到了新高度。
无论是通过文本提示还是视觉提示,SAM3 都能在图像和视频中检测、分割和跟踪所有匹配对象。
然而,正如所有通用模型的宿命,当面对某些专业领域任务时,SAM3 的表现开始出现裂痕。
通用之困
在目标与背景高度融合的阴影检测、伪装目标检测任务中,SAM3 的分割边缘经常直接崩溃。
在需要极致精细边界的医学图像分析中,它要么漏掉微小病灶,要么将普通噪声误判为肿瘤组织。
这种表现差距的根源在于:训练数据无法覆盖全部应用场景。
当工作环境发生变化,领域知识出现鸿沟时,通用大模型就会显露出它的局限性。难道这意味着像 SAM3 这样的通用视觉大模型真的无法胜任专业任务吗?
来自 KOKONI 的研究团队发现了一个惊人事实:不是 SAM3 不够强,而是我们解锁它的方式不对。
研究焦点从"如何修复模型局限性"转向"如何为模型充分解锁零样本能力"。他们提出的解决方案既优雅又高效------SAM3-Adapter。
SAM3-Adapter
直接对拥有百亿参数的 SAM3 进行全量微调?这不仅计算资源消耗巨大,还需要为每个下游任务训练完整模型,更可能遭遇灾难性遗忘问题。
受 NLP 领域适配器技术的启发,研究团队提出了首个为 SAM3 量身定制的适配器框架。

SAM3-Adapter 的设计哲学是简单而强大:
其架构极简,仅由两个 MLP 层和一个激活函数构成,参数量仅为 200-500 万,是 SAM3 参数量的 1/2000。
它通过视觉提示将领域知识传递到 SAM3 的每个 Transformer 层,无需改变 SAM3 原有参数,从根本上避免灾难性遗忘。
仅需少量标注数据即可快速适应新任务,并且可以同时挂载多个 Adapter,灵活组合以满足多样化的任务需求。
核心技术实现
SAM3-Adapter 的核心思想是冻结 SAM3 的 Image Encoder,只训练 Mask Decoder, 从而实现高效的领域迁移。
这种 Adapter 范式非常适合于低资源场景下的领域迁移,能够以较小的计算代价将通用分割模型适配到特定任务。
下面是使用 SAM3-Adapter 的代码示例:
ini
import torch
import yaml
import models
# 1. 加载配置
with open('configs/cod-sam-vit-l_all.yaml', 'r') as f:
config = yaml.load(f, Loader=yaml.FullLoader)
# 2. 构建模型
model = models.make(config['model']).cuda()
# 3. 加载训练好的权重
checkpoint = torch.load('model_epoch_best.pth', map_location='cuda:0')
model.load_state_dict(checkpoint, strict=True)
model.eval()
# 4. 推理
with torch.no_grad():
# input_image: [B, 3, 1008, 1008], 归一化到 [-1, 1]
pred_logits = model.infer(input_image)
pred_mask = torch.sigmoid(pred_logits) # [B, 1, 1008, 1008]
性能突破
在实际应用中,SAM3 这样的通用骨干网络,在被适配器增强后,可以超越高度专业化的模型。
比如在医学图像息肉分割的定性结果对比中,原始 SAM 难以准确勾勒息肉边界,SAM2 甚至产生无意义输出。

虽然功能强大的 SAM3 模型能够成功定位息肉组织,但其单独分割常常导致掩膜不完整、边界模糊。
SAM3-Adapter 显著增强了这一基础能力, 引导模型生成高度准确且全面的分割结果。
所得掩膜精确描绘了整个息肉结构,性能显著优于所有基线模型。这证明了"基础模型+轻量适配器"模式在专业领域的巨大潜力。
SAM3实战
Meta 最新推出的 SAM3 模型备受关注,但许多开发者在尝试运行该模型时遇到了挑战。
以下是在 AMD Ryzen AI Max+395 处理器上使用 PyTorch 和 ROCm for Windows 运行 SAM3 的实战经验:
首先搭建环境:
bash
conda create --name rocm710-py312-ghhf python=3.12
conda activate rocm710-py312-ghhf
pip install --index-url https://rocm.nightlies.amd.com/v2/gfx1151/ "rocm[libraries,devel]"
pip install --index-url https://rocm.nightlies.amd.com/v2/gfx1151/ --pre torch torchaudio torchvision
由于此版本的 ROCm 尚不完全支持 PyTorch DTensor,需要修改 Transformers 库中的一行代码:
编辑 transformers\src\transformers\core_model_loading.py 并注释掉第 32 行。

安装修改后的 Transformers:
bash
cd transformers
pip install '.[torch]'
在使用 Hugging Face 的原始示例代码时,在 ROCm 上会遇到运行错误。

经过调试,发现有两种解决方案:使用 attn_implementation="eager" 或将模型转换为 float32 类型。
最终得到的可运行代码如下:
from
import torch
from PIL import Image
import requests
import gc, sys
import time
import numpy as np
import matplotlib
def overlay_masks(image, masks):
# 可视化掩膜覆盖函数
...
device = "cuda" if torch.cuda.is_available() else "cpu"
try:
# 解决方案1: 使用eager attention实现
model = Sam3Model.from_pretrained("facebook/sam3",
attn_implementation="eager").to(device)
processor = Sam3Processor.from_pretrained("facebook/sam3")
image = Image.open("000000077595.jpg").convert("RGB")
inputs = processor(images=image, text="ear", return_tensors="pt").to(device)
with torch.no_grad():
start_time = time.time()
outputs = model(**inputs)
end_time = time.time()
print(f"推理时间:{end_time - start_time:.4f}秒")
results = processor.post_process_instance_segmentation(
outputs,
threshold=0.5,
mask_threshold=0.5,
target_sizes=inputs.get("original_sizes").tolist()
)[0]
print(f"找到{len(results['masks'])}个对象")
overlay_masks(image, results["masks"]).show()
except Exception as e:
print(f"✗ 使用eager attention失败:{e}")
使用 attn_implementation="eager" 或 dtype=torch.float32 都能使 SAM3 在 ROCm 上正常运行。
两种方法的内存使用量相近,均低于 7 GB,而 float32 推理(14-15 秒)比 eager attention(15-16 秒)略快。

新生态正在形成
一个由 "基础模型+轻量适配器" 构成的 AI 新生态正在快速形成。
在这个生态中,每个人都能以最低的成本,获得最强大的AI能力。 SAM3-Adapter 仅是这一趋势的开端,它展示了如何通过极简的架构修改,释放通用大模型在特定领域的全部潜力。
对于普通研究者和开发者而言,这意味着不再需要从头训练庞大的模型,也不再需要担心灾难性遗忘。
只需训练一个轻量级的适配器,就能让百亿参数的视觉大模型在专业任务上达到甚至超越专用模型的水平。