SAM 2
SAM 2 расширяет SAM архитектурой с потоковой памятью, рассчитанной на видео, и превращает клик точкой или рамкой в маску объекта. LibreYOLO поддерживает у него сегментацию изображений через отдельную фабрику LibreSAM, не связанную с фабрикой детекторов LibreYOLO().
- Задачи
- instance segmentation
- Размеры
- Установка
pip install libreyolo- Уровень поддержки
- Смежный уровень, начиная с v. Отдельная часть продукта со своей фабрикой и контрактом.
- Исходный проект
- SAM 2 от Meta FAIR, Apache-2.0. Статья, исходный код
- Лицензии
- Код: MIT, веса: Apache-2.0. Коммерческое использование
Установка
Для SAM 2 нужен extra sam, который подтягивает transformers и timm.
pip install "libreyolo[sam]"Предсказание
LibreSAM(...) (или специфичный для семейства LibreSAM2(...)) — отдельная от
LibreYOLO(...) точка входа: она возвращает сегментатор по промптам, а не
детектор, потому что прямой проход здесь бессмыслен без пространственного
промпта. CLI-команды libreyolo predict для этого семейства нет; используйте
Python API. Поддерживается только сегментация изображений; отслеживание в видео
через память у SAM 2 здесь за рамками.
from libreyolo import LibreSAM, SAMPLE_IMAGE # Псевдонимы размеров: "sam2-tiny", "sam2-small", "sam2-base-plus",# "sam2-large" (также короткие формы "sam2-t"/"sam2-s"/"sam2-bp"/"sam2-l").model = LibreSAM("sam2-large") # Точечный промпт: [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 LibreSAM2, SAMPLE_IMAGE # Специфичный для семейства класс принимает размер без префикса "sam2-".model = LibreSAM2("large") # Энкодер изображения — дорогая часть. 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 поддерживает здесь
инференс на изображениях. Типы источников описаны в разделе
предсказание.
Варианты
Четыре размера с бэкбоном Hiera: tiny, small, base-plus и large, все с одинаковым входным разрешением. Бенчмарков точности и задержки для этого семейства пока не опубликовано, поэтому выбор размера напрямую меняет вес энкодера на качество масок: tiny кодирует быстрее всех, large — самый тяжёлый.
Чекпойнты
Все опубликованные файлы весов этого семейства.
| Файл | Вход (пикс.) | Лицензия весов |
|---|---|---|
| Instance segmentation | ||
| LibreSAM2tiny.pt | apache-2.0 | |
| LibreSAM2small.pt | apache-2.0 | |
| LibreSAM2base-plus.pt | apache-2.0 | |
| LibreSAM2large.pt | apache-2.0 | |
Все перечисленные выше файлы уже доступны в организации LibreYOLO и скачиваются при первом использовании.
Лицензирование
Проверяйте лицензию в репозитории конкретных весов на Hugging Face. Она указана для каждого чекпойнта в организации LibreYOLO и может различаться даже внутри одного семейства. Этот репозиторий считается авторитетным источником, а сводка ниже описывает условия на момент последней проверки страницы.
Это описание соответствующих лицензий, а не юридическая консультация. Если ответ важен для коммерческого использования, прочитайте лицензии самостоятельно и проконсультируйтесь с юристом.
- Оригинальная работа
- SAM 2, Meta FAIR
- Лицензия исходного проекта
- Apache-2.0
- Исходный код проекта
- github.com/facebookresearch/sam2
- Код 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 loads SAM 2 through the Apache-2.0 Transformers implementation and republishes Transformers-compatible snapshots of the tiny, small, base-plus and large checkpoints on its own Hugging Face org, tagged Apache-2.0 there as well. LibreYOLO ships image inference only; SAM 2's video-memory tracking is out of scope for this family.
Цитирование
@article{ravi2024sam2,
title={SAM 2: Segment Anything in Images and Videos},
author={Ravi, Nikhila and Gabeur, Valentin and Hu, Yuan-Ting and Hu, Ronghang and Ryali, Chaitanya and Ma, Tengyu and Khedr, Haitham and R{\"a}dle, Roman and Rolland, Chloe and Gustafson, Laura and Mintun, Eric and Pan, Junting and Alwala, Kalyan Vasudev and Carion, Nicolas and Wu, Chao-Yuan and Girshick, Ross and Doll{\'a}r, Piotr and Feichtenhofer, Christoph},
journal={arXiv preprint arXiv:2408.00714},
url={https://arxiv.org/abs/2408.00714},
year={2024}
}Скопировано из блока цитирования авторов на странице github.com/facebookresearch/sam2#citing-sam-2.