SAM图像分割模型Skill:零样本分割任意图像对象,一次点选即可出掩码
- 开箱即用的零样本分割能力:无需针对新领域重新训练,只要给出点、框或已有掩码作为提示,就能分割图像中的任意目标。
- 两种主流用法:既可以做交互式分割(点选/框选单个对象),也可以用自动掩码生成器一次性把画面里所有对象“抠”出来。
- 三种模型规格可选:ViT-B(375MB,最快)、ViT-L(1.2GB,中等)、ViT-H(2.4GB,最准),按显存与精度需求自由切换。
- 可部署到边缘与浏览器:支持 ONNX 导出,方便把分割能力落到实际产品或离线环境。
- 适合谁用:数据标注团队、视觉算法工程师、电商设计素材处理、医学影像与遥感等专业领域的样本生产者。
该技能叫什么?如何一键安装 AI 技能提升开发效率?
这个技能的中文名为 SAM图像分割模型Skill,英文名为 segment-anything-model,技能 ID 为 12395,作者为 Orchestra Research,采用 MIT 许可证,当前版本 1.0.0,标签涵盖多模态、图像分割、计算机视觉、SAM 与零样本。
它要解决的问题非常具体:传统图像分割方案(例如带类别的目标检测/语义分割模型)必须先用标注好的数据训练,换一个场景、换一类目标就得重新标注、重新训练,成本极高。而 SAM 是一个“分割任意对象”的基础模型,它通过点、框、掩码这类提示来指定“你想分割哪块区域”,因此能在完全没有见过的新图像领域里直接工作,这就是它所说的“零样本转移”。
一键安装的思路与步骤:
- 确认安装前提:准备一台有 Python 环境的机器;如希望 GPU 加速,需要有可用的 CUDA 显卡(ViT-H 对显存要求最高,显存紧张可先用 ViT-B)。技能详情中声明的依赖项包括
segment-anything、transformers>=4.30.0、torch>=1.7.0。具体安装入口与命令请以所使用的 AI 技能平台官方说明为准。 - 在技能平台完成安装:在技能市场或工作区中检索技能 ID 12395 或英文名 segment-anything-model,点击安装/启用,按平台提示完成授权与依赖安装(以官方说明为准)。
- 安装底层依赖:技能详情中给出的实际安装方式为从 GitHub 安装官方库,并可选安装辅助依赖:
pip install git+https://github.com/facebookresearch/segment-anything.git
pip install opencv-python pycocotools matplotlib
# 或使用 HuggingFace transformers
pip install transformers
- 下载模型检查点:ViT-H 为 2.4GB、ViT-L 为 1.2GB、ViT-B 为 375MB,可从详情提供的官方地址下载
sam_vit_h_4b8939.pth、sam_vit_l_0b3195.pth、sam_vit_b_01ec64.pth。 - 验证是否生效:加载模型并创建预测器,对一张测试图执行一次点提示预测;如果返回
masks、scores、logits三个结果,且掩码形状与图像一致,说明安装成功。常见验证代码如下:
from segment_anything import sam_model_registry, SamPredictor
sam = sam_model_registry["vit_b"](checkpoint="sam_vit_b_01ec64.pth")
predictor = SamPredictor(sam)
predictor.set_image(image) # image 为 RGB 图像
masks, scores, logits = predictor.predict(
point_coords=np.array([[500, 375]]),
point_labels=np.array([1]),
multimask_output=True,
)
该技能的主要功能和特点
- 零样本分割:不用微调即可在任何图像领域工作,包括医学、卫星、工业等少见领域。
- 灵活的提示体系:支持前景点、背景点、边界框、先前的低分辨率掩码,甚至可以把框与点组合使用以获得更精确的结果。
- 自动分割全图:通过
SamAutomaticMaskGenerator自动生成图像中所有对象的掩码,适合批量生成训练数据。 - 多规格模型:ViT-H(最准)、ViT-L(均衡)、ViT-B(最快)三档,可在精度和速度之间按场景取舍。
- 质量可评估:每个掩码都带有
predicted_iou(质量分数)和stability_score(稳健性分数),便于按阈值筛选高置信结果。 - 结构化输出:自动分割结果为结构化字典,含二值掩码、
bbox、area、裁剪区域与输入点坐标,可直接接入下游流程;也支持转为 COCO RLE 格式。 - ONNX 导出与部署:可将模型导出为 ONNX,在浏览器和边缘设备上推理,并提供
--return-single-mask等加速选项。 - 工程友好:图像编码只需计算一次(
set_image),随后多个提示可复用同一图像嵌入,批量处理效率高。
和普通工具比强在哪? 普通分割工具通常“一类目标一个模型”,且强依赖标注数据;SAM 把“分割”从一个训练问题变成了一个提示问题——你只要告诉它大概位置,它负责把边界勾出来,而且边界质量在 1100 万张图像、11 亿个掩码的训练规模下表现稳定。
如何使用该技能?
以下为基于技能详情整理的分步骤使用指南。
步骤 1:选择模型与加载检查点
按显存与精度需求选择规格:显存有限或追求速度选 ViT-B,追求最佳掩码质量选 ViT-H。使用官方库加载时通过 sam_model_registry["vit_h"] 之类的键名指定型号,并通过 sam.to(device="cuda") 放到 GPU 上。
步骤 2:计算图像嵌入
用 predictor.set_image(image) 设置图像,注意图像需转为 RGB(OpenCV 读入后需 cv2.cvtColor(image, cv2.COLOR_BGR2RGB))。同一次调用后,可以反复用不同提示预测,不必重复编码。
步骤 3:用点提示做交互式分割
输入点为 (x, y) 坐标数组,标签 1 表示前景、0 表示背景。multimask_output=True 会返回 3 个候选掩码,通常取 scores 最大的那个:
input_points = np.array([[500, 375], [600, 400], [450, 300]])
input_labels = np.array([1, 1, 0]) # 两个前景点 + 一个背景点
masks, scores, logits = predictor.predict(
point_coords=input_points, point_labels=input_labels, multimask_output=False
)
步骤 4:用框提示或组合提示提升精度
框以 [x1, y1, x2, y2] 传入,适合较大目标;也可以同时传框和点,实现“大范围定位 + 局部修正”。若首轮结果不够贴合,可把上一轮的 logits 作为 mask_input 再补点迭代细化。
步骤 5:批量或自动分割
需要一次性拿到全图所有对象时,使用自动掩码生成器并按需调参:points_per_side(网格密度,默认 32,越大掩码越多)、pred_iou_thresh、stability_score_thresh、crop_n_layers(多尺度裁剪)、min_mask_region_area(过滤微小掩码)。结果可按 area 排序,或按 predicted_iou > 0.9、stability_score > 0.95 过滤。
步骤 6:落地输出
需要透明背景抠图时,可用最佳掩码作为 alpha 通道生成 RGBA 图像;需要接入标注系统时,可转成 COCO RLE;需要端侧部署时,用 scripts/export_onnx_model.py 导出 ONNX 并配合 onnxruntime 推理。
同类型竞品对比分析
| 方案名称 | 定位 | 核心功能 | 安装/使用门槛 | 适用场景 | 优势与不足 |
|---|---|---|---|---|---|
| SAM(本技能) | 通用提示式图像分割基础模型 | 点/框/掩码提示分割、自动全图掩码生成、ONNX 导出 | 中:需安装 Python 依赖并下载 375MB–2.4GB 检查点 | 交互式标注、抠图、训练数据生产、新领域零样本分割 | 优势是零样本、提示灵活、掩码边界质量高;不足是不输出类别标签,也需自行处理后续分类 |
| YOLO / Detectron2 | 带类别的实时目标检测与实例分割 | 检测框 + 类别 + 实例掩码,速度快 | 中:需要训练数据与训练流程 | 需要“是什么 + 在哪里”的实时业务 | 优势是快、带类别、可部署性好;不足是换领域要重新标注训练,泛化依赖数据 |
| Mask2Former | 带类别的语义/全景分割 | 语义、实例、全景分割统一框架 | 较高:需按数据集训练与调参 | 街景、室内等有明确类别体系的场景 | 优势是类别语义完整、全景效果好;不足是零样本迁移能力弱,依赖标注 |
| GroundingDINO + SAM | 文本提示 + 分割的组合方案 | 用自然语言描述目标,再由 SAM 出掩码 | 较高:需串联两个模型 | 用文字指令驱动的对象提取 | 优势是支持文本交互;不足是链路更长、推理成本更高、依赖多个模型 |
| SAM 2 | 面向视频的分割模型 | 视频中的目标跟踪与分割 | 中高:部署与环境要求更高 | 视频编辑、视频标注 | 优势是时序一致性好;不足是静态图像任务上属于“能力外溢”,未必更轻便 |
选择建议:只要“分出来”,不强求类别,优先用 SAM;要类别且要实时,用 YOLO/Detectron2;需要文本指令驱动,用 GroundingDINO + SAM;任务从图像扩展到视频,考虑 SAM 2。
该技能的典型应用场景与实际体验情况
场景一:AI 数据标注团队搭建交互式标注工具。
痛点是标注员画多边形极其耗时,尤其是毛发、树叶、医学组织这类边界复杂的对象。使用方式是做一个简单的点击界面,左键点击目标即触发 predict,把得分最高的掩码叠加显示,标注员不满意就补一个背景点或改画一个框。实际体验:上手极快,通常几十行代码即可跑通点击出掩码;边界贴合度明显优于手工多边形,标注效率提升显著。注意事项是要给标注员提供“撤销/重新提示”的交互,因为单点提示偶尔会选中相邻区域。
场景二:电商与设计素材抠图。
痛点是商品图背景复杂、批量抠图工具对边缘细节处理粗糙。使用方式是用 box 提示框选商品,再取最佳掩码作为 alpha 通道生成 RGBA 图片。实际体验:对主体清晰、对比明显的商品图效果很好;头发丝、半透明玻璃、反光金属等材质仍可能出现边缘伪影,需要结合 stability_score 过滤或改用框+点组合提示再迭代一次。
场景三:医学影像、遥感等专业领域做零样本探索。 痛点是这些领域缺少公开标注数据,训练专用模型成本高。使用方式是把灰度影像转成 RGB 三通道后输入,用 ROI 边界框或少量点提示分割感兴趣区域。实际体验:作为“快速验证”和“冷启动标注”的工具非常高效,能在没有训练数据时就产出一批可用掩码;但对低对比度、边界模糊的病灶区域,建议用多点提示与迭代细化提升稳定性。
场景四:为其他视觉模型生产训练数据。
痛点是用人工标注喂饱检测/分割模型周期长。使用方式是用 SamAutomaticMaskGenerator 批量跑图,按 predicted_iou 与 stability_score 过滤,再用 min_mask_region_area 去掉碎块。实际体验:一次调参后可批量产出结构化掩码(含 bbox 与面积),配合 COCO RLE 导出可直接进入训练流水线。注意 points_per_side 越高掩码越多也越慢,小目标容易遗漏时可上调该值。
该技能能为用户带来的价值
- 把“训练”换成“提示”,大幅降低门槛:过去做分割必须先有数据集和训练流程,现在只要一个点或一个框,团队里的非算法同学也能完成高质量分割。
- 显著缩短冷启动周期:在新领域(医学、遥感、工业质检)没有标注数据时,可以先用 SAM 产出第一版掩码,再人工修正,把标注从“从零画”变成“改一改”。
- 标注成本可量化下降:交互式标注把逐点多边形的操作简化为几次点击,配合自动掩码生成做初筛,人工只需审核与少量修正,单位图像的标注工时明显压缩。
- 多档模型控制成本:ViT-B 仅 375MB,适合快速验证与显存受限环境;需要更高精度时再切到 ViT-H,按需付费式地使用算力。
- 可复用的工程资产:同一套提示接口既能做交互工具,也能做批量数据生产,还能导出 ONNX 部署到边缘或浏览器,避免重复造轮子。
- 长期价值在于“底座”位置:作为基础分割模型,它可以与检测模型、文本提示模型组合,成为视觉流水线中的通用分割环节。
常见问题 FAQ
Q1:这个技能怎么安装?需要准备什么?
在 AI 技能平台中检索技能 ID 12395 或英文名 segment-anything-model 完成安装(具体入口与命令以官方说明为准),并准备 Python 环境;GPU 加速需可用的 CUDA 显卡。底层依赖按详情安装 segment-anything 与 torch>=1.7.0、transformers>=4.30.0,再下载对应检查点即可。安装完成后用一张测试图跑一次点提示预测,能返回掩码即视为生效。
Q2:收费吗?许可证是什么? 技能本身标注为 MIT 许可证,属于宽松开源许可。至于平台是否收取调用费用、模型权重下载是否产生流量成本,请以官方说明为准。
Q3:显存不够或推理太慢怎么办?
优先换用小模型 ViT-B(375MB);其次减小输入图像尺寸、在批量之间调用 torch.cuda.empty_cache();自动分割场景可把 points_per_side 从默认 32 降到 16;还可以尝试半精度(sam.half())或导出 ONNX 并用 --return-single-mask 加速推理。
Q4:零样本效果够用吗?什么时候需要换方案? 分割边界质量通常很好,尤其配合框提示时。但 SAM 不输出类别标签,如果你的业务需要“直接知道这是什么”,应在它前面接检测模型,或在后面接分类模型;如果需要实时带类别的检测,YOLO/Detectron2 更合适;如果需要文本指令分割,考虑 GroundingDINO + SAM;视频任务则应看 SAM 2。
Q5:掩码质量不理想,怎么调?
先换提示形式:单点不行就改框,框不够就框+点组合,或把上一轮 logits 作为 mask_input 补充背景点迭代细化。再用 predicted_iou、stability_score 阈值过滤低质量结果,出现边缘伪影时优先提高 stability_score_thresh;小目标遗漏则上调 points_per_side 或开启多尺度裁剪。