SAM 图像分割实战:自动 Mask、框提示、点提示与 COCO 对比
SAM 图像分割实战自动 Mask、框提示、点提示与 COCO 对比这篇教程根据我复现 SAM 图像分割流程时整理重点演示自动 mask 生成、框提示分割、点提示分割以及把 SAM 结果和真实 COCO 标注做对比。SAM 是很多分割工作流的基础模块。本文更适合当成分割交互工具的起点先理解自动分割和 prompt 分割再扩展到自己的数据。本文会重点跑通以下流程安装 SAM 与可视化依赖下载 checkpoint 并准备示例图片使用自动 mask 生成器完成整图分割使用框提示和点提示做交互式分割用 COCO 标注数据和 SAM 结果做对比如果你正在系统学习目标检测、实例分割、OCR、多目标跟踪或视觉大模型建议收藏本文配套 notebook、示例图片和运行环境说明后续会继续整理。如果环境配置卡住可以在评论区说明具体报错。 文章目录SAM 图像分割实战自动 Mask、框提示、点提示与 COCO 对比⚙️ 环境准备⬇️ 下载权重与示例图片 加载 SAM 模型 自动 Mask 生成 框提示分割 点提示分割 COCO 标注对比 小结 同系列教程汇总⚙️ 环境准备先检查运行环境并安装依赖。建议优先使用带 NVIDIA GPU 的环境避免推理和训练阶段显存不足。!nvidia-smiimportos HOMEos.getcwd()print(HOME:,HOME)!pip install-qgithttps://github.com/facebookresearch/segment-anything.git!pip install-qgithttps://github.com/facebookresearch/segment-anything.git!pip install-q jupyter_bbox_widget supervision0.23.0dataclasses-json⬇️ 下载权重与示例图片先把 SAM checkpoint 和示例图片准备好。!mkdir-p{HOME}/weights !wget-q https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth-P{HOME}/weightsimportos CHECKPOINT_PATHos.path.join(HOME,weights,sam_vit_h_4b8939.pth)print(CHECKPOINT_PATH,; exist:,os.path.isfile(CHECKPOINT_PATH))!mkdir-p{HOME}/data# 请从数据集后台下载示例图片并放到 {HOME}/data 目录。# 文件名保持为 dog.jpeg、dog-2.jpeg、dog-3.jpeg、dog-4.jpeg。 加载 SAM 模型加载 SAM 后就可以切换自动分割和提示分割两种方式。importtorch DEVICEtorch.device(cuda:0iftorch.cuda.is_available()elsecpu)MODEL_TYPEvit_hfromsegment_anythingimportsam_model_registry,SamAutomaticMaskGenerator,SamPredictor samsam_model_registry[MODEL_TYPE](checkpointCHECKPOINT_PATH).to(deviceDEVICE) 自动 Mask 生成自动生成整图 mask适合快速浏览分割候选。mask_generatorSamAutomaticMaskGenerator(sam)importos IMAGE_NAMEdog.jpegIMAGE_PATHos.path.join(HOME,data,IMAGE_NAME)importcv2importsupervisionassv image_bgrcv2.imread(IMAGE_PATH)image_rgbcv2.cvtColor(image_bgr,cv2.COLOR_BGR2RGB)sam_resultmask_generator.generate(image_rgb)print(sam_result[0].keys()) 框提示分割框提示适合把模型的注意力锁定到某个对象上。mask_annotatorsv.MaskAnnotator(color_lookupsv.ColorLookup.INDEX)detectionssv.Detections.from_sam(sam_resultsam_result)annotated_imagemask_annotator.annotate(sceneimage_bgr.copy(),detectionsdetections)sv.plot_images_grid(images[image_bgr,annotated_image],grid_size(1,2),titles[source image,segmented image])masks[mask[segmentation]formaskinsorted(sam_result,keylambdax:x[area],reverseTrue)]sv.plot_images_grid(imagesmasks,grid_size(8,int(len(masks)/8)),size(16,16))mask_predictorSamPredictor(sam)importos IMAGE_NAMEdog.jpegIMAGE_PATHos.path.join(HOME,data,IMAGE_NAME)# helper function that loads an image before adding it to the widgetimportbase64defencode_image(filepath):withopen(filepath,rb)asf:image_bytesf.read()encodedstr(base64.b64encode(image_bytes),utf-8)returndata:image/jpg;base64,encodedIS_COLABTrueifIS_COLAB:fromgoogle.colabimportoutput output.enable_custom_widget_manager()fromjupyter_bbox_widgetimportBBoxWidget widgetBBoxWidget()widget.imageencode_image(IMAGE_PATH)widgetwidget.bboxes 点提示分割点提示能进一步缩小分割范围。importnumpyasnp# default_box is going to be used if you will not draw any box on image abovedefault_box{x:68,y:247,width:555,height:678,label:}boxwidget.bboxes[0]ifwidget.bboxeselsedefault_box boxnp.array([box[x],box[y],box[x]box[width],box[y]box[height]])importcv2importnumpyasnpimportsupervisionassv image_bgrcv2.imread(IMAGE_PATH)image_rgbcv2.cvtColor(image_bgr,cv2.COLOR_BGR2RGB)mask_predictor.set_image(image_rgb)masks,scores,logitsmask_predictor.predict(boxbox,multimask_outputTrue)box_annotatorsv.BoxAnnotator(colorsv.Color.RED,color_lookupsv.ColorLookup.INDEX)mask_annotatorsv.MaskAnnotator(colorsv.Color.RED,color_lookupsv.ColorLookup.INDEX)detectionssv.Detections(xyxysv.mask_to_xyxy(masksmasks),maskmasks)detectionsdetections[detections.areanp.max(detections.area)]source_imagebox_annotator.annotate(sceneimage_bgr.copy(),detectionsdetections)segmented_imagemask_annotator.annotate(sceneimage_bgr.copy(),detectionsdetections)sv.plot_images_grid(images[source_image,segmented_image],grid_size(1,2),titles[source image,segmented image])importsupervisionasv sv.plot_images_grid(imagesmasks,grid_size(1,4),size(16,4)) COCO 标注对比最后把 SAM 的结果和 COCO 标注做对比检查分割质量。importnumpyasnpfromdataclassesimportdataclassfromtypingimportList,Tuple,Union,Optionalfromdataclasses_jsonimportdataclass_jsonfromsupervisionimportDetectionsdataclass_jsondataclassclassCOCOCategory:id:intname:strsupercategory:strdataclass_jsondataclassclassCOCOImage:id:intwidth:intheight:intfile_name:strlicense:intdate_captured:strcoco_url:Optional[str]Noneflickr_url:Optional[str]Nonedataclass_jsondataclassclassCOCOAnnotation:id:intimage_id:intcategory_id:intsegmentation:List[List[float]]area:floatbbox:Tuple[float,float,float,float]iscrowd:intdataclass_jsondataclassclassCOCOLicense:id:intname:strurl:strdataclass_jsondataclassclassCOCOJson:images:List[COCOImage]annotations:List[COCOAnnotation]categories:List[COCOCategory]licenses:List[COCOLicense]defload_coco_json(json_file:str)-COCOJson:importjsonwithopen(json_file,r)asf:json_datajson.load(f)returnCOCOJson.from_dict(json_data)classCOCOJsonUtility:staticmethoddefget_annotations_by_image_id(coco_data:COCOJson,image_id:int)-List[COCOAnnotation]:return[annotationforannotationincoco_data.annotationsifannotation.image_idimage_id]staticmethoddefget_annotations_by_image_path(coco_data:COCOJson,image_path:str)-Optional[List[COCOAnnotation]]:imageCOCOJsonUtility.get_image_by_path(coco_data,image_path)ifimage:returnCOCOJsonUtility.get_annotations_by_image_id(coco_data,image.id)else:returnNonestaticmethoddefget_image_by_path(coco_data:COCOJson,image_path:str)-Optional[COCOImage]:forimageincoco_data.images:ifimage.file_nameimage_path:returnimagereturnNonestaticmethoddefannotations2detections(annotations:List[COCOAnnotation])-Detections:class_id,xyxy[],[]forannotationinannotations:x_min,y_min,width,heightannotation.bbox class_id.append(annotation.category_id)xyxy.append([x_min,y_min,x_minwidth,y_minheight])returnDetections(xyxynp.array(xyxy,dtypeint),class_idnp.array(class_id,dtypeint))%cd{HOME}# 如需使用真实 COCO 数据请先从数据集后台下载并解压到本地。fromtypesimportSimpleNamespace DATASET_DIR/content/dataset# 修改为数据集后台导出的数据集目录datasetSimpleNamespace(locationDATASET_DIR)importos DATA_SET_SUBDIRECTORYtestANNOTATIONS_FILE_NAME_annotations.coco.jsonIMAGES_DIRECTORY_PATHos.path.join(dataset.location,DATA_SET_SUBDIRECTORY)ANNOTATIONS_FILE_PATHos.path.join(dataset.location,DATA_SET_SUBDIRECTORY,ANNOTATIONS_FILE_NAME)coco_dataload_coco_json(json_fileANNOTATIONS_FILE_PATH)CLASSES[category.nameforcategoryincoco_data.categoriesifcategory.supercategory!none]IMAGES[image.file_nameforimageincoco_data.images]CLASSES# set random seed to allow easy reproduction of the experimentimportrandom random.seed(10)EXAMPLE_IMAGE_NAMErandom.choice(IMAGES)EXAMPLE_IMAGE_PATHos.path.join(dataset.location,DATA_SET_SUBDIRECTORY,EXAMPLE_IMAGE_NAME)# load dataset annotationsannotationsCOCOJsonUtility.get_annotations_by_image_path(coco_datacoco_data,image_pathEXAMPLE_IMAGE_NAME)ground_truthCOCOJsonUtility.annotations2detections(annotationsannotations)# small hack - coco numerate classes from 1, model from 0 we drop first redundant class from coco jsonground_truth.class_idground_truth.class_id-1# load imageimage_bgrcv2.imread(EXAMPLE_IMAGE_PATH)image_rgbcv2.cvtColor(image_bgr,cv2.COLOR_BGR2RGB)# initiate annotatorbox_annotatorsv.BoxAnnotator(colorsv.Color.RED,color_lookupsv.ColorLookup.INDEX)mask_annotatorsv.MaskAnnotator(colorsv.Color.RED,color_lookupsv.ColorLookup.INDEX)# annotate ground truthannotated_frame_ground_truthbox_annotator.annotate(sceneimage_bgr.copy(),detectionsground_truth)# run SAM inferencemask_predictor.set_image(image_rgb)masks,scores,logitsmask_predictor.predict(boxground_truth.xyxy[0],multimask_outputTrue)detectionssv.Detections(xyxysv.mask_to_xyxy(masksmasks),maskmasks)detectionsdetections[detections.areanp.max(detections.area)]annotated_imagemask_annotator.annotate(sceneimage_bgr.copy(),detectionsdetections)sv.plot_images_grid(images[annotated_frame_ground_truth,annotated_image],grid_size(1,2),titles[source image,segmented image]) 小结SAM 的优势是通用性强、交互直观。实际复现时自动 mask 适合探索框和点提示更适合精修而 COCO 对比可以帮助你快速检查效果。这一类 notebook 建议按“先环境、再数据、再单样例、最后批量推理”的顺序复现。遇到报错时优先检查 GPU、依赖版本、数据集目录和模型权重路径。后续我会继续按源项目顺序整理同系列中的目标检测、实例分割、OCR、多目标跟踪和视觉大模型教程。 同系列教程汇总Google Gemini 3.5 Flash 零样本目标检测教程从提示词到可视化结果GLM-OCR 文档识别实战教程从验证码、公式到车牌 OCRRF-DETR ByteTrack 多目标跟踪实战教程从命令行到 Python 视频轨迹可视化SAM 3 图像分割实战教程文本、框和点提示的多种分割方式SAM 图像分割实战自动 Mask、框提示、点提示与 COCO 对比

