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.