Перейти к содержимому

MobileSAM Логотип

Мобильный сегмент Anything (MobileSAM)

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

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



Смотри: How to Run Inference with MobileSAM using Ultralytics | Step-by-Step Guide 🎉

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Проверка MobileSAM в Ultralytics

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

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

Скачать модель можно здесь.

Побуждение к действию

Пример

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]])

Box 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 mutiple 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 Страница.

Цитаты и благодарности

Если ты находишь 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 is a lightweight, fast image segmentation model designed for mobile applications. It retains the same pipeline as the original SAM but replaces the heavyweight ViT-H encoder (632M parameters) with a smaller Tiny-ViT encoder (5M parameters). This change results in MobileSAM being approximately 5 times smaller and 7 times faster than the original SAM. For instance, MobileSAM operates at about 12ms per image, compared to the original SAM's 456ms. You can learn more about the MobileSAM implementation in various projects here.

Как протестировать 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 с набором данных 100k, что составляет 1% от исходных изображений, менее чем за сутки. Хотя код обучения будет доступен в будущем, сейчас ты можешь изучить другие аспекты MobileSAM в репозиторииMobileSAM на GitHub. Этот репозиторий включает в себя предварительно обученные веса и детали реализации для различных приложений.

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

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

  • Real-time object detection and segmentation for mobile applications.
  • Обработка изображений с низкой задержкой в устройствах с ограниченными вычислительными ресурсами.
  • Интеграция в мобильные приложения, управляемые ИИ, для таких задач, как дополненная реальность (AR) и аналитика в реальном времени.

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

📅 Created 11 months ago ✏️ Updated 8 days ago

Комментарии