MobileSAM

MobileSAM замінює енкодер зображень ViT-H моделі SAM дистильованим енкодером TinyViT, тому той самий процес сегментації за запитами точками й рамками працює на менш потужному обладнанні. LibreYOLO містить нативний порт через окрему фабрику LibreSAM, відмінну від фабрики детекторів LibreYOLO().

Задачі
instance segmentation
Розміри
tiny at 1024 px
Встановлення
pip install libreyolo
Рівень підтримки
Суміжний рівень, починаючи з v. Окремий інтерфейс продукту з власною фабрикою та контрактом.
Першоджерело
MobileSAM, автори: Kyung Hee University, ліцензія Apache-2.0. Стаття, джерело
Ліцензії
Код: Apache-2.0, ваги: Apache-2.0. Комерційне використання

Встановлення

MobileSAM потребує додаткового набору залежностей sam: власне завантаження ваг LibreYOLO і далі використовує інструменти знімків Hugging Face із transformers, хоча інференс працює в нативному декодері без transformers.

bash
pip install "libreyolo[sam]"

Передбачення

LibreSAM(...) (або фабрика конкретного сімейства LibreMobileSAM(...)) є окремою точкою входу від LibreYOLO(...): вона повертає сегментатор за запитами, а не детектор, оскільки прямий прохід тут не має сенсу без просторового запиту. Для цього сімейства немає команди CLI libreyolo predict; використовуйте API Python.

Запити точками та рамками
from libreyolo import LibreSAM, SAMPLE_IMAGE # MobileSAM має один розмір "tiny", тому інші псевдоніми не потрібні.model = LibreSAM("mobilesam") # Запит точкою: [x, y] у піксельних координатах, мітка 1 означає передній план.result = model.predict(SAMPLE_IMAGE, points=[640, 420], labels=[1])print(result.masks.xy)      # Полігон для кожної маскиprint(result.boxes.xyxy)    # Щільна рамка, отримана з маски # Запит рамкою замість точки.result = model.predict(SAMPLE_IMAGE, bboxes=[300, 200, 900, 700]) # Без запиту сегментується все зображення (спрощений автоматичний# генератор масок, а не вичерпна еталонна реалізація).result = model.predict(SAMPLE_IMAGE)
Одне кодування, багато запитів
from libreyolo import LibreMobileSAM, SAMPLE_IMAGE model = LibreMobileSAM() # Енкодер зображення є найдорожчою частиною. set_image() запускає його один раз;# кожен наступний виклик predict() повторно використовує кешований ембединг.model.set_image(SAMPLE_IMAGE)a = model.predict(points=[640, 420], labels=[1])b = model.predict(bboxes=[300, 200, 900, 700])model.reset_image()

Запит точкою приймає [x, y] для одного об'єкта, [[x, y], ...] для кількох або масиви numpy. labels позначає кожну точку як 1 (передній план) або 0 (тло), а типово всі точки належать до переднього плану. Запит рамкою приймає [x1, y1, x2, y2] або список рамок і повертає по одній масці на рамку. Якщо пропустити обидва запити, усе зображення сегментується через запити за щільною сіткою зі збереженням упевнених масок без перекриття. Цей режим «сегментувати все» спрощено порівняно з еталонним автоматичним генератором масок, і він може недостатньо сегментувати переповнені сцени. Точний результат дає справжній запит точкою або рамкою. conf фільтрує за передбаченою якістю маски (IoU), а не за впевненістю виявлення: передайте 0.0, щоб зберегти всіх кандидатів. multimask=True повертає всі три маски неоднозначності ціле-проти-частини від SAM для кожного запиту замість однієї найкращої. device= переміщує модель і, якщо активний сеанс set_image(), кешований ембединг. Кожна маска має ідентифікатор класу 0 із назвою "object", оскільки маска за запитом не має фіксованого набору класів. train(), val(), export() і track() спричиняють NotImplementedError для цього сімейства: MobileSAM у LibreYOLO призначена лише для передбачення. Типи джерел описано в розділі передбачення.

Варіанти

Доступний один розмір tiny із фіксованим входом 1024 px: MobileSAM постачає один енкодер TinyViT замість драбини base/large/huge, яку пропонує SAM-1.

Контрольні точки

Усі опубліковані файли ваг цього сімейства.

ФайлВхід (пікс.)Ліцензія ваг
Instance segmentation
LibreMobileSAM.ptapache-2.0

Кожен наведений вище файл уже доступний у організації LibreYOLO і завантажується під час першого використання.

Ліцензування

Перевіряйте ліцензію в репозиторії Hugging Face конкретних ваг, які завантажуєте. Кожна контрольна точка в організації LibreYOLO має ліцензію, і вона не завжди однакова для всього сімейства. Цей репозиторій є авторитетним джерелом, а наведене нижче резюме описує умови на момент останньої перевірки сторінки.

Це опис відповідних ліцензій, а не юридична консультація. Якщо відповідь має комерційне значення, самостійно прочитайте ліцензії та зверніться по юридичну консультацію.

Оригінальна робота
MobileSAM, Kyung Hee University
Ліцензія першоджерела
Apache-2.0
Джерело першоджерела
github.com/ChaoningZhang/MobileSAM
Код LibreYOLO
MIT
Ваги
Apache-2.0, повторно опубліковано на huggingface.co/LibreYOLO
Тлумачення
Apache-2.0 is a permissive license, so this code and these weights can be used in commercial and closed-source products. It asks you to keep the license text and attribution notices with any copy you redistribute, and it grants a patent license. LibreYOLO carries a native port of the TinyViT image encoder, prompt encoder, two-way transformer and mask decoder rather than vendoring upstream files unmodified, checked for bit-exact parity against the original Apache-2.0 implementation, with a NOTICE recording that provenance. The converted checkpoint is hosted as LibreMobileSAM.pt on the LibreYOLO Hugging Face org, tagged Apache-2.0 there as well.

Цитування

@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}
}

Скопійовано з блоку цитування авторів на сторінці github.com/ChaoningZhang/MobileSAM#bibtex-of-our-mobilesam.

Перевірено з LibreYOLO v1.5.0. Таблиці підтримки, контрольні точки й результати бенчмарків на цій сторінці згенеровано з випущеної бібліотеки та опублікованих ваг, а не написано вручну.