Логотип легкой модели сегментации изображений MobileSAM

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)
MobileSAMmobile_sam.ptСегментация экземпляров

Сравнение MobileSAM с YOLO

В следующем сравнении выделены различия между вариантами SAM от Meta, MobileSAM и моделями сегментации Ultralytics, включая YOLO26n-seg:

МодельРазмер
(МБ)
Параметры
(М)
Скорость (CPU)
(мс/из)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s с backbone YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (в 11.0 раз меньше)3.4 (в 11.4 раза меньше)24.8 (в 945 раз быстрее)
Ultralytics YOLO11n-seg6.2 (в 12.6 раз меньше)2.9 (в 13.4 раза меньше)24.3 (в 964 раза быстрее)
Ultralytics YOLO26n-seg6.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

Кодировщик изображенийОригинальный SAMMobileSAM
Параметры611M5M
Скорость452ms8ms

Декодер масок с подсказками (Prompt-Guided Mask Decoder)

Декодер масокОригинальный SAMMobileSAM
Параметры3.876M3.876M
Скорость4ms4ms

Сравнение полного конвейера

Полный конвейер (Enc+Dec)Оригинальный SAMMobileSAM
Параметры615M9.66M
Скорость456ms12ms

Производительность 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")
АргументТипПо умолчаниюОписание
datastrобязательноПуть к директории, содержащей целевые изображения для аннотирования или сегментации.
det_modelstr'yolo26x.pt'Путь к модели обнаружения YOLO для первоначального обнаружения объектов.
sam_modelstr'sam_b.pt'Путь к модели SAM для сегментации (поддерживает варианты SAM, SAM2 и модели MobileSAM).
devicestr''Вычислительное устройство (например, 'cuda:0', 'cpu' или '' для автоматического обнаружения устройства).
conffloat0.25Порог достоверности обнаружения YOLO для фильтрации слабых детекций.
ioufloat0.45Порог IoU для NMS (Non-Maximum Suppression), чтобы отфильтровать перекрывающиеся рамки.
imgszint640Размер ввода для изменения размера изображений (должен быть кратен 32).
max_detint300Максимальное количество обнаружений на изображение для экономии памяти.
classeslist[int]NoneСписок индексов классов для обнаружения (например, [0, 1] для человека и велосипеда).
output_dirstrNoneДиректория сохранения для аннотаций (по умолчанию './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.

Комментарии