图像分割模型 SAM:Segment Anything 完整指南,三步装好、点一下出掩码
2026/8/30 8:28:05 网站建设 项目流程

图像分割模型 SAM:Segment Anything 完整指南,三步装好、点一下出掩码

【免费下载链接】segment-anythingThe repository provides code for running inference with the SegmentAnything Model (SAM), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.项目地址: https://gitcode.com/GitHub_Trending/se/segment-anything

还在一张一张地画套索,想把图里的对象批量抠出来吗?Segment Anything(简称 SAM)解决的正是这类图像分割痛点:你在图上点一下对象,它几秒钟内输出一张高质量掩码;你不想点,它也能自动把整张图的对象全部分出来。这篇指南带你从安装图像分割模型,到拿到第一个掩码,再到选对模型档位。

读完你可以做到:

  • 三行代码装好 SAM 并跑通点提示分割
  • 用自动掩码生成(AMG)一次处理整批图片
  • 按显存和速度在 ViT-H / ViT-L / ViT-B 之间做选型

📐 SAM 架构速览:三个组件各干什么

SAM 是 Meta AI 推出的图像分割基础模型,在 1100 万张图像、11 亿个掩码的 SA-1B 数据集上训练,输入是点或框等提示,输出是对象掩码,零样本能力在多种分割任务上表现稳定。

整条链路只有三个组件,职责分工很清晰:

  • 图像编码器:把输入图像压缩成一张图像嵌入,是三个组件里最重的部分
  • 提示编码器:把点、框等提示统一编码成模型可消费的向量
  • 掩码解码器:一次生成 3 个候选掩码,并给出每个掩码的预测 IoU 分数供你挑选

📦 三步装好 SAM,点一下出掩码

前置要求:python>=3.8pytorch>=1.7torchvision>=0.8,强烈建议装带 CUDA 支持的版本。

第 1 步:克隆仓库并安装

git clone https://gitcode.com/GitHub_Trending/se/segment-anything cd segment-anything pip install -e . pip install opencv-python pycocotools matplotlib # 可选:后处理与 notebook 需要

第 2 步:加载模型。模型通过 模型注册表 按名称实例化,三档都叫sam_model_registry["<model_type>"],记得按 README 里的 Model Checkpoints 一节下载对应权重的.pth文件。

第 3 步:设图 + 点提示,拿到掩码

from segment_anything import SamPredictor, sam_model_registry sam = sam_model_registry"vit_h" predictor = SamPredictor(sam) predictor.set_image(image) # (H, W, 3) 的 BGR 数组 masks, scores, logits = predictor.predict( point_coords=[[x, y]], # SAM 点提示坐标 point_labels=[1], # 1=前景, 0=背景 )

masks是布尔数组,scores是每个掩码的置信度,直接挑最高的那个用即可。更多 SAM 点提示用法可以跑 点提示示例 notebook。

⚙️ SAM 的三种用法

点提示:点得准,掩码才准

一句话结论:掩码质量高度依赖提示坐标的位置——点落在对象内部偏中心处效果最好,点在两个对象交界或细窄部位时结果会漂移。

  • 支持单点、多点(正样本 1 / 负样本 0 可混用)以及框提示
  • 点不准时加一个负样本点,或改用box参数把区域框死,通常就能救回来
  • 每次 predict 返回 3 个候选掩码,配合scores挑质量最高的

自动掩码生成:一次调用分完全图

一句话结论:不想逐对象点提示时,AMG 会自动为图中所有对象生成候选掩码,适合批量抠图和预标注。

from segment_anything import SamAutomaticMaskGenerator, sam_model_registry sam = sam_model_registry"vit_b" generator = SamAutomaticMaskGenerator(sam) masks = generator.generate(image) # 返回掩码列表
  • 不想写代码时可直接走命令行:python scripts/amg.py --checkpoint ... --input <图片文件夹> --output <输出目录>
  • 每个掩码自带predicted_ioustability_score两个质量分,按分数过滤即可去掉碎掩码
  • 掩码支持保存为 COCO 格式,方便后续接检测/标注流程

密集复杂场景:实际表现如何

一句话结论:对象数量多、边界清晰的密集场景是 SAM 的舒适区,图中多个语义区域能被区分开;但对象很小、被严重遮挡或颜色高度相似时,掩码会出现粘连或漏检。

🧭 三档模型怎么选:ViT-H / ViT-L / ViT-B 对比

三档的区别只在图像编码器(ViT backbone)的大小,提示编码器和掩码解码器完全相同:

模型参数量权重体积分割质量推理速度适合场景
vit_h(默认)约 6.4 亿约 2.4 GB最好最慢离线批处理、质量优先
vit_l约 3.4 亿约 1.2 GB中等中等质量与速度的折中
vit_b约 0.9 亿约 375 MB可用最快实时交互、端侧、大批量

默认怎么选:显存够用就先跑vit_h看效果基线;确定要批量上生产或部署到资源受限设备时,再换vit_b,三档代码完全一样,只改注册表名字和权重路径。

边界与适用性:这些场景别直接上 SAM

  • 像素级精度任务:医学影像、显微分析等要求亚像素一致性的场景,零样本质量不够,通常需要再微调
  • 视频逐帧分割:本仓库是纯静态图像模型,视频任务要另找 SAM 2
  • 提示坐标质量:点在对象边缘、极小背景或两个对象交界处时掩码会跑偏,用框提示或补负样本兜底
  • 超高分辨率图像:输入会被缩放到 1024×1024 再进模型,原图非常大时细部信息会丢,需要自己切片再拼回
  • 它给的是区域,不是类别:SAM 分割的是"你指的这块",不告诉你"这是什么",语义识别要另接分类模型

接下来可以做什么

  • 先试自动掩码:拿一张密集图或整个文件夹跑一遍 AMG,感受零标注预标注的效率
  • 接上浏览器演示:用scripts/export_onnx_model.py把轻量的掩码解码器导出为 ONNX,再配合 demo/README.md 里的 React 单页应用,在浏览器里多线程实时出掩码
  • 往端侧迁移:换vit_b+ ONNX 解码器组合,把交互分割跑到低显存甚至移动设备上

【免费下载链接】segment-anythingThe repository provides code for running inference with the SegmentAnything Model (SAM), links for downloading the trained model checkpoints, and example notebooks that show how to use the model.项目地址: https://gitcode.com/GitHub_Trending/se/segment-anything

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询