相关新闻

如何在Windows上快速安全安装安卓应用:APK-Installer终极指南

如何在Windows上快速安全安装安卓应用:APK-Installer终极指南

如何在Windows上快速安全安装安卓应用:APK-Installer终极指南 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否想在Windows电脑上轻松安装安卓应用&am…

2026/7/14 21:06:05阅读更多 →
Silero VAD:企业级实时语音活动检测的高性能深度学习解决方案

Silero VAD:企业级实时语音活动检测的高性能深度学习解决方案

Silero VAD:企业级实时语音活动检测的高性能深度学习解决方案 【免费下载链接】silero-vad Silero VAD: pre-trained enterprise-grade Voice Activity Detector 项目地址: https://gitcode.com/GitHub_Trending/si/silero-vad 在当今的智能语音应用生态中&a…

2026/7/14 21:06:05阅读更多 →
SD-PPP终极指南:5分钟在Photoshop中实现AI图像生成

SD-PPP终极指南:5分钟在Photoshop中实现AI图像生成

SD-PPP终极指南:5分钟在Photoshop中实现AI图像生成 【免费下载链接】sd-ppp A Photoshop AI plugin 项目地址: https://gitcode.com/gh_mirrors/sd/sd-ppp 还在为Photoshop中复杂的AI图像生成而烦恼吗?SD-PPP Photoshop AI插件将彻底改变你的创意…

