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 нужен extra sam, который подтягивает transformers и timm.

bash
pip install "libreyolo[sam]"

Предсказание

LibreSAM(...) — отдельная от LibreYOLO(...) точка входа: она возвращает сегментатор по промптам, а не детектор, потому что прямой проход здесь бессмыслен без пространственного промпта. CLI-команды libreyolo predict для этого семейства нет; используйте Python API.

Промпты точкой и рамкой
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: в LibreYOLO SAM работает только на предсказание, а отслеживание в видео здесь за рамками. Типы источников описаны в разделе предсказание.

Варианты

Три размера 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. Таблицы поддержки, чекпойнты и результаты бенчмарков на этой странице сгенерированы из выпущенной библиотеки и опубликованных весов, а не написаны вручную.