尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

SAM 2 图像分割实战:自动 Mask、框提示和点提示完整演示

SAM 2 图像分割实战:自动 Mask、框提示和点提示完整演示
📅 发布时间:2026/7/13 1:37:19

SAM 2 图像分割实战:自动 Mask、框提示和点提示完整演示


这篇教程根据我复现 SAM 2 图像分割流程时整理,重点演示模型安装、checkpoint 下载、自动 mask 生成、框提示分割和点提示分割。

SAM 2 非常适合做交互式分割和数据预标注。本文保留 notebook 的核心代码结构,方便你把示例图片替换成自己的业务图片进行实验。

本文会重点跑通以下流程:

  • 安装 SAM 2 官方仓库和可视化依赖
  • 下载 SAM 2 checkpoint
  • 准备本地示例图片
  • 使用自动 mask 生成器分割整张图
  • 使用框提示和点提示完成交互式分割

如果你正在系统学习目标检测、实例分割、OCR、多目标跟踪或视觉大模型,建议收藏本文;配套 notebook、示例图片和运行环境说明后续会继续整理。如果环境配置卡住,可以在评论区说明具体报错。

📚 文章目录

  • SAM 2 图像分割实战:自动 Mask、框提示和点提示完整演示
    • ⚙️ 环境准备
    • 🧠 加载 SAM 2 图像模型
    • 🎯 自动 Mask 生成
    • 📦 使用框提示分割
    • 📍 使用点提示分割
    • 📌 小结
    • 📚 同系列教程汇总

⚙️ 环境准备

先检查运行环境并安装依赖。建议在 Colab 或带 NVIDIA GPU 的环境中运行,避免训练或视频推理阶段显存不足。

!nvidia-smi
importos HOME=os.getcwd()print("HOME:",HOME)
!git clone https://github.com/facebookresearch/segment-anything-2.git%cd{HOME}/segment-anything-2!pip install-e.-q
!pip install-q supervision jupyter_bbox_widget
!mkdir-p{HOME}/checkpoints !wget-q https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_tiny.pt-P{HOME}/checkpoints !wget-q https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_small.pt-P{HOME}/checkpoints !wget-q https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_base_plus.pt-P{HOME}/checkpoints !wget-q https://dl.fbaipublicfiles.com/segment_anything_2/072824/sam2_hiera_large.pt-P{HOME}/checkpoints
!mkdir-p{HOME}/data# 请从数据集后台下载示例图片,并放到 {HOME}/data 目录。# 本教程默认使用 dog.jpeg、dog-2.jpeg、dog-3.jpeg、dog-4.jpeg 四张图片。
importcv2importtorchimportbase64importnumpyasnpimportsupervisionassvfromsam2.build_samimportbuild_sam2fromsam2.sam2_image_predictorimportSAM2ImagePredictorfromsam2.automatic_mask_generatorimportSAM2AutomaticMaskGenerator
torch.autocast(device_type="cuda",dtype=torch.bfloat16).__enter__()iftorch.cuda.get_device_properties(0).major>=8:torch.backends.cuda.matmul.allow_tf32=Truetorch.backends.cudnn.allow_tf32=True

🧠 加载 SAM 2 图像模型

下载 checkpoint 后,通过配置文件和权重加载 SAM 2 图像模型。

DEVICE=torch.device('cuda'iftorch.cuda.is_available()else'cpu')CHECKPOINT=f"{HOME}/checkpoints/sam2_hiera_large.pt"CONFIG="sam2_hiera_l.yaml"sam2_model=build_sam2(CONFIG,CHECKPOINT,device=DEVICE,apply_postprocessing=False)

🎯 自动 Mask 生成

自动 mask 生成器会对整张图进行候选区域分割,适合快速探索图像中的可分割对象。

mask_generator=SAM2AutomaticMaskGenerator(sam2_model)
IMAGE_PATH=f"{HOME}/data/dog.jpeg"image_bgr=cv2.imread(IMAGE_PATH)image_rgb=cv2.cvtColor(image_bgr,cv2.COLOR_BGR2RGB)sam2_result=mask_generator.generate(image_rgb)
mask_annotator=sv.MaskAnnotator(color_lookup=sv.ColorLookup.INDEX)detections=sv.Detections.from_sam(sam_result=sam2_result)annotated_image=mask_annotator.annotate(scene=image_bgr.copy(),detections=detections)sv.plot_images_grid(images=[image_bgr,annotated_image],grid_size=(1,2),titles=['source image','segmented image'])

masks=[mask['segmentation']formaskinsorted(sam2_result,key=lambdax:x['area'],reverse=True)]sv.plot_images_grid(images=masks[:16],grid_size=(4,4),size=(12,12))

mask_generator_2=SAM2AutomaticMaskGenerator(model=sam2_model,points_per_side=64,points_per_batch=128,pred_iou_thresh=0.7,stability_score_thresh=0.92,stability_score_offset=0.7,crop_n_layers=1,box_nms_thresh=0.7,)
sam2_result_2=mask_generator_2.generate(image_rgb)
mask_annotator=sv.MaskAnnotator(color_lookup=sv.ColorLookup.INDEX)detections=sv.Detections.from_sam(sam_result=sam2_result_2)annotated_image=mask_annotator.annotate(scene=image_bgr.copy(),detections=detections)sv.plot_images_grid(images=[image_bgr,annotated_image],grid_size=(1,2),titles=['source image','segmented image'])

📦 使用框提示分割

框提示适合把分割范围限制在指定目标区域内,减少无关区域干扰。

