SAM

SAM (Segment Anything) перетворює клік точкою або рамкою на маску об'єкта. LibreYOLO завантажує її через окрему фабрику LibreSAM, відмінну від фабрики детекторів LibreYOLO(), оскільки модель за запитами потребує іншої форми виклику.

Задачі
instance segmentation
Розміри
base, large, huge at 1024 px
Встановлення
pip install libreyolo
Рівень підтримки
Суміжний рівень, починаючи з v. Окремий інтерфейс продукту з власною фабрикою та контрактом.
Першоджерело
SAM (Segment Anything), автори: Meta AI Research (FAIR), ліцензія Apache-2.0. Стаття, джерело
Ліцензії
Код: MIT, ваги: Apache-2.0. Комерційне використання

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

SAM потребує додаткового набору залежностей sam, який установлює transformers і timm.

bash
pip install "libreyolo[sam]"

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

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

Запити точками та рамками
from libreyolo import LibreSAM, SAMPLE_IMAGE # "base" автоматично завантажує facebook/sam-vit-base під час першого використання.# Інші розміри: "large", "huge" (також "b"/"l"/"h").model = LibreSAM("base") # Запит точкою: [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 LibreSAM, SAMPLE_IMAGE model = LibreSAM("base") # Енкодер зображення є найдорожчою частиною. 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 для цього сімейства: SAM у LibreYOLO призначена лише для передбачення, а відстеження у відео не охоплюється. Типи джерел описано в розділі передбачення.

Варіанти

Доступні три розміри енкодера зображень ViT: base, large і huge, усі з фіксованим входом 1024 px. Бенчмарків правильності чи затримки для цього сімейства ще не опубліковано, тому вибір розміру прямо зіставляє вагу енкодера з якістю масок: base кодує найшвидше, а huge є найважчим.

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

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

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

Оригінальна робота
SAM (Segment Anything), Meta AI Research (FAIR)
Ліцензія першоджерела
Apache-2.0
Джерело першоджерела
github.com/facebookresearch/segment-anything
Код LibreYOLO
MIT
Ваги
Apache-2.0, поширюється авторами. 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 does not mirror SAM-1 weights on its own Hugging Face org: LibreSAM downloads the base, large and huge checkpoints directly from Meta's own facebook/sam-vit-base, facebook/sam-vit-large and facebook/sam-vit-huge repositories, each tagged Apache-2.0 there as well.

LibreYOLO не розміщує власної копії ваг SAM-1. LibreSAM("base"), "large" і "huge" завантажуються безпосередньо з власних репозиторіїв Meta facebook/sam-vit-base, facebook/sam-vit-large і facebook/sam-vit-huge на Hugging Face. Кожен із них позначено там ліцензією Apache-2.0 незалежно від LibreYOLO.

Цитування

@article{kirillov2023segany,
  title={Segment Anything},
  author={Kirillov, Alexander and Mintun, Eric and Ravi, Nikhila and Mao, Hanzi and Rolland, Chloe and Gustafson, Laura and Xiao, Tete and Whitehead, Spencer and Berg, Alexander C. and Lo, Wan-Yen and Doll{\'a}r, Piotr and Girshick, Ross},
  journal={arXiv:2304.02643},
  year={2023}
}

Скопійовано з блоку цитування авторів на сторінці github.com/facebookresearch/segment-anything#citing-segment-anything.

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