
Сегментация всего на мобильных устройствах (MobileSAM)#
MobileSAM — компактная эффективная модель сегментации изображений, специально созданная для мобильных и периферийных устройств. Она переносит возможности модели Meta для сегментации всего (SAM) в среды с ограниченными вычислительными ресурсами и обеспечивает практически мгновенную сегментацию, сохраняя совместимость с исходным конвейером SAM. Независимо от того, разрабатываешь ли ты приложения реального времени или разворачиваешь облегчённые решения, MobileSAM обеспечивает впечатляющие результаты сегментации при значительно меньших требованиях к размеру и скорости по сравнению с предшественниками.
Watch: How to Run Inference with MobileSAM using Ultralytics | Step-by-Step Guide 🎉
MobileSAM используется в различных проектах, включая Grounding-SAM, AnyLabeling и Segment Anything in 3D.
MobileSAM обучался на одном GPU с использованием датасета из 100 тыс. изображений (1% от исходных изображений) менее чем за день.
Доступные модели, поддерживаемые задачи и режимы работы#
В таблице ниже представлены доступная модель MobileSAM, её предварительно обученные веса, поддерживаемые задачи и совместимость с различными режимами работы, такими как вывод, валидация, обучение и экспорт. Поддерживаемые режимы обозначены ✅, а неподдерживаемые — ❌.
| Тип модели | Предварительно обученные веса | Поддерживаемые задачи | Обучение | Валидация | Вывод | Экспорт |
|---|---|---|---|---|---|---|
| MobileSAM | mobile_sam.pt | Сегментация экземпляров | ❌ | ❌ | ✅ | ❌ |
Сравнение MobileSAM и YOLO#
В следующем сравнении показаны различия между вариантами SAM от Meta, MobileSAM и моделями сегментации Ultralytics, включая YOLO26n-seg:
| Модель | Размер (МБ) | Параметры (млн) | Скорость (CPU) (мс/изобр.) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| Meta SAM2-b | 162 | 80.8 | 28867 |
| Meta SAM2-t | 78.1 | 38.9 | 23430 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s с магистральной сетью YOLOv8 | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (в 11.0 раз меньше) | 3.4 (в 11.4 раза меньше) | 24.8 (в 945 раз быстрее) |
| Ultralytics YOLO11n-seg | 6.2 (в 12.6 раза меньше) | 2.9 (в 13.4 раза меньше) | 24.3 (в 964 раза быстрее) |
| Ultralytics YOLO26n-seg | 6.7 (в 11.7 раза меньше) | 2.7 (в 14.4 раза меньше) | 25.2 (в 930 раз быстрее) |
Это сравнение демонстрирует существенные различия в размере и скорости между вариантами SAM и моделями сегментации YOLO. Хотя модели SAM предлагают уникальные возможности автоматической сегментации, модели YOLO, особенно YOLOv8n-seg, YOLO11n-seg и YOLO26n-seg, значительно меньше, быстрее и эффективнее используют вычислительные ресурсы.
Скорость SAM измерялась с помощью PyTorch, а скорость YOLO — с помощью ONNX Runtime. Тесты проводились на Apple M4 Air 2025 года с 16 ГБ ОЗУ с использованием torch==2.10.0, ultralytics==8.4.31 и onnxruntime==1.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(format="onnx", dynamic=True, nms=False) # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
model = YOLO(onnx_path)
model(ASSETS)Переход с SAM на MobileSAM#
MobileSAM сохраняет тот же конвейер, что и исходная SAM, включая предварительную обработку, постобработку и все интерфейсы. Это означает, что ты можешь перейти с SAM на MobileSAM с минимальными изменениями рабочего процесса.
Ключевое различие заключается в кодировщике изображений: MobileSAM заменяет исходный кодировщик ViT-H (637 млн параметров) значительно меньшим кодировщиком Tiny-ViT (5 млн параметров). На одном GPU MobileSAM обрабатывает изображение примерно за 12 мс (8 мс для кодировщика и 4 мс для декодировщика масок).
Сравнение кодировщиков изображений на основе ViT#
| Кодировщик изображений | Исходная SAM | MobileSAM |
|---|---|---|
| Параметры | 637M | 5M |
| Скорость | 452ms | 8 мс |
Декодировщик масок с управлением подсказками#
| Декодировщик масок | Исходная SAM | MobileSAM |
|---|---|---|
| Параметры | 3,876M | 3,876M |
| Скорость | 4 мс | 4 мс |
Сравнение полного конвейера#
| Полный конвейер (кодировщик + декодировщик) | Исходная SAM | MobileSAM |
|---|---|---|
| Параметры | 641M | 9,66M |
| Скорость | 456ms | 12 мс |
Производительность MobileSAM и исходной SAM ниже показана с использованием точечных подсказок и подсказок в виде рамок.