predictor=SAM2ImagePredictor(sam2_model)
IMAGE_PATH=f"{HOME}/data/dog-2.jpeg"image_bgr=cv2.imread(IMAGE_PATH)image_rgb=cv2.cvtColor(image_bgr,cv2.COLOR_BGR2RGB)
defencode_image(filepath):withopen(filepath,'rb')asf:image_bytes=f.read()encoded=str(base64.b64encode(image_bytes),'utf-8')return"data:image/jpg;base64,"+encoded
IS_COLAB=TrueifIS_COLAB:fromgoogle.colabimportoutput output.enable_custom_widget_manager()fromjupyter_bbox_widgetimportBBoxWidget widget=BBoxWidget()widget.image=encode_image(IMAGE_PATH)widget
widget.bboxes
default_box=[{'x':166,'y':835,'width':99,'height':175,'label':''},{'x':472,'y':885,'width':168,'height':249,'label':''},{'x':359,'y':727,'width':27,'height':155,'label':''},{'x':164,'y':1044,'width':279,'height':163,'label':''}]boxes=widget.bboxesifwidget.bboxeselsedefault_box boxes=np.array([[box['x'],box['y'],box['x']+box['width'],box['y']+box['height']]forboxinboxes])
predictor.set_image(image_rgb)masks,scores,logits=predictor.predict(box=boxes,multimask_output=False)# 单个 box 输入时,predictor 返回的 masks 形状为 (1, H, W);# 多个 box 输入时,返回形状为 (N, 1, H, W)。ifboxes.shape[0]!=1:masks=np.squeeze(masks)
box_annotator=sv.BoxAnnotator(color_lookup=sv.ColorLookup.INDEX)mask_annotator=sv.MaskAnnotator(color_lookup=sv.ColorLookup.INDEX)detections=sv.Detections(xyxy=sv.mask_to_xyxy(masks=masks),mask=masks.astype(bool))source_image=box_annotator.annotate(scene=image_bgr.copy(),detections=detections)segmented_image=mask_annotator.annotate(scene=image_bgr.copy(),detections=detections)sv.plot_images_grid(images=[source_image,segmented_image],grid_size=(1,2),titles=['source image','segmented image'])

📍 使用点提示分割

点提示适合交互式选择目标。多 mask 输出可以帮助比较不同候选分割。

IS_COLAB=TrueifIS_COLAB:fromgoogle.colabimportoutput output.enable_custom_widget_manager()fromjupyter_bbox_widgetimportBBoxWidget widget=BBoxWidget()widget.image=encode_image(IMAGE_PATH)widget
widget.bboxes
default_box=[{'x':330,'y':450,'width':0,'height':0,'label':''},{'x':191,'y':665,'width':0,'height':0,'label':''},{'x':86,'y':879,'width':0,'height':0,'label':''},{'x':425,'y':727,'width':0,'height':0,'label':''}]boxes=widget.bboxesifwidget.bboxeselsedefault_box input_point=np.array([[box['x'],box['y']]forboxinboxes])input_label=np.ones(input_point.shape[0])
masks,scores,logits=predictor.predict(point_coords=input_point,point_labels=input_label,multimask_output=True,)
sv.plot_images_grid(images=masks,titles=[f"score:{score:.2f}"forscoreinscores],grid_size=(1,3),size=(12,12))


📌 小结

SAM 2 图像分割可以分成两类用法:自动生成整图 mask,或者通过框、点等提示让模型聚焦到指定目标。实际项目中可以先用自动 mask 做探索,再用提示方式做精修。

这一类 notebook 建议按“先环境、再数据、再单样例、最后批量推理”的顺序复现。遇到报错时,优先检查 GPU、依赖版本、数据集目录和模型权重路径。

后续我会继续按源项目顺序整理同系列中的目标检测、实例分割、OCR、多目标跟踪和视觉大模型教程。

📚 同系列教程汇总

  • Google Gemini 3.5 Flash 零样本目标检测教程:从提示词到可视化结果

  • GLM-OCR 文档识别实战教程:从验证码、公式到车牌 OCR

  • RF-DETR + ByteTrack 多目标跟踪实战教程:从命令行到 Python 视频轨迹可视化

  • SAM 3 图像分割实战教程:文本、框和点提示的多种分割方式

  • SAM 3 视频分割实战教程:用文本提示分割并跟踪视频中的目标

  • SAM 2 图像分割实战:自动 Mask、框提示和点提示完整演示-本文

相关新闻

  • ChatGPT系统提示词实战手册:从入门到精通的5类核心模板,97%的开发者都漏掉了第3类!
  • 2026年7月最新武汉泰格豪雅官方售后客服服务电话及地址网点大全 - 亨得利官方服务中心
  • 终极GTA5线上小助手:5分钟掌握免费游戏增强神器

最新新闻

  • Bland AI 适合做销售外呼吗?从外呼流程、脚本控制到人工接管拆解
  • C++高性能日志系统实战:5分钟用spdlog告别凌乱printf调试
  • SCI论文创新点设计:YOLO与RT-DETR目标检测实战指南
  • 知识表示 3 大范式对比:框架 vs 产生式 vs 语义网络,结构化程度与推理效率分析
  • 如何轻松下载网络视频:免费Chrome插件VideoDownloadHelper完整指南
  • 2026 降AI率网站实测盘点:公认好用的,毕业党生存手册

日新闻

  • AI推荐结果怎么优化:适合深圳少儿素质培训机构的GEO服务商哪家好?全程零代码SAAS操作
  • RAG 实战教学完全指南
  • 企业级API网关架构深度解析:IBM Microgateway的技术实现与选型指南

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号