FastSAM 图像分割实战:自动 Mask、框提示、点提示与文本提示
FastSAM 图像分割实战自动 Mask、框提示、点提示与文本提示这篇教程根据我复现 FastSAM 图像分割流程时整理重点演示如何加载 FastSAM、对比 SAM、并用框提示、点提示和文本提示做交互式分割。FastSAM 的优势是推理快、交互灵活。本文适合把图像分割当成一个可视化工具链来理解也适合做分割效果对比。本文会重点跑通以下流程安装 FastSAM、CLIP、SAM 和可视化依赖下载模型权重并准备示例图片用自动 mask 做整图分割使用框提示、点提示和文本提示细化目标把 FastSAM 与 SAM 结果做对比并检查差异如果你正在系统学习目标检测、实例分割、OCR、多目标跟踪或视觉大模型建议收藏本文配套 notebook、示例图片和运行环境说明后续会继续整理。如果环境配置卡住可以在评论区说明具体报错。 文章目录FastSAM 图像分割实战自动 Mask、框提示、点提示与文本提示⚙️ 环境准备⬇️ 下载权重️ 准备示例图片 加载 FastSAM 模型 自动 Mask 生成 框提示分割 点提示分割 文本提示分割 与 SAM 对比 真实数据集效果 小结 同系列教程汇总⚙️ 环境准备先检查运行环境并安装依赖。建议优先使用带 NVIDIA GPU 的环境避免推理和训练阶段显存不足。!nvidia-smiimportos HOMEos.getcwd()print(HOME:,HOME)%cd{HOME}# 安装 FastSAM!git clone https://github.com/CASIA-IVA-Lab/FastSAM.git !pip-q install-r FastSAM/requirements.txt# 安装 CLIP!pip-q install githttps://github.com/openai/CLIP.git# 安装 SAM!pip-q install githttps://github.com/facebookresearch/segment-anything.git# 安装其他依赖!pip-q install supervision jupyter_bbox_widget⬇️ 下载权重权重和 checkpoint 下载后后面的自动 mask、提示分割和对比实验才跑得起来。!mkdir-p{HOME}/weights !wget-P{HOME}/weights-q https://huggingface.co/spaces/An-619/FastSAM/resolve/main/weights/FastSAM.pt !wget-P{HOME}/weights-q https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth !ls-lh{HOME}/weightsFAST_SAM_CHECKPOINT_PATHf{HOME}/weights/FastSAM.ptSAM_SAM_CHECKPOINT_PATHf{HOME}/weights/sam_vit_h_4b8939.pth️ 准备示例图片示例图片可以直接从数据集后台准备好文件名保持和代码一致即可。!mkdir-p{HOME}/data# 请从数据集后台下载示例图片并放到 {HOME}/data 目录。# 默认使用 dog.jpeg、robot.jpeg 两张示例图。%cd{HOME}/FastSAMimportosimportcv2importtorchimportbase64importsupervisionassvimportnumpyasnpfromfastsamimportFastSAM,FastSAMPromptfromsegment_anythingimportsam_model_registry,SamAutomaticMaskGenerator,SamPredictor 加载 FastSAM 模型先加载 FastSAM 模型再用 prompt 方式做交互式分割。DEVICEtorch.device(cuda:0iftorch.cuda.is_available()elsecpu)print(fDEVICE {DEVICE})fast_samFastSAM(FAST_SAM_CHECKPOINT_PATH)IMAGE_PATHf{HOME}/data/dog.jpeg 自动 Mask 生成自动生成整图 mask适合快速浏览分割候选。os.makedirs(f{HOME}/output,exist_okTrue)resultsfast_sam(sourceIMAGE_PATH,deviceDEVICE,retina_masksTrue,imgsz1024,conf0.4,iou0.9)prompt_processFastSAMPrompt(IMAGE_PATH,results,deviceDEVICE)masksprompt_process.everything_prompt()prompt_process.plot(annotationsmasks,outputf{HOME}/output)# Convert masks to boolean (True/False)defmasks_to_bool(masks):iftype(masks)np.ndarray:returnmasks.astype(bool)returnmasks.cpu().numpy().astype(bool)defannotate_image(image_path:str,masks:np.ndarray)-np.ndarray:imagecv2.imread(image_path)xyxysv.mask_to_xyxy(masksmasks)detectionssv.Detections(xyxyxyxy,maskmasks)mask_annotatorsv.MaskAnnotator(color_lookupsv.ColorLookup.INDEX)returnmask_annotator.annotate(sceneimage.copy(),detectionsdetections)masksmasks_to_bool(masks)annotated_imageannotate_image(image_pathIMAGE_PATH,masksmasks)sv.plot_image(imageannotated_image,size(8,8))resultsfast_sam(sourceIMAGE_PATH,deviceDEVICE,retina_masksTrue,imgsz1024,conf0.5,iou0.6)prompt_processFastSAMPrompt(IMAGE_PATH,results,deviceDEVICE)masksprompt_process.everything_prompt()masksmasks_to_bool(masks)annotated_imageannotate_image(image_pathIMAGE_PATH,masksmasks)sv.plot_image(imageannotated_image,size(8,8)) 框提示分割框提示适合把模型的注意力锁定到某个对象上。# helper function that loads an image before adding it to the widgetdefencode_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# 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 box[box[x],box[y],box[x]box[width],box[y]box[height]]resultsfast_sam(sourceIMAGE_PATH,deviceDEVICE,retina_masksTrue,imgsz1024,conf0.5,iou0.6)prompt_processFastSAMPrompt(IMAGE_PATH,results,deviceDEVICE)masksprompt_process.box_prompt(bboxbox)masksmasks_to_bool(masks)annotated_imageannotate_image(image_pathIMAGE_PATH,masksmasks)sv.plot_image(imageannotated_image,size(8,8)) 点提示分割点提示能进一步缩小分割范围。point[405,505]resultsfast_sam(sourceIMAGE_PATH,deviceDEVICE,retina_masksTrue,imgsz1024,conf0.5,iou0.6)prompt_processFastSAMPrompt(IMAGE_PATH,results,deviceDEVICE)masksprompt_process.point_prompt(points[point],pointlabel[1])masksmasks_to_bool(masks)annotated_imageannotate_image(image_pathIMAGE_PATH,masksmasks)sv.plot_image(imageannotated_image,size(8,8)) 文本提示分割文本提示可以直接用语言筛选目标方便做开放式分割。resultsfast_sam(sourceIMAGE_PATH,deviceDEVICE,retina_masksTrue,imgsz1024,conf0.5,iou0.6)prompt_processFastSAMPrompt(IMAGE_PATH,results,deviceDEVICE)masksprompt_process.text_prompt(textcap)masksmasks_to_bool(masks)annotated_imageannotate_image(image_pathIMAGE_PATH,masksmasks)sv.plot_image(imageannotated_image,size(8,8)) 与 SAM 对比这一部分把 FastSAM 和 SAM 放在一起比较看看输出差异。IMAGE_PATHf{HOME}/data/robot.jpegMODEL_TYPEvit_hsamsam_model_registry[MODEL_TYPE](checkpointSAM_SAM_CHECKPOINT_PATH).to(deviceDEVICE)mask_generatorSamAutomaticMaskGenerator(sam)image_bgrcv2.imread(IMAGE_PATH)image_rgbcv2.cvtColor(image_bgr,cv2.COLOR_BGR2RGB)sam_resultmask_generator.generate(image_rgb)sam_detectionssv.Detections.from_sam(sam_resultsam_result)resultsfast_sam(sourceIMAGE_PATH,deviceDEVICE,retina_masksTrue,imgsz1024,conf0.5,iou0.6)prompt_processFastSAMPrompt(IMAGE_PATH,results,deviceDEVICE)masksprompt_process.everything_prompt()masksmasks_to_bool(masks)xyxysv.mask_to_xyxy(masksmasks)fast_sam_detectionssv.Detections(xyxyxyxy,maskmasks)mask_annotatorsv.MaskAnnotator(color_lookupsv.ColorLookup.INDEX)sam_resultmask_annotator.annotate(sceneimage_bgr.copy(),detectionssam_detections)fast_sam_resultmask_annotator.annotate(sceneimage_bgr.copy(),detectionsfast_sam_detections)sv.plot_images_grid(images[sam_result,fast_sam_result],grid_size(1,2),titles[SAM,FastSAM])mask_annotatorsv.MaskAnnotator(color_lookupsv.ColorLookup.INDEX)sam_resultmask_annotator.annotate(scenenp.zeros_like(image_bgr),detectionssam_detections)fast_sam_resultmask_annotator.annotate(scenenp.zeros_like(image_bgr),detectionsfast_sam_detections)sv.plot_images_grid(images[sam_result,fast_sam_result],grid_size(1,2),titles[SAM,FastSAM])defcompute_iou(mask1,mask2):intersectionnp.logical_and(mask1,mask2)unionnp.logical_or(mask1,mask2)returnnp.sum(intersection)/np.sum(union)deffilter_masks(mask_array1,mask_array2,threshold):returnnp.array([mask1formask1inmask_array1ifmax(compute_iou(mask1,mask2)formask2inmask_array2)threshold])diff_masksfilter_masks(sam_detections.mask,fast_sam_detections.mask,0.5)diff_xyxysv.mask_to_xyxy(masksdiff_masks)diff_detectionssv.Detections(xyxydiff_xyxy,maskdiff_masks)mask_annotatorsv.MaskAnnotator(color_lookupsv.ColorLookup.INDEX)diff_resultmask_annotator.annotate(scenenp.zeros_like(image_bgr),detectionsdiff_detections)sv.plot_image(imagediff_result,size(8,8)) 真实数据集效果最后在真实数据集样本上再做一次文本提示分割检查泛化表现。%cd{HOME}# 如需在真实数据集上测试请先准备好对应数据目录和标注文件。DATASET_DIR/content/dataset# 修改为数据集后台导出的数据集目录IMAGE_PATHos.path.join(DATASET_DIR,train,images,example.jpg)IMAGE_PATHos.path.join(dataset.location,train,images,IMG_2311_jpeg_jpg.rf.09ae6820eaff21dc838b1f9b6b20342b.jpg)resultsfast_sam(sourceIMAGE_PATH,deviceDEVICE,retina_masksTrue,imgsz1024,conf0.5,iou0.6)prompt_processFastSAMPrompt(IMAGE_PATH,results,deviceDEVICE)masksprompt_process.text_prompt(textPenguin)masksmasks_to_bool(masks)annotated_imageannotate_image(image_pathIMAGE_PATH,masksmasks)sv.plot_image(imageannotated_image,size(8,8)) 小结FastSAM 的交互式分割流程很适合做样例探索。真正落地时建议先用自动 mask 找候选对象再用框、点和文本提示做二次筛选。这一类 notebook 建议按“先环境、再数据、再单样例、最后批量推理”的顺序复现。遇到报错时优先检查 GPU、依赖版本、数据集目录和模型权重路径。后续我会继续按源项目顺序整理同系列中的目标检测、实例分割、OCR、多目标跟踪和视觉大模型教程。 同系列教程汇总Google Gemini 3.5 Flash 零样本目标检测教程从提示词到可视化结果GLM-OCR 文档识别实战教程从验证码、公式到车牌 OCRRF-DETR ByteTrack 多目标跟踪实战教程从命令行到 Python 视频轨迹可视化SAM 3 图像分割实战教程文本、框和点提示的多种分割方式FastSAM 图像分割实战自动 Mask、框提示、点提示与文本提示

