SuperAPI AI 工具集

segment-anything-model

设计与创作

查看项目

更新于 10-15 20:21

技能介绍

用途

Segment Anything Model(SAM)是 Meta AI 的零样本图像分割基础模型。资料指出,当需要在不进行任务特定训练的情况下分割图像中的任意对象、构建基于点/框提示的交互式标注工具、为其他视觉模型生成训练数据、实现对新图像域的零样本迁移、构建目标检测/分割流水线,或处理医学、卫星及特定领域图像时,可使用 SAM。

资料同时说明,若需要带类别的实时目标检测,应改用 YOLO/Detectron2;若需要带类别的语义/全景分割,应改用 Mask2Former;若需要文本提示分割,应使用 GroundingDINO + SAM;若需要视频分割任务,应使用 SAM 2。

主要能力

  • 零样本分割:无需微调即可适用于任意图像域。
  • 灵活提示:支持点、边界框或先前的掩码。
  • 自动分割:可自动生成所有对象掩码。
  • 高质量:基于 1100 万张图像的 11 亿个掩码训练。
  • 多种模型规格:ViT-B(最快)、ViT-L、ViT-H(最准确)。
  • ONNX 导出:可部署到浏览器和边缘设备。

模型规格方面,ViT-H 检查点为 vit_h,大小 2.4 GB,速度最慢、准确度最佳;ViT-L 为 vit_l,1.2 GB,速度中等、准确度良好;ViT-B 为 vit_b,375 MB,速度最快、准确度良好。

提示类型包括:前景点(点击对象,用于单对象选择)、背景点(点击对象外部,用于排除区域)、边界框(围绕对象的矩形,用于较大对象)、先前掩码(低分辨率掩码输入,用于迭代细化)。

使用方式

安装可从 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: wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth ViT-L(中等)1.2GB: wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_l_0b3195.pth ViT-B(最小、最快)375MB: wget https://dl.fbaipublicfiles.com/segment_anything/sam_vit_b_01ec64.pth

基础用法(SamPredictor):加载模型 sam_model_registry"vit_h",迁移到 cuda,创建 predictor,调用 set_image 计算一次图像嵌入,再用 predict 传入 point_coords、point_labels 与 multimask_output 获取 masks、scores、logits,并通过 np.argmax(scores) 选择最佳掩码。

HuggingFace Transformers 用法:从 "facebook/sam-vit-huge" 加载 SamModel 与 SamProcessor,将图像与 input_points 传入 processor 得到张量,在 torch.no_grad() 下前向推理,再用 processor.image_processor.post_process_masks 将掩码还原到原始尺寸。

架构上,SAM 由图像编码器(ViT)、提示编码器(点/框)与掩码解码器(Transformer)组成;图像嵌入只计算一次,提示嵌入按提示生成,解码器输出掩码与 IoU 预测。

交互式分割支持单前景点、多前景点与背景点组合、边界框提示、框与点组合提示,以及利用先前掩码 logits 进行迭代细化。

自动掩码生成使用 SamAutomaticMaskGenerator,可配置 points_per_side(网格密度)、pred_iou_thresh、stability_score_thresh、crop_n_layers、crop_n_points_downscale_factor、min_mask_region_area 等参数;生成结果可按面积、predicted_iou、stability_score 过滤。

批量推理方面,可对多张图像循环 set_image 与 predict,也可对同一图像编码一次后处理多个提示。

ONNX 部署可通过 python scripts/export_onnx_model.py 导出(含 --checkpoint、--model-type、--output、--return-single-mask 参数),再用 onnxruntime 的 InferenceSession 运行,输入包括 image_embeddings、point_coords、point_labels、mask_input、has_mask_input、orig_im_size。

适用场景

资料给出的常见工作流包括:交互式标注工具(点击事件触发前景点预测并显示最佳掩码)、对象提取(按点提取对象并生成带透明背景的 RGBA 输出)、医学图像分割(灰度转 RGB 后用 ROI 边界框分割)。

输出格式与优化

自动掩码生成输出包含 segmentation(H×W 二值掩码)、bbox、area、predicted_iou、stability_score、crop_box、point_coords。掩码可编码为 COCO RLE 格式(使用 pycocotools 的 encode/decode)。

性能优化方面:显存受限时使用 ViT-B,批量处理并清理 CUDA 缓存;速度优化可使用半精度 sam.half()、减少 points_per_side(默认 32)、使用 ONNX 部署并加 --return-single-mask。

限制与常见问题

资料列出的常见问题及对应处理:显存不足时改用 ViT-B 并缩小图像尺寸;推理慢时改用 ViT-B 并减少 points_per_side;掩码质量差时尝试不同提示或使用框加点;边缘伪影时使用 stability_score 过滤;小对象遗漏时增大 points_per_side。

关于收费、价格、平台支持范围等事实,资料暂未提供。