PaddleSeg 中的 Segment Anything(SAM):PaddlePaddle 框架下的文本/点/框提示分割与全图自动掩码生成实战 人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载Segment Anything ModelSAM是 Meta AI 提出的通用分割模型可依据点、框、掩码等提示生成高质量目标掩码并在零样本场景下表现出色。本指南以 PaddleSeg 仓库的 contrib/SegmentAnything 模块 为核心完整讲解该模块在 PaddlePaddle 框架下的复现方案、四种模型规格vit_b / vit_l / vit_h / vit_t与 CLIP 文本提示的组合用法并给出可复制的命令行实战流程网页端交互分割、点/框提示分割、全图自动掩码生成。读完本文你将掌握 SAM 在 PaddleSeg 中的三种调用方式并理解其底层架构与自动掩码生成参数的调优逻辑。Segment Anything 是什么PaddleSeg 中的 SAM 实现概览Segment Anything 是围绕图像分割提出的「新任务 新模型 新数据集」方案官方在 1100 万张授权且尊重隐私的图片上构建了超过 10 亿个掩码的迄今最大分割数据集SAM 模型本身可从不同类型的提示点、框、掩码、文本中产出高质量目标掩码在多种任务上展现出令人印象深刻的零样本性能甚至常与先前全监督结果相当或更优。PaddleSeg 的 contrib/SegmentAnything 模块README.md用 PaddlePaddle 完整实现了这套能力并做了一项关键扩展官方 SAM 的文本提示模型并未发布因此该模块将SAM与CLIP组合先用 SAM 对图像做候选目标分割再计算输出掩码与文本提示之间的相似度从而支持用文本提示text prompt分割任意目标同时实现了全图自动掩码生成Automatic Mask Generation可一键生成图像中所有目标的掩码。模块提供的模型以 PaddlePaddle 格式的预训练参数交付代码结构参考了原版 SAM 官方实现各脚本文件头均注明This implementation refers to: https://github.com/facebookresearch/segment-anything如 build_sam.py、automatic_mask_generator.py。模型规格与预训练权重从 vit_h 到 MobileSAMvit_t该模块基于sam_model_registry统一管理模型构建与权重加载注册表定义在 build_sam.pysam_model_registry { default: build_sam, # 即 vit_h vit_h: build_sam, # ViT-Huge 骨干 vit_l: build_sam_vit_l, # ViT-Large 骨干 vit_b: build_sam_vit_b, # ViT-Base 骨干 vit_t: build_sam_vit_t, # MobileSAM 的 TinyViT 骨干 }各规格的骨干网络配置build_sam.py模型类型骨干embedding 维度层数注意力头数全局注意力层vit_hImageEncoderViT12803216[7, 15, 23, 31]vit_lImageEncoderViT10242416[5, 11, 17, 23]vit_bImageEncoderViT7681212[2, 5, 8, 11]vit_tTinyViTMobileSAM64/128/160/320四阶段[2, 2, 6, 2][2, 4, 5, 10]—所有规格统一使用 1024×1024 的输入图像尺寸、16 的 patch 大小、256 维提示嵌入并通过pixel_mean[123.675, 116.28, 103.53]与pixel_std[58.395, 57.12, 57.375]做像素归一化。权重由各脚本内置的model_link字典按--model-type自动下载加载无需手动准备vit_h/vit_l/vit_bPaddlePaddle 格式的 SAM 预训练参数vit_t对应 MobileSAM 的 PaddlePaddle 格式参数clip_b_32用于文本与图像特征提取的 CLIP ViT-B/32 参数见 text_to_sam_clip.py。选型建议来自 README 的官方说明更大模型更准但更慢请依据设备算力选择vit_h需要约 16G 显存在 V100 上推理一张图约耗时 10 秒。环境准备与示例资源下载按以下步骤准备运行环境继承自 README.md依据 PaddleSeg 官方安装文档 docs/install.md 安装 PaddlePaddle 及相关依赖克隆 PaddleSeg 仓库并安装依赖git clone https://gitcode.com/gh_mirrors/pa/PaddleSeg.git cd PaddleSeg pip install -r requirements.txt pip install ftfy regex cd contrib/SegmentAnything/ftfy与regex是 CLIP 文本 tokenizer 运行所需的额外依赖。下载示例图片与 BPE 词表文件词表用于 CLIP 文本编码wget https://paddleseg.bj.bcebos.com/dygraph/demo/cityscapes_demo.png wget https://bj.bcebos.com/paddleseg/dygraph/bpe_vocab_16e6/bpe_simple_vocab_16e6.txt.gz将示例图片放入contrib/SegmentAnything/examples词表放入contrib/SegmentAnything/目录得到如下结构PaddleSeg/contrib ├── SegmentAnything │ ├── examples │ │ └── cityscapes_demo.png │ ├── segment_anything │ ├── scripts │ └── bpe_simple_vocab_16e6.txt.gz仓库自带的示例图片还包括 examples/dog.jpg 与 examples/zixingche.jpeg可作为本地测试输入。方法一一行命令启动 Web 交互SAM CLIP 文本提示分割运行 scripts/text_to_sam_clip.py 可在本地启动一个 Gradio 服务在网页上体验「整图分割」与「基于文本提示的分割」两种能力python scripts/text_to_sam_clip.py --model-type [vit_l/vit_b/vit_h/vit_t] # 默认 vit_h--model-type取值vit_b/vit_l/vit_h/vit_t分别代表 vit_base、vit_large、vit_huge 与 MobileSAMvit_t文本与图像特征提取使用CLIP ViT-B模型服务启动后打开http://0.0.0.0:8078上传测试图像、输入文本提示如a photo of car并提交即可看到「文本分割结果」与「全图掩码」两个输出面板gradio_display。该脚本同时内置了三组演示样例cityscapes 街景图中的 car、dog.jpg 中的 dog、zixingche.jpeg 中的 kid启动后可直接点选体验。方法二点提示与框提示的目标分割无需网页直接用命令行完成点/框提示分割结果保存到output/目录文件名与输入一致scripts/promt_predict.py框提示box prompt——--box_prompt按xyxy格式传四个整数python scripts/promt_predict.py --input_path xxx.png --box_prompt 1050 370 1500 700 --model-type [vit_l/vit_b/vit_h] # 默认 vit_h点提示point prompt——--point_prompt传点的x y坐标python scripts/promt_predict.py --input_path xxx.png --point_prompt 1200 450 --model-type [vit_l/vit_b/vit_h] # 默认 vit_h该脚本的关键参数源码见 get_args参数类型必填说明--input_pathstr是输入图像路径--model-typestr是[vit_h, vit_l, vit_b, vit_t]脚本内默认vit_l--point_promptint可多个否点提示坐标如1200 450--box_promptint可多个否框提示xyxy格式如1050 370 1500 700--output_pathstr否结果保存目录默认./output/执行时脚本先通过SamPredictor.set_image缓存图像 embedding再调用predictor.predict(point_coords, point_labels, box, multimask_outputTrue)输出掩码并将掩码以半透明蒙版叠加绘制在图上main。若只传点提示脚本默认将该点视为前景目标input_label 1。方法三全图自动掩码生成Automatic Mask Generation无需任何提示即可分割图中全部目标一键生成伪彩色掩码图并保存python scripts/amg_paddle.py --model-type [vit_l/vit_b/vit_h/vit_t] # 默认 vit_h脚本基于SamAutomaticMaskGenerator在整幅图像上采样点网格、逐个预测并过滤低质量与重复掩码。除--model-type脚本内默认vit_l外还提供一整套可调参数amg_paddle.py这些参数最终透传给SamAutomaticMaskGenerator参数说明--convert-to-rle以 COCO RLE 格式保存掩码为单个 json需 pycocotools否则输出 PNG--points-per-side图像每边采样点数总点数为该值的平方--points-per-batch模型一次批处理的点数越大越快但越耗显存--pred-iou-thresh模型预测掩码质量IoU低于该阈值的掩码被剔除--stability-score-thresh稳定性分数低于该阈值的掩码被剔除--stability-score-offset计算稳定性分数时对二值化阈值的偏移量--box-nms-threshNMS 去重时使用的框 IoU 阈值--crop-n-layers大于 0 时在图像局部裁剪上再次生成掩码值为裁剪层级数每层含 2^i 个裁剪块--crop-nms-thresh跨裁剪块去重的框 IoU 阈值--crop-overlap-ratio裁剪块的重叠比例--crop-n-points-downscale-factor第 n 层裁剪采样点数按该因子的 n 次方缩减--min-mask-region-area面积小于该像素值的离散掩码区域/空洞在后处理中被移除需 opencv源码原理剖析SAM 的三段式架构核心模型类Sammodeling/sam.py由三个子模块组成ImageEncoderViT / TinyViT 图像编码器modeling/image_encoder.py、modeling/tiny_vit_sam.py将图像编码为 embeddingViT 系列采用窗口注意力 全局注意力global_attn_indexes策略输出 256 通道图像特征PromptEncoder 提示编码器modeling/prompt_encoder.py编码稀疏提示点、框与稠密提示掩码MaskDecoder 掩码解码器modeling/mask_decoder.py内含 TwoWayTransformerdepth2、embedding_dim256、mlp_dim2048、num_heads8基于图像 embedding 与提示 embedding 预测low_res_logits256×256与 IoU 预测分数再由postprocess_masks上采样回原图尺寸。推理前向流程Sam.forwardpreprocess归一化像素并 pad 到 1024×1024 → 图像编码器提取 embedding → 提示编码器得到 sparse/dense 嵌入 → 掩码解码器输出掩码 → 后处理还原到原始分辨率。SamPredictor 的「先缓存、再复用」策略SamPredictor 先通过set_image一次性计算并缓存整张图像的 embeddingself.features此后对同一图像多次给出点/框提示时无需重复前向图像编码器可高效复用适合交互式分割场景。自动掩码生成器的默认调优基线SamAutomaticMaskGenerator的默认参数automatic_mask_generator.py是为 ViT-H 骨干调优的可作为调参起点points_per_side32即全图 1024 个采样点、points_per_batch64、pred_iou_thresh0.88、stability_score_thresh0.95、stability_score_offset1.0、box_nms_thresh0.7、crop_n_layers0、min_mask_region_area0。生成流程为构建多层点网格 → 逐批预测掩码 → 计算稳定性分数与预测 IoU → 按阈值过滤 → NMS 去重 →可选小区域清理最终返回含segmentation、bbox、predicted_iou、stability_score等字段的掩码列表。SAM CLIP 的文本匹配管线scripts/text_to_sam_clip.py 将两条模型链路串成一条文本分割管线image_text_matchSamAutomaticMaskGenerator.generate(image)生成全图候选掩码按每个掩码的bbox裁剪出目标segment_image并转换为 PIL 图像build_clip_model构建 CLIP ViT-B 模型Paddle 实现见 modeling/clip_paddle.pytransform对裁剪图做预处理tokenize将文本提示编码为 token分别用encode_image/encode_text得到图像与文本特征各自 L2 归一化后计算余弦相似度得分softmax后取与文本最匹配的掩码最终以红色半透明蒙版(255, 0, 0, 180)在结果图中高亮文本命中的目标get_id_photo_output。此外三个脚本均复用 PaddleSeg 的 paddleseg/utils/visualize.py 中的get_pseudo_color_map、get_color_map_list生成伪彩色分割图与 PaddleSeg 主库的常规可视化风格保持一致。参考Kirillov A, Mintun E, Ravi N, et al.Segment AnythingSAM 原论文Radford A, Kim J W, Hallacy C, et al.Learning Transferable Visual Models From Natural Language SupervisionCLIP 论文ICML 2021。赞分享人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载相关推荐Kornia 中的 Segment AnythingSAM实战VisualPrompter 点/框提示分割全指南Kornia 中的 Segment AnythingSAM实战VisualPrompter 点/框提示分割全指南 导读 本文基于 Segment Any计算机视觉人工智能深度学习图像处理Segment Anything (SAM) 实战指南在 AI-Research-SKILLs 中用点、框与掩码提示实现零样本图像分割Segment Anything SAM 实战指南在 AI Research SKILLs 中用点、框与掩码提示实现零样本图像分割 本指南以 AI ReseaAI 技能人工智能大模型深度学习Ultralytics 中的 Segment Anything Model (SAM)可提示分割与自动标注实战指南Ultralytics 中的 Segment Anything Model SAM 可提示分割与自动标注实战指南 Segment Anything Model人工智能深度学习计算机视觉预训练上一篇FontForge完全指南从零开始制作专业字体的免费开源方案下一篇PX4 飞控硬件指南ARK FPV 飞行控制器STM32H743、30.5mm 标准孔位、12V 图传供电创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考