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

MobileSAM Логотип

Мобильный сегмент "Все что угодно" (MobileSAM)

Статья MobileSAM теперь доступна на сайте arXiv.

Демонстрация работы MobileSAM на CPU доступна по этой демонстрационной ссылке. Выполнение на CPU Mac i5 занимает около 3 секунд. На Hugging Face интерфейс и менее производительные процессоры способствуют более медленному отклику, но он продолжает эффективно работать.



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

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

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

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

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

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

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

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

Модель Размер (МБ) Параметры (M) СкоростьCPU) (мс/им)
Мета SAM-b 375 93.7 49401
Мета SAM2-b 162 80.8 31901
Мета SAM2-t 78.1 38.9 25997
MobileSAM 40.7 10.1 25381
FastSAM смагистралью YOLOv8 23.7 11.8 55.9
Ultralytics YOLOv8n 6,7 (11,7x меньше) 3,4 (на 11,4 меньше) 24,5 (в 1061 раз быстрее)
Ultralytics YOLO11n-seg 5,9 (13,2x меньше) 2,9 (13,4x меньше) 30.1 (864x быстрее)

Это сравнение демонстрирует существенные различия в размерах и скорости работы моделей между вариантами SAM и моделями сегментации YOLO . Хотя SAM предоставляет уникальные возможности автоматической сегментации, модели YOLO , в частности YOLOv8n и 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 по производительности сопоставим с оригинальным SAM и сохраняет тот же конвейер, за исключением изменения кодировщика изображений. В частности, мы заменяем оригинальный тяжелый кодер ViT-H (632 Мбайт) на более компактный Tiny-ViT (5 Мбайт). На одном GPU, MobileSAM работает примерно 12 мс на изображение: 8 мс на кодер изображения и 4 мс на декодер маски.

В следующей таблице представлено сравнение кодировщиков изображений на базе технологии ViT:

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

И в оригинальном SAM , и в MobileSAM используется один и тот же декодер масок, управляемый подсказками:

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

Вот сравнение всего трубопровода:

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

Работа MobileSAM и оригинального SAM демонстрируется с использованием точки и коробки в качестве подсказок.

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

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

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

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

Как и оригинал SAMмы предлагаем в Ultralytics простой метод тестирования, включающий режимы для точечных и коробочных подсказок.

Скачать модель

Предварительно обученные веса 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]])

Коробка Prompt

Пример

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 для не максимального подавления для фильтрации перекрывающихся ящиков.
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 и чем она отличается от оригинальной модели SAM ?

MobileSAM - это легкая и быстрая модель сегментации изображений, предназначенная для мобильных приложений. В ней сохранен тот же конвейер, что и в оригинальном SAM , но тяжелый кодер ViT-H (632 М параметров) заменен на более компактный кодер Tiny-ViT (5 М параметров). В результате этого изменения MobileSAM стал примерно в 5 раз меньше и в 7 раз быстрее оригинального SAM. Например, MobileSAM работает примерно за 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.

Почему я должен использовать MobileSAM для своего мобильного приложения?

MobileSAM идеально подходит для мобильных приложений благодаря своей легкой архитектуре и высокой скорости вычислений. По сравнению с оригинальным SAM, MobileSAM примерно в 5 раз меньше и в 7 раз быстрее, что делает его подходящим для сред, где вычислительные ресурсы ограничены. Благодаря такой эффективности мобильные устройства могут выполнять сегментацию изображений в реальном времени без значительных задержек. Кроме того, модели MobileSAM, такие как Inference, оптимизированы для работы на мобильных устройствах.

Как проходило обучение на сайте MobileSAM , и доступен ли код обучения?

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

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

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

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

Более подробные примеры использования и сравнения производительности приведены в разделе Адаптация с SAM на MobileSAM.

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

Комментарии