
Ultralytics 集成 MobileSAM 完全指南轻量级可提示图像分割模型的原理、性能与实战【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics导读MobileSAMMobile Segment Anything是为移动端与边缘设备量身打造的轻量图像分割模型它在保留 Meta 原版 Segment Anything ModelSAM完整管线与交互接口的同时将重达 637M 参数的 ViT-H 图像编码器替换为仅 5M 参数的 Tiny-ViT使整张图片的编码加解码流程在单 GPU 上缩短至约 12ms。本文将以 Ultralytics 仓库中 MobileSAM 官方文档 为骨架结合 SAM 模型实现、网络构建代码 与 自动标注工具 等源码系统讲解 MobileSAM 的定位、与 YOLO 系分割模型的差异、从 SAM 平滑迁移的方法、点/框提示词Point/Box Prompt推理实战以及基于检测模型自动构建分割数据集的完整方案。读完本文你将掌握用SAM(mobile_sam.pt)一行代码驱动 MobileSAM、理解其架构取舍依据并能自主复现性能对比与落地标注流水线。什么是 MobileSAMMobileSAM 是一款紧凑高效的图像分割模型专为移动端与边缘设备设计。其核心思路是将 Meta 的 Segment Anything ModelSAM的分割能力带到算力受限环境它保持了与原版 SAM 管线的兼容性却以远小于前身的体积和算力需求实现近乎即时的分割推理。从生态角度看MobileSAM 已被多个知名项目采用例如结合文本提示的 Grounding-SAM、交互式标注工具 AnyLabeling 以及 Segment Anything in 3D 等这说明其作为轻量可提示分割引擎的通用性。在训练侧Ultralytics 文档指出 MobileSAM 仅使用单张 GPU、基于 10 万张图像数据集约为原始数据集的 1%在不到一天的时间内完成训练训练代码由原项目后续发布。可用模型、支持任务与运行模式在 Ultralytics 中MobileSAM 对应 segment实例分割任务。下表给出官方文档登记的可用模型、预训练权重、支持任务以及各运行模式推理 Inference、验证 Validation、训练 Training、导出 Export的兼容情况✅ 表示支持❌ 表示不支持。模型预训练权重支持任务训练验证推理导出MobileSAMmobile_sam.pt实例分割❌❌✅❌需要特别指出的是MobileSAM 作为来自外部的预训练模型只开放推理能力它不支持训练、验证与导出。从源码结构看这一约束同样体现在模型装载逻辑中——sam/model.py 的SAM.__init__明确要求预训练文件必须是.pt或.pth后缀且该实现本身与 Ultralytics 常规的 YOLO 训练管线并不耦合而 sam_model_map 也只是把mobile_sam.pt映射到对应的网络构建函数build_mobile_sam并不注册训练器。因此使用 MobileSAM 的正确姿势是拿来即推理若要自定义训练实例分割模型应选用 YOLO11-seg、YOLO26-seg 等可训练模型。MobileSAM 与 YOLO 分割模型的对比官方对比数据下表展示了 Meta SAM 系列变体、MobileSAM 与 Ultralytics 分割模型含 YOLO26n-seg的差异数据来自 mobile-sam.md模型体积 (MB)参数量 (M)CPU 速度 (ms/图)Meta SAM-b37593.741703Meta SAM2-b16280.828867Meta SAM2-t78.138.923430MobileSAM40.710.123802FastSAM-sYOLOv8 backbone23.911.858.0Ultralytics YOLOv8n-seg7.1小 11.0x3.4少 11.4x24.8快 945xUltralytics YOLO11n-seg6.2小 12.6x2.9少 13.4x24.3快 964xUltralytics YOLO26n-seg6.7小 11.7x2.7少 14.4x25.2快 930x该对比直观地展示了 SAM 系列与 YOLO 分割模型在体积与速度上的巨大差距SAM 家族的核心竞争力在于独特的**自动可提示分割promptable/automatic segmentation**能力而 YOLO 系模型尤其是 YOLOv8n-seg、YOLO11n-seg 与 YOLO26n-seg则显著更小、更快、更省算力。两者并非互相替代的关系而是分别面向交互式/零样本分割与固定类别高效分割两种场景。如何复现这组数据官方文档同时给出了这组基准的测试环境与可复现脚本SAM 系列使用 PyTorch 测速YOLO 系列使用 ONNX Runtime 测速测试运行于 2025 款 Apple M4 Air16GB RAM依赖版本为torch2.10.0、ultralytics8.4.31、onnxruntime1.24.4。复现时请尽量对齐上述前提因为混合框架、不同硬件的测速结果存在系统差异。from ultralytics import ASSETS, SAM, YOLO, FastSAM # Profile SAM2-t, SAM2-b, SAM-b, MobileSAM for file in [sam_b.pt, sam2_b.pt, sam2_t.pt, mobile_sam.pt]: model SAM(file) model.info() model(ASSETS) # Profile FastSAM-s model FastSAM(FastSAM-s.pt) model.info() model(ASSETS) # Profile YOLO models (ONNX) for file_name in [yolov8n-seg.pt, yolo11n-seg.pt, yolo26n-seg.pt]: model YOLO(file_name) model.info() onnx_path model.export(formatonnx, dynamicTrue) model YOLO(onnx_path) model(ASSETS)model.info()会打印模型参数量、层数与理论计算量model(ASSETS)对仓库内置示例图片bus.jpg、zidane.jpg位于 ultralytics/assets执行一次完整前向用于观测端到端耗时。其中SAM(file)装载走的是 sam/model.py 的predict入口——该入口内部会以imgsz: 1024作为默认推理尺寸。从 SAM 平滑迁移到 MobileSAM同一管线仅替换图像编码器MobileSAM 完整保留原版 SAM 的预处理、后处理与全部对外接口这意味着从 SAM 切换到 MobileSAM 只需改动极少的业务代码。二者的本质区别在于图像编码器原版 SAM 使用 637M 参数的 ViT-H 编码器而 MobileSAM 换成了仅 5M 参数的 Tiny-ViT 编码器。官方给出的单 GPU 处理耗时为约 12ms/图其中编码器占约 8ms、掩码解码器占约 4ms。这部分架构差异在仓库源码中有非常清晰的印证。在 sam/build.py 中build_mobile_sam通过一组列表式参数驱动_build_samdef build_mobile_sam(checkpointNone): Build and return a Mobile Segment Anything Model (Mobile-SAM) for efficient image segmentation. return _build_sam( encoder_embed_dim[64, 128, 160, 320], encoder_depth[2, 2, 6, 2], encoder_num_heads[2, 4, 5, 10], encoder_global_attn_indexesNone, mobile_samTrue, checkpointcheckpoint, )可以看到 Tiny-ViT 采用 4 阶段金字塔设计embedding 维度依次为 64/128/160/320深度 2/2/6/2注意力头数 2/4/5/10与标准 SAM 编码器那种单一encoder_embed_dim如 ViT-H 为 1280的写法完全不同。当mobile_samTrue时_build_sam内部 会实例化 modules/tiny_encoder.py 中的TinyViT类img_size1024、窗口尺寸[7, 7, 14, 7]、mlp_ratio4.0否则实例化 ViT 系ImageEncoderViT。而提示编码器与掩码解码器两个组件完全共享这正是 MobileSAM 能无缝复用 SAM 推理逻辑的根本原因。三个维度的量化对比官方文档从图像编码器、提示引导掩码解码器与整条管线三个层面给出对比基于 ViT 的图像编码器对比图像编码器原版 SAMMobileSAM参数量637M5M速度452ms8ms提示引导的掩码解码器对比掩码解码器原版 SAMMobileSAM参数量3.876M3.876M速度4ms4ms整条管线编码器解码器对比整条管线EncDec原版 SAMMobileSAM参数量641M9.66M速度456ms12ms解码器在参数量与速度上与原版完全一致均约 3.876M、4ms说明 MobileSAM 的压缩红利几乎全部来自编码器分割质量的下限则被成熟的 SAM 解码器兜住。上面的点提示与框提示推理效果示例详见原文档可在仓库内直接运行下述实战代码亲测验证。在 Ultralytics 中测试 MobileSAM与 SAM 一致Ultralytics 为 MobileSAM 提供了统一的简洁接口同时支持 Point 与 Box 两类提示词。关键点在于MobileSAM 与 SAM 共享同一个 API因此本节的用法同样适用于 SAM/SAM2。第一步获取预训练权重先通过 Ultralytics 资产仓库下载mobile_sam.pt预训练权重文件名mobile_sam.pt随 Ultralytics 官方资产发布。更常见的做法是不手动下载——直接SAM(mobile_sam.pt)Ultralytics 会自动下载缺失的权重文件下载逻辑见 utils/downloads.py 中的attempt_download_asset网络构建处_load_checkpoint亦调用同一机制。Point Prompt点提示推理点提示通过前景点/背景点告诉模型要去分割哪个对象。下方四种写法覆盖了单目标单点、多目标多点、单目标多点、正负点混合的典型场景示例图片为仓库内置的 zidane.jpgfrom ultralytics import SAM # Load the model model SAM(mobile_sam.pt) # Predict a segment based on a single point prompt model.predict(ultralytics/assets/zidane.jpg, points[900, 370], labels[1]) # Predict multiple segments based on multiple points prompt model.predict(ultralytics/assets/zidane.jpg, points[[400, 370], [900, 370]], labels[1, 1]) # Predict a segment based on multiple points prompt per object model.predict(ultralytics/assets/zidane.jpg, points[[[400, 370], [900, 370]]], labels[[1, 1]]) # Predict a segment using both positive and negative prompts. model.predict(ultralytics/assets/zidane.jpg, points[[[400, 370], [900, 370]]], labels[[1, 0]])关于points与labels的语义sam/predict.py 中prompt_inference的文档字符串给出精确约定points形如(N, 2)或(N, num_points, 2)单位是图像像素坐标labels形如(N,)其中1表示前景positive0表示背景negative。负样本点用于排除干扰物是交互式分割中常用技巧。Box Prompt框提示推理框提示直接用目标边界框圈定分割范围适合已有检测框如上游检测器输出的自动化流水线from ultralytics import SAM # Load the model model SAM(mobile_sam.pt) # Predict a segment based on a single box prompt model.predict(ultralytics/assets/zidane.jpg, bboxes[439, 437, 524, 709]) # Predict multiple segments based on multiple box prompts model.predict(ultralytics/assets/zidane.jpg, bboxes[[439, 437, 524, 709], [114, 196, 313, 708]])bboxes采用XYXY格式即[x_min, y_min, x_max, y_max]sam/predict.py坐标同样是原始图像像素。事实上底层的SAM.predict方法签名就是predict(source, streamFalse, bboxesNone, pointsNone, labelsNone, **kwargs)并把三者打包进prompts字典交给 Predictor见 sam/model.py这就是点、框可以混用同一套上层 API 的原因。更完整的多轮交互与掩码输入用法请参见 SAM 文档。用检测模型自动构建分割数据集将 MobileSAM 的框提示推理与前序检测器串联即可实现检测框 → 分割掩码的自动化标注流水线。Ultralytics 将这一能力封装为auto_annotate函数实现于 data/annotator.pyfrom ultralytics.data.annotator import auto_annotate auto_annotate(datapath/to/images, det_modelyolo26x.pt, sam_modelmobile_sam.pt)其工作流为先用det_model默认yolo26x.pt以streamTrue模式逐张图片做目标检测并提取类别与xyxy边界框再用sam_model此处指定为mobile_sam.pt以框提示方式生成分割掩码最终把每个多边形按class_id x1 y1 x2 y2 ...的 YOLO 分割标注格式写入*.txt文件过滤掉少于 3 个点、无法构成多边形的退化掩码默认输出到与数据目录同级的data_auto_annotate_labels文件夹。auto_annotate的完整参数由 docs/macros/sam-auto-annotate.md 定义实操时可按下表调整参数类型默认值说明datastr必填待标注/分割的目标图像目录路径det_modelstryolo26x.pt用于初始目标检测的 YOLO 检测模型路径sam_modelstrsam_b.pt用于分割的 SAM 模型路径支持 SAM、SAM 2、MobileSAM、SAM 3 权重devicestr计算设备如cuda:0、cpu空串表示自动选择conffloat0.25YOLO 检测置信度阈值过滤弱检测ioufloat0.45非极大值抑制的 IoU 阈值过滤重叠框imgszint640图像缩放输入尺寸需为 32 的倍数max_detint300每张图最大检测数兼顾内存效率classeslist[int]None仅检测指定类别索引的列表如[0, 1]表示 person 与 bicycleoutput_dirstrNone标注保存目录默认为数据目录旁生成data_auto_annotate_labels得益于sam_model参数的多模型兼容性该流水线可以用mobile_sam.pt在 CPU/边缘设备上以更高吞吐完成批量分割标注是低成本构建实例分割训练集的实用方案。从源码视角看 MobileSAM 的装载机制把 MobileSAM 放进 Ultralytics 体系的关键在 sam/build.pysam_model_map字典按权重文件名将mobile_sam.pt映射到build_mobile_sam而build_sam(ckpt)通过ckpt.endswith(k)匹配后缀并调用对应构建函数。这也解释了为什么SAM(mobile_sam.pt)能自动识别并装配出 MobileSAM 网络——权重文件名是路由的唯一依据。若传入不支持的模型名会抛出FileNotFoundError并列出全部可用模型。此外SAM类通过 sam/model.py 的task_map属性将segment任务映射到相应的 PredictorSAM/SAM2/SAM3 分别对应Predictor/SAM2Predictor/SAM3Predictor。同时该类的predict会强制覆写conf0.25、imgsz1024并开启retina_masksTruesam/model.py确保以 1024×1024 分辨率与细粒度掩码输出对齐 SAM 系模型的原始设计假设。正因这些统一约定SAM 与 MobileSAM 共用同一 API才不是纸面承诺而是代码层面的既成事实。引用与致谢如果 MobileSAM 对你的研究或开发有所帮助建议引用以下论文article{mobile_sam, title{Faster Segment Anything: Towards Lightweight SAM for Mobile Applications}, author{Zhang, Chaoning and Han, Dongshen and Qiao, Yu and Kim, Jung Uk and Bae, Sung Ho and Lee, Seungkyu and Hong, Choong Seon}, journal{arXiv preprint arXiv:2306.14289}, year{2023} }常见问题FAQMobileSAM 是什么它与原版 SAM 有何区别MobileSAM 是针对移动与边缘应用优化的轻量快速图像分割模型。它保留原版 SAM 的完整管线仅将 637M 参数的 ViT-H 大编码器替换为 5M 参数的紧凑 Tiny-ViT 编码器使单图端到端耗时从原版的约 456ms 降至约 12ms总参数量从 641M 降至 9.66M体积仅约 40.7MB适合实时与低算力场景。如何在 Ultralytics 中快速测试 MobileSAM直接使用与 SAM 相同的接口即可。加载SAM(mobile_sam.pt)后通过model.predict(source, points[...], labels[...])传入点提示、或通过model.predict(source, bboxes[...])传入框提示即可得到分割掩码。更完整的示例见上文在 Ultralytics 中测试 MobileSAM一节。为什么我的移动端应用应该选择 MobileSAM关键在于轻量与快速相比原版 SAMMobileSAM 将图像编码器从 637M 压缩到 5M 参数端到端单 GPU 处理约 12ms/图能在有限算力的设备上以可接受的延迟完成图像分割非常适合对实时性敏感的应用。同时它在 Ultralytics 中可自由配合 CPU 或边缘设备运行支持 推理模式。MobileSAM 是如何训练的训练代码开源吗据官方文档说明MobileSAM 基于约 10 万张图像的数据集约为原始数据集的 1%在单张 GPU 上、不足一天时间内完成训练训练代码由原项目后续发布。目前用户可通过预训练权重与仓库实现直接进行推理仓库内 sam/build.py 也完整保留了其网络结构定义可作为复现与二次开发的参考。MobileSAM 的主要使用场景有哪些移动应用中的实时图像分割如图像编辑、人像抠图低算力设备上的低延迟图像处理AI 移动应用中的 AR、数据分析等功能集成亦可充当检测器输出框 → SAM 精分割自动化标注管线中的分割引擎见上文auto_annotate示例。延伸阅读SAMSegment Anything Model文档MobileSAM 的接口父级点/框/掩码多轮提示的完整用法推理模式 predict 与 导出模式 export了解推理入口与导出限制YOLO26 文档如需可训练的高效分割模型YOLO26n-seg 是 MobileSAM 之外的另一种选择sam/build.py、sam/modules/tiny_encoder.py、data/annotator.py本文引用的核心源码供进一步深入阅读【免费下载链接】ultralyticsUltralytics YOLO26, YOLO11, YOLOv8 — object detection, instance segmentation, semantic segmentation, image classification, pose estimation, object tracking项目地址: https://gitcode.com/GitHub_Trending/ul/ultralytics创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考