Перейти к содержанию

Логотип MobileSAM

Mobile Segment Anything (MobileSAM)

MobileSAM – это компактная и эффективная модель сегментации изображений, разработанная специально для мобильных и периферийных устройств. Созданная для того, чтобы предоставить возможности Meta Segment Anything Model (SAM) в средах с ограниченными вычислительными ресурсами, MobileSAM обеспечивает практически мгновенную сегментацию, сохраняя при этом совместимость с оригинальным конвейером SAM. Независимо от того, разрабатываете ли вы приложения реального времени или облегченные развертывания, MobileSAM обеспечивает впечатляющие результаты сегментации, требуя при этом значительно меньшего размера и скорости по сравнению со своими предшественниками.



Смотреть: Как запустить вывод с MobileSAM, используя Ultralytics | Пошаговое руководство 🎉

MobileSAM была принята в различных проектах, включая Grounding-SAM, AnyLabeling и Segment Anything in 3D.

MobileSAM была обучена на одном GPU с использованием набора данных из 100 тысяч изображений (1% от исходных изображений) менее чем за день. Код обучения будет выпущен в будущем.

Доступные модели, поддерживаемые задачи и режимы работы

В таблице ниже представлена доступная модель MobileSAM, ее предварительно обученные веса, поддерживаемые задачи и совместимость с различными режимами работы, такими как Inference, Validation, Training и Export. Поддерживаемые режимы обозначены символом ✅, а неподдерживаемые — символом ❌.

Тип модели Предварительно обученные веса Поддерживаемые задачи Инференс Валидация Обучение Экспорт
MobileSAM mobile_sam.pt Сегментация экземпляров

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

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

Модель Размер
(МБ)
Параметры
(M)
Скорость (CPU)
(мс/изобр.)
Meta SAM-b 375 93.7 49401
Meta SAM2-b 162 80.8 31901
Meta SAM2-t 78.1 38.9 25997
MobileSAM 40.7 10.1 25381
FastSAM-s с backbone YOLOv8 23.7 11.8 55.9
Ultralytics YOLOv8n-seg 6.7 (в 11.7 раз меньше) 3.4 (в 11.4 раза меньше) 24.5 (в 1061 раз быстрее)
Ultralytics YOLO11n-seg 5.9 (в 13.2 раза меньше) 2.9 (в 13.4 раза меньше) 30.1 (в 864 раза быстрее)

Это сравнение демонстрирует существенные различия в размере и скорости модели между вариантами SAM и моделями сегментации YOLO. В то время как модели SAM предлагают уникальные возможности автоматической сегментации, модели YOLO, особенно YOLOv8n-seg и YOLO11n-seg, значительно меньше, быстрее и более эффективны с вычислительной точки зрения.

Тесты проводились на Apple M4 Pro 2025 года с 24 ГБ оперативной памяти с использованием torch==2.6.0 и ultralytics==8.3.90Чтобы воспроизвести эти результаты:

Пример

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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    model(ASSETS)

Адаптация от SAM к MobileSAM

MobileSAM сохраняет тот же конвейер, что и оригинальная SAM, включая предварительную обработку, постобработку и все интерфейсы. Это означает, что вы можете перейти с SAM на MobileSAM с минимальными изменениями в вашем рабочем процессе.

Ключевое различие заключается в кодировщике изображений: MobileSAM заменяет исходный кодировщик ViT-H (632M параметров) гораздо меньшим кодировщиком Tiny-ViT (5M параметров). На одном GPU MobileSAM обрабатывает изображение примерно за 12 мс (8 мс для кодировщика, 4 мс для декодера маски).

Сравнение Image Encoder на основе ViT

Кодировщик изображений Оригинальный SAM MobileSAM
Параметры 611M 5M
Скорость 452 мс 8 мс

Декодер масок с подсказками

Декодер маски Оригинальный SAM MobileSAM
Параметры 3.876M 3.876M
Скорость 4 мс 4 мс

Сравнение всего конвейера

Весь конвейер (Enc+Dec) Оригинальный SAM MobileSAM
Параметры 615M 9.66M
Скорость 456 мс 12 мс

Производительность MobileSAM и оригинальной SAM проиллюстрирована ниже с использованием как точечных, так и прямоугольных подсказок.

Изображение с точкой в качестве запроса

Изображение с рамкой в качестве запроса

MobileSAM примерно в 7 раз меньше и в 5 раз быстрее, чем FastSAM. Более подробную информацию можно найти на странице проектаMobileSAM .

Тестирование MobileSAM в Ultralytics

Как и оригинальный SAM, Ultralytics предоставляет простой интерфейс для тестирования MobileSAM, поддерживающий как Point, так и Box prompts.

Загрузка модели

Загрузите предварительно обученные веса MobileSAM из Ultralytics assets.

Точечный запрос

Пример

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="yolo11x.pt", sam_model="mobile_sam.pt")
Аргумент Тип По умолчанию Описание
data str обязательно Путь к каталогу, содержащему целевые изображения для аннотации или сегментации.
det_model str 'yolo11x.pt' Путь к модели обнаружения объектов YOLO для начального обнаружения объектов.
sam_model str 'sam_b.pt' Путь к модели SAM для сегментации (поддерживает варианты SAM, SAM2 и mobile_sam).
device str '' Вычислительное устройство (например, 'cuda:0', 'cpu' или '' для автоматического определения устройства).
conf float 0.25 Порог уверенности обнаружения YOLO для фильтрации слабых обнаружений.
iou float 0.45 Порог IoU для 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.

Часто задаваемые вопросы

Что такое MobileSAM и чем она отличается от оригинальной модели SAM?

MobileSAM — это легкая и быстрая модель сегментации изображений, оптимизированная для мобильных и периферийных приложений. Она сохраняет тот же конвейер, что и оригинальная SAM, но заменяет большой ViT-H энкодер (632M параметров) на компактный Tiny-ViT энкодер (5M параметров). В результате MobileSAM примерно в 5 раз меньше и в 7 раз быстрее, чем оригинальная SAM, работая со скоростью примерно 12 мс на изображение по сравнению с 456 мс у SAM. Узнайте больше о реализации MobileSAM в репозитории MobileSAM на GitHub.

Как я могу протестировать MobileSAM, используя Ultralytics?

Тестирование MobileSAM в Ultralytics не представляет сложности. Вы можете использовать Point и Box подсказки для прогнозирования сегментов. Например, используя Point подсказку:

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, оптимизированный для мобильной производительности.

Как была обучена MobileSAM и доступен ли код обучения?

MobileSAM была обучена на одном GPU с использованием набора данных из 100 тысяч изображений (1% от исходных изображений) менее чем за день. Хотя код обучения будет выпущен в будущем, вы можете получить доступ к предварительно обученным весам и деталям реализации из репозитория MobileSAM на GitHub.

Каковы основные варианты использования MobileSAM?

MobileSAM предназначена для быстрой и эффективной сегментации изображений в мобильных и периферийных средах. Основные варианты использования включают:

  • Обнаружение и сегментация объектов в реальном времени для мобильных приложений
  • Обработка изображений с низкой задержкой на устройствах с ограниченными вычислительными ресурсами
  • Интеграция в мобильные приложения на базе ИИ для дополненной реальности (AR), аналитики и многого другого

Для получения более подробной информации о вариантах использования и производительности см. разделы Адаптация от SAM к MobileSAM и блог Ultralytics о приложениях MobileSAM.



📅 Создано 1 год назад ✏️ Обновлено 4 дня назад

Комментарии