Мобильный сегмент "Все что угодно" (MobileSAM)
MobileSAM - это компактная, эффективная модель сегментации изображений, специально разработанная для мобильных и периферийных устройств. Разработанная для использования возможностей модели Segment Anything Model (SAM) в среды с ограниченными вычислительными ресурсами, MobileSAM обеспечивает практически мгновенную сегментацию, сохраняя при этом совместимость с оригинальным конвейером SAM . Независимо от того, разрабатываете ли вы приложения в реальном времени или легкие развертывания, MobileSAM обеспечивает впечатляющие результаты сегментации при меньших требованиях к размеру и скорости, чем его предшественники.
Смотреть: Как выполнить вывод с помощью MobileSAM , используя Ultralytics | Пошаговое руководство 🎉
MobileSAM был использован в различных проектах, включая 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) (мс/им) |
---|---|---|---|
Мета 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 заменяет оригинальный кодер ViT-H (632 М параметров) на гораздо более компактный кодер Tiny-ViT (5 М параметров). На одном GPU MobileSAM обрабатывает изображение примерно за 12 мс (8 мс на кодер, 4 мс на декодер маски).
Сравнение кодировщиков изображений на основе 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 примерно в 5 раз меньше и в 7 раз быстрее, чем FastSAM. Более подробную информацию можно найти на странице проектаMobileSAM .
Тестирование MobileSAM в Ultralytics
Как и оригинал SAMUltralytics предоставляет простой интерфейс для тестирования 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]])
Коробка 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 на arXiv.
ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ
Что такое MobileSAM и чем он отличается от оригинальной модели SAM ?
MobileSAM - это легкая и быстрая модель сегментации изображений, оптимизированная для мобильных и краевых приложений. Она использует тот же конвейер, что и оригинальный SAM , но заменяет большой кодер ViT-H (632 М параметров) на компактный кодер Tiny-ViT (5 М параметров). В результате 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 .