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.
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.