2026/7/14 21:06:05阅读更多 →
DXR光线追踪入门:从核心概念到实战,掌握DirectX Ray Tracing开发

DXR光线追踪入门:从核心概念到实战,掌握DirectX Ray Tracing开发

1. 项目概述:从光栅化到光线追踪的跨越 如果你和我一样,是从D3D11甚至更早的固定管线时代一路摸爬滚打过来的图形程序员,那么第一次接触D3D12的DirectX Ray Tracing(DXR)时,那种既兴奋又头疼的感觉一定不陌…

2026/7/14 22:01:11阅读更多 →
Pandas多维聚合实战:金融风控中的高效分析模式

Pandas多维聚合实战:金融风控中的高效分析模式

1. 项目概述:为什么“多维聚合”不是Pandas进阶技巧,而是业务分析的生存技能我在银行风控部门干了七年,从刚毕业写SQL查数的分析师,到带三个人小团队做反欺诈模型的数据架构师。这七年里,我亲手重构过四套核心报表系统…

2026/7/14 22:01:11阅读更多 →
纯C手写SVD分解实现,单文件无依赖,带详细注释适合边学边调

纯C手写SVD分解实现,单文件无依赖,带详细注释适合边学边调

本文还有配套的精品资源,点击获取 简介:这个资源包只包含一个svd.c文件,用标准C语言从零实现矩阵奇异值分解(SVD),不调用任何外部数学库或BLAS/LAPACK。所有计算基于double类型浮点数,支持任…

2026/7/14 22:01:11阅读更多 →
STM32F103实测可用的AT25160A SPI EEPROM驱动工程包(含初始化、读写、擦除完整代码)

STM32F103实测可用的AT25160A SPI EEPROM驱动工程包(含初始化、读写、擦除完整代码)

本文还有配套的精品资源,点击获取 简介:一套开箱即用的STM32F103驱动AT25160A串行EEPROM工程,已在Keil MDK5环境下实测通过。包含SPI外设底层驱动(spi.c/h),支持模式0和模式3;AT25160A专用操…

2026/7/14 22:01:10阅读更多 →
R语言绘制专业级人口金字塔图:原理、避坑与实战

R语言绘制专业级人口金字塔图:原理、避坑与实战

1. 项目概述:为什么人口金字塔不是“画个三角形”那么简单?人口金字塔——这三个字在数据可视化圈里,几乎和“柱状图”“折线图”一样基础。但你真以为它只是把男女人数左右一摆、年龄上下一排,再调个颜色就完事了?我用…

2026/7/14 22:01:10阅读更多 →
MATLAB医学图像分割工具包:支持ENO/WENO格式的水平集法边界提取实现

MATLAB医学图像分割工具包:支持ENO/WENO格式的水平集法边界提取实现

本文还有配套的精品资源,点击获取 简介:专为视网膜等医学图像设计的MATLAB水平集分割工具包,提供完整的边界提取与区域分割功能。内置多种高精度数值格式:ENO1、ENO2、ENO3及WENO,覆盖法向量演化、曲率计算、自适应…

2026/7/14 21:56:10阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/14 4:56:14阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/14 2:55:05阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/14 6:17:41阅读更多 →
【Cursor数据库安全红线】:自动执行SQL前必须校验的6项权限策略,金融级项目已强制落地

【Cursor数据库安全红线】:自动执行SQL前必须校验的6项权限策略,金融级项目已强制落地

更多请点击: https://intelliparadigm.com 第一章:Cursor数据库安全红线概览 Cursor 作为一款基于 AI 的智能编程助手,其本地数据库(SQLite 存储)承载着用户代码片段、会话历史、自定义规则及敏感上下文信息。理解其安…

2026/7/14 0:03:18阅读更多 →
【Notion AI写作避坑白皮书】:基于127份真实用户失败案例,总结6大致命误用陷阱

【Notion AI写作避坑白皮书】:基于127份真实用户失败案例,总结6大致命误用陷阱

更多请点击: https://codechina.net 第一章:Notion AI写作辅助的底层能力边界认知 Notion AI 并非通用大语言模型的直接封装,而是基于 Llama 系列与自研微调模型构建的轻量化推理服务,其输入上下文窗口严格限制在 8192 token&…

2026/7/14 0:03:18阅读更多 →
AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

AI Agent数据越界行为如何被精准溯源?——基于GDPR/CCPA双合规的5层审计框架实战指南

更多请点击: https://kaifayun.com 第一章:AI Agent数据越界行为的合规性挑战与溯源必要性 AI Agent在自主执行任务过程中,可能因提示注入、上下文污染或权限配置缺陷,无意或有意访问、缓存、传输受保护数据(如PII、G…

2026/7/14 0:03:18阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/14 15:07:30阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/14 4:45:36阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/14 2:42:17阅读更多 →