MobileSAM примерно в 7 раз меньше и в 5 раз быстрее FastSAM. Дополнительную информацию можно найти на странице проекта MobileSAM.
Тестирование MobileSAM в Ultralytics#
Как и для исходной SAM, Ultralytics предоставляет простой интерфейс для тестирования MobileSAM с поддержкой точечных подсказок и подсказок в виде рамок.
Загрузка модели#
Загрузи предварительно обученные веса MobileSAM из ресурсов Ultralytics.
Точечная подсказка#
from 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]])Подсказка в виде рамки#
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]])MobileSAM и SAM используют один и тот же API. Подробнее об использовании см. в документации SAM.
Автоматическое создание наборов данных для сегментации с помощью модели обнаружения#
Чтобы автоматически аннотировать свой набор данных с помощью фреймворка Ultralytics, используй функцию auto_annotate, как показано ниже:
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="mobile_sam.pt")| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
data | str | обязательный | Путь к каталогу, содержащему целевые изображения для аннотирования или сегментации. |
det_model | str | 'yolo26x.pt' | Путь к модели обнаружения YOLO для первоначального обнаружения объектов. |
sam_model | str | 'sam_b.pt' | Путь к модели SAM для сегментации (поддерживаются веса SAM, SAM 2, MobileSAM и SAM 3). |
device | str | '' | Устройство вычислений (например, 'cuda:0', 'cpu' или '' для автоматического определения устройства). |
conf | float | 0.25 | Порог достоверности обнаружения YOLO для фильтрации слабых обнаружений. |
iou | float | 0.45 | Порог IoU для подавления немаксимумов, используемый для фильтрации перекрывающихся рамок. |
imgsz | int | 640 | Размер входных данных для изменения размера изображений (должен быть кратен 32). |
max_det | int | 300 | Максимальное количество обнаружений на изображение для эффективного использования памяти. |
classes | list[int] | None | Список индексов классов для обнаружения (например, [0, 1] для человека и велосипеда). |
output_dir | str | None | Каталог для сохранения аннотаций (по умолчанию: соседний каталог <data>_auto_annotate_labels). |
Цитирование и благодарности#
Если 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}
}Прочитай полную статью о MobileSAM на arXiv.
Часто задаваемые вопросы#
MobileSAM — это легковесная и быстрая модель сегментации изображений, оптимизированная для мобильных и периферийных приложений. Модель сохраняет тот же конвейер, что и оригинальный SAM, но заменяет крупный энкодер ViT-H (637 млн параметров) на компактный энкодер Tiny-ViT (5 млн параметров). Это делает весь конвейер MobileSAM примерно в 66 раз меньше оригинального SAM (9,66 млн против 641 млн параметров) и примерно в 38 раз быстрее, работая со скоростью около 12 мс на изображение против 456 мс у SAM. Узнай больше о реализации MobileSAM в репозитории MobileSAM на GitHub.
Тестировать MobileSAM в Ultralytics очень просто. Для предсказания сегментов можно использовать точечные подсказки и подсказки в виде рамок. Например, с точечной подсказкой:
from ultralytics import SAM # Load the model model = SAM("mobile_sam.pt") # Predict a segment based on a point prompt model.predict("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])Подробнее см. в разделе Тестирование MobileSAM в Ultralytics.
MobileSAM идеально подходит для мобильных и периферийных приложений благодаря своей легковесной конструкции и высокой скорости инференса. По сравнению с оригинальным SAM, MobileSAM имеет примерно в 66 раз меньше параметров и работает примерно в 38 раз быстрее, что делает модель подходящей для сегментации в реальном времени на устройствах с ограниченными вычислительными ресурсами. Эффективность MobileSAM позволяет мобильным устройствам выполнять сегментацию изображений в реальном времени без значительной задержки. Кроме того, MobileSAM поддерживает режим инференса, оптимизированный для мобильной производительности.
MobileSAM обучался на одном GPU с датасетом из 100 тыс. изображений (1% от исходных изображений SA-1B) менее чем за день, дистиллируя энкодер изображений ViT-H модели SAM в энкодер Tiny-ViT. Предобученные веса и детали реализации доступны в репозитории MobileSAM на GitHub.
MobileSAM предназначена для быстрой и эффективной сегментации изображений в мобильных и периферийных средах. Основные варианты использования включают:
- Обнаружение и сегментация объектов в реальном времени для мобильных приложений
- Обработка изображений с низкой задержкой на устройствах с ограниченными вычислительными ресурсами
- Интеграция в мобильные приложения на основе ИИ для дополненной реальности (AR), аналитики и других задач
Подробнее о вариантах использования и производительности см. в разделах Переход с SAM на MobileSAM и статье в блоге Ultralytics о приложениях MobileSAM.