SAM 图像分割快速上手指南:点一个点就能得到对象掩码
【免费下载链接】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)是 Meta AI 发布的图像分割基础模型:在图像上点一个位置或框一个区域,它会返回高质量的对象掩码。如果你是想快速上手图像分割的新手、做素材抠图的编辑,或是需要预标注数据的算法工程师,这篇文章会带你跑通安装、首次调用和版本选择。
它的工作原理
SAM 的思路很直接:图像编码器(一个 ViT 视觉 Transformer)先把整张图压缩成一张特征图,相当于提前记住"图里有什么";然后你给出的点、框等提示被提示编码器转成模型能理解的向量,掩码解码器把它和特征图结合,输出几组候选掩码,并给每组附上质量分数。整套流程对应仓库 segment_anything/modeling/ 下的 image encoder、prompt encoder、mask decoder 三个模块。
上图是自动掩码生成器的输出:整条街道被划分成语义清晰的区域,电车、树木、行人彼此分离。值得注意的是,图像编码器每张图只需跑一次,之后连续点多、框多都是即时的,这正是交互演示流畅的原因。该模型在训练中见过 1100 万张图像和 11 亿个掩码,因此可以零训练直接用于新场景。
三步跑通第一个分割结果 🔧
环境要求 Python ≥ 3.8、PyTorch ≥ 1.7,建议按 PyTorch 官方指引安装带 CUDA 支持的两个依赖。安装命令:
pip install git+https://gitcode.com/GitHub_Trending/se/segment-anything.git或者先克隆再本地安装:
git clone https://gitcode.com/GitHub_Trending/se/segment-anything cd segment-anything pip install -e .接着下载对应的模型权重文件(如 vit_h 版本的 sam_vit_h_4b8939.pth)放到本地。用点提示做一次分割,核心代码只有几行:
from segment_anything import SamPredictor, sam_model_registry import numpy as np from PIL import Image sam = sam_model_registry"vit_h" predictor = SamPredictor(sam) predictor.set_image(Image.open("your_image.jpg").convert("RGB")) masks, scores, _ = predictor.predict( point_coords=np.array([[x, y]]), point_labels=np.array([1]) )代码里point_labels取 1 表示正点、0 表示负点,实测加几个负点可以把掩码从无关区域推开。预期结果:masks是一组布尔掩码,scores是模型对每个掩码的置信度。在官方示例中,点中车轮会得到下图效果,更多参数组合可参考 notebooks/predictor_example.ipynb。
版本与配置怎么选
三个版本的区别全在骨干网络规模上,输入图像统一会被缩放到 1024×1024:
| 版本 | 骨干配置(嵌入维度/层数) | 权重规模 | 取舍 |
|---|---|---|---|
vit_h(默认) | 1280 / 32 | 约 2.4GB | 掩码质量最高,算力需求最大 |
vit_l | 1024 / 24 | 约 900MB | 质量与速度的中间档 |
vit_b | 768 / 12 | 约 375MB | 最轻量,适合 CPU 或低配显卡 |
选择建议:做效果评估或对外演示,直接用默认的vit_h;在 CPU 或显存紧张的环境跑批处理,换成vit_b即可。切换时只需改sam_model_registry里的版本名和 checkpoint 路径,其余代码不变。
它能解决哪些实际问题 🎯
图像编辑里的精确选区。用点或框勾出主体,掩码可直接用于去背景、局部合成或素材替换。官方示例中,人和狗、椅子混在一张图里时,各区域依然被干净地区分开:
数据集预标注。需要批量掩码时不必逐张手点,自动掩码生成器一次输出图中所有对象,且每个掩码附带质量分数,可以直接作为预标注使用:
from segment_anything import SamAutomaticMaskGenerator generator = SamAutomaticMaskGenerator(sam) masks = generator.generate(image)浏览器端的轻量推理。掩码解码器本身很轻,可以导出为 ONNX 格式(导出脚本见 scripts/export_onnx_model.py)。demo/ 目录里有一个 React 示例,用多线程在浏览器里完成掩码预测,适合不想把图片传到服务端的场景。
想动手的话,最短路径是:克隆仓库、装好依赖、打开示例 notebook 跑一遍。先点出第一个掩码,再按需扩展到自动掩码生成和 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),仅供参考