
Mobile Segment Anything (MobileSAM)
MobileSAM — это компактная и эффективная модель сегментации изображений, созданная специально для мобильных и периферийных устройств. Разработанная для переноса возможностей модели Segment Anything Model (SAM) от Meta в среду с ограниченными вычислительными ресурсами, MobileSAM обеспечивает практически мгновенную сегментацию, сохраняя при этом совместимость с оригинальным конвейером 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, ее предобученные веса, поддерживаемые задачи и совместимость с различными режимами работы, такими как Inference, Validation, Training и Export. Поддерживаемые режимы отмечены ✅, а неподдерживаемые — ❌.
| Тип модели | Предобученные веса | Поддерживаемые задачи | Логический вывод | Валидация | Обучение | Экспорт (Export) |
|---|---|---|---|---|---|---|
| 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 с backbone 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)
model = YOLO(onnx_path)
model(ASSETS)Адаптация от SAM к MobileSAM
MobileSAM сохраняет тот же конвейер, что и оригинальный SAM, включая предварительную обработку, постобработку и все интерфейсы. Это означает, что ты можешь перейти от SAM к MobileSAM с минимальными изменениями в своем рабочем процессе.
Ключевое отличие заключается в кодировщике изображений: MobileSAM заменяет оригинальный кодировщик ViT-H (632 млн параметров) на гораздо меньший кодировщик Tiny-ViT (5 млн параметров). На одном GPU MobileSAM обрабатывает изображение примерно за 12 мс (8 мс на кодировщик, 4 мс на декодер масок).
Сравнение кодировщиков изображений на базе ViT
| Кодировщик изображений | Оригинальный SAM | MobileSAM |
|---|---|---|
| Параметры | 611M | 5M |
| Скорость | 452ms | 8ms |
Декодер масок с подсказками (Prompt-Guided Mask Decoder)
| Декодер масок | Оригинальный SAM | MobileSAM |
|---|---|---|
| Параметры | 3.876M | 3.876M |
| Скорость | 4ms | 4ms |
Сравнение полного конвейера
| Полный конвейер (Enc+Dec) | Оригинальный SAM | MobileSAM |
|---|---|---|
| Параметры | 615M | 9.66M |
| Скорость | 456ms | 12ms |
Производительность 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 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]])И 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, SAM2 и модели MobileSAM). |
device | str | '' | Вычислительное устройство (например, 'cuda:0', 'cpu' или '' для автоматического обнаружения устройства). |
conf | float | 0.25 | Порог достоверности обнаружения YOLO для фильтрации слабых детекций. |
iou | float | 0.45 | Порог IoU для NMS (Non-Maximum Suppression), чтобы отфильтровать перекрывающиеся рамки. |
imgsz | int | 640 | Размер ввода для изменения размера изображений (должен быть кратен 32). |
max_det | int | 300 | Максимальное количество обнаружений на изображение для экономии памяти. |
classes | list[int] | None | Список индексов классов для обнаружения (например, [0, 1] для человека и велосипеда). |
output_dir | str | None | Директория сохранения для аннотаций (по умолчанию './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.
Часто задаваемые вопросы (FAQ)
Что такое MobileSAM и чем она отличается от оригинальной модели SAM?
MobileSAM — это легковесная, быстрая модель сегментации изображений, оптимизированная для мобильных и периферийных приложений. Она поддерживает тот же конвейер, что и оригинальный SAM, но заменяет большой кодировщик ViT-H (632 млн параметров) компактным кодировщиком Tiny-ViT (5 млн параметров). В результате MobileSAM примерно в 5 раз меньше и в 7 раз быстрее оригинального SAM, работая примерно со скоростью 12 мс на изображение по сравнению с 456 мс у SAM. Узнай больше о реализации MobileSAM в репозитории MobileSAM на GitHub.
Как я могу протестировать MobileSAM с помощью Ultralytics?
Тестирование 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 для моего мобильного приложения?
MobileSAM идеально подходит для мобильных и периферийных приложений благодаря своей легкой конструкции и высокой скорости вывода. По сравнению с оригинальным SAM, MobileSAM примерно в 5 раз меньше и в 7 раз быстрее, что делает ее пригодной для сегментации в реальном времени на устройствах с ограниченными вычислительными ресурсами. Ее эффективность позволяет мобильным устройствам выполнять сегментацию изображений в реальном времени без значительных задержек. Кроме того, MobileSAM поддерживает режим Inference mode, оптимизированный для мобильной производительности.
Как обучалась MobileSAM и доступен ли код обучения?
MobileSAM обучалась на одном GPU с набором данных из 100 тыс. изображений (1% от исходных изображений) менее чем за день. Хотя код обучения будет выпущен в будущем, в настоящее время ты можешь получить доступ к предобученным весам и деталям реализации в репозитории MobileSAM на GitHub.
Каковы основные варианты использования MobileSAM?
MobileSAM предназначена для быстрой и эффективной сегментации изображений в мобильных и периферийных средах. Основные варианты использования включают:
- Обнаружение и сегментация объектов в реальном времени для мобильных приложений
- Обработка изображений с низкой задержкой на устройствах с ограниченными вычислительными мощностями
- Интеграция в мобильные приложения с ИИ для дополненной реальности (AR), аналитики и многого другого
Для получения дополнительной информации о вариантах использования и производительности см. раздел Адаптация от SAM к MobileSAM и блог Ultralytics о приложениях MobileSAM.