相关新闻

RTMDet 自定义目标检测训练实战:MMYOLO 训练、评估与可视化

RTMDet 自定义目标检测训练实战:MMYOLO 训练、评估与可视化

RTMDet 自定义目标检测训练实战:MMYOLO 训练、评估与可视化 这篇教程根据我复现 RTMDet 自定义目标检测训练流程时整理,重点演示如何安装 MMYOLO 生态、加载预训练权重、训练自定义数据集并做 mAP 评估。 RTMDet 训练和推理都离不开 MMDetection / MMYO…

2026/7/15 0:31:32阅读更多 →
YOLO-World 零样本目标检测实战:文本类别提示与视频筛选

YOLO-World 零样本目标检测实战:文本类别提示与视频筛选

YOLO-World 零样本目标检测实战:文本类别提示与视频筛选 这篇教程根据我复现 YOLO-World 零样本目标检测流程时整理,重点演示如何设置文本类别提示、跑通图片推理、再把同一套模型迁移到视频帧上做目标筛选。 YOLO-World 的特点是不用重新训练就能通过文…

2026/7/15 0:31:32阅读更多 →
你以为 AI 在思考,其实它只是在猜下一个词?真相没那么简单

你以为 AI 在思考,其实它只是在猜下一个词?真相没那么简单

“大模型不就是自动补全吗?”这句话既抓住了核心,又很容易把人带偏。它确实通过预测下一个词元来训练和生成,但“训练目标简单”不等于“最终能力简单”。就像钢琴只有有限的琴键,却能演奏完全不同的作品;理解 AI&…

2026/7/15 0:26:31阅读更多 →
农作物病虫害图像识别实战包:含多模型训练代码、真实病害数据集与Flask+Docker部署方案

农作物病虫害图像识别实战包:含多模型训练代码、真实病害数据集与Flask+Docker部署方案

本文还有配套的精品资源,点击获取 简介:直接可用的农业图像识别工具包,用Python实现,兼容TensorFlow、PyTorch、Keras、Fastai等主流框架,支持DenseNet121、ResNet50、VGG16、VGG19等模型结构。内置完整训练流程Not…

2026/7/15 1:26:36阅读更多 →
Qt 跨平台开发实战:从环境搭建到首个应用

Qt 跨平台开发实战:从环境搭建到首个应用

1. Qt开发环境搭建第一次接触Qt时,最让人头疼的就是环境配置。记得我刚开始用Qt时,光是选择安装哪个版本就纠结了半天。Qt作为一个跨平台的C框架,确实能帮我们省去很多适配不同操作系统的麻烦。1.1 选择合适的Qt版本Qt的版本选择是个技术活。…

2026/7/15 1:26:36阅读更多 →
小波变换:从数学显微镜到图像处理实战

小波变换:从数学显微镜到图像处理实战

1. 小波变换:数学显微镜的奥秘 第一次听说小波变换时,我脑海中浮现的是一台精密的显微镜——它能自由调节放大倍数,既能看清细胞整体结构,又能聚焦观察细胞器细节。这种神奇的"数学显微镜"究竟如何工作?让我…

2026/7/15 1:26:36阅读更多 →
跨环境迁移C#项目时,NuGet包依赖与SDK版本冲突的排查与修复

跨环境迁移C#项目时,NuGet包依赖与SDK版本冲突的排查与修复

1. 跨环境迁移C#项目时常见的NuGet包问题当你把C#项目从一台电脑迁移到另一台电脑时,最常遇到的就是NuGet包依赖和SDK版本冲突问题。我见过太多开发者在这个问题上栽跟头,特别是当两台电脑安装的Visual Studio版本不同,或者.NET SDK版本不一致…

2026/7/15 1:26:36阅读更多 →
3分钟搞定专业中文排版:思源宋体CN的零门槛终极指南

3分钟搞定专业中文排版:思源宋体CN的零门槛终极指南

3分钟搞定专业中文排版:思源宋体CN的零门槛终极指南 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文项目找不到既专业又免费的字体而烦恼吗?思源宋体…

2026/7/15 1:26:36阅读更多 →
STM32CUBEMX实战:利用内部Flash实现数据掉电存储

STM32CUBEMX实战:利用内部Flash实现数据掉电存储

1. STM32内部Flash基础认知1.1 Flash在嵌入式系统中的角色第一次接触STM32的内部Flash时,我误以为它只能存储程序代码。直到某次项目需要保存设备校准参数时,才发现这块"宝藏区域"的妙用。简单来说,STM32的内部Flash就像手机的存储…

2026/7/15 1:21:36阅读更多 →
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阅读更多 →
AI框架决定企业AI能走多远

AI框架决定企业AI能走多远

企业AI建设的第一性原理 企业搞AI,最关键的决定是什么?不是选哪家大模型,不是先做哪个场景,不是招多少AI人才——而是选哪个AI开发框架。 为什么?因为框架决定了企业AI能力的"天花板"。选对了框架&#xff0…

2026/7/15 0:01:30阅读更多 →
Java企业为什么需要AI框架

Java企业为什么需要AI框架

Java企业在AI时代的尴尬处境 Java是全球企业级应用开发的主流语言——全球超过一半的企业系统跑在Java上。但在AI浪潮面前,很多Java企业感到尴尬:大模型的接口是各种语言的,AI开发社区以其他语言为主流,似乎Java在AI时代"掉队…

2026/7/15 0:01:30阅读更多 →
CC3230x嵌入式开发实战:SD主机、定时器与低功耗模式深度解析

CC3230x嵌入式开发实战:SD主机、定时器与低功耗模式深度解析

1. 项目概述:为什么需要关注CC3230x的SD主机、定时器与低功耗?在物联网和嵌入式设备开发领域,我们常常面临一个核心矛盾:设备需要具备强大的连接能力、可靠的数据存储和实时控制功能,同时又必须严格控制功耗以延长电池…

2026/7/15 0:01:30阅读更多 →
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阅读更多 →