SAM 2.1
Мы добавили поддержку более точной модели SAM2.1. Пожалуйста, попробуйте!
SAM 2: Segment Anything Model 2
SAM 2, преемник Segment Anything Model (SAM) от Meta, — это передовой инструмент, предназначенный для комплексной сегментации объектов как на изображениях, так и на видео. Он превосходно справляется со сложными визуальными данными благодаря унифицированной архитектуре модели с возможностью запросов, которая поддерживает обработку в реальном времени и обобщение zero-shot.
Основные характеристики
Смотреть: Как запустить вывод с Meta SAM2, используя Ultralytics | Пошаговое руководство 🎉
Унифицированная архитектура модели
SAM 2 объединяет возможности сегментации изображений и видео в одной модели. Это упрощает развертывание и обеспечивает стабильную производительность для различных типов медиа. Он использует гибкий интерфейс на основе подсказок, позволяя пользователям указывать интересующие объекты с помощью различных типов подсказок, таких как точки, ограничивающие рамки или маски.
Производительность в реальном времени
Модель достигает скорости логического вывода в реальном времени, обрабатывая примерно 44 кадра в секунду. Это делает SAM 2 подходящим для приложений, требующих немедленной обратной связи, таких как редактирование видео и дополненная реальность.
Zero-Shot Generalization (Обобщение без обучения)
SAM 2 может сегментировать объекты, с которыми никогда раньше не сталкивался, демонстрируя сильную обобщающую способность zero-shot. Это особенно полезно в разнообразных или развивающихся визуальных областях, где предопределенные категории могут не охватывать все возможные объекты.
Интерактивное уточнение
Пользователи могут итеративно уточнять результаты сегментации, предоставляя дополнительные запросы, что позволяет точно контролировать результат. Эта интерактивность важна для точной настройки результатов в таких приложениях, как аннотация видео или медицинская визуализация.
Расширенная обработка визуальных проблем
SAM 2 включает механизмы для управления общими проблемами сегментации видео, такими как окклюзия и повторное появление объектов. Он использует сложный механизм памяти для отслеживания объектов в кадрах, обеспечивая непрерывность, даже когда объекты временно скрыты или выходят и снова входят в сцену.
Чтобы глубже понять архитектуру и возможности SAM 2, изучите исследовательскую работу SAM 2.
Производительность и технические детали
SAM 2 устанавливает новый эталон в этой области, превосходя предыдущие модели по различным показателям:
Метрика | SAM 2 | Предыдущий SOTA |
---|---|---|
Интерактивная сегментация видео | Лучший | - |
Требуется взаимодействие с человеком | В 3 раза меньше | Базовая линия |
Сегментация изображений: точность | Улучшено | SAM |
Скорость инференса | В 6 раз быстрее | SAM |
Архитектура модели
Основные компоненты
- Кодировщик изображений и видео: Использует архитектуру на основе трансформера для извлечения высокоуровневых признаков как из изображений, так и из видеокадров. Этот компонент отвечает за понимание визуального контента на каждом временном шаге.
- Кодировщик запросов: Обрабатывает предоставленные пользователем запросы (точки, рамки, маски) для управления задачей сегментации. Это позволяет SAM 2 адаптироваться к вводу пользователя и нацеливаться на определенные объекты в сцене.
- Механизм памяти: Включает кодировщик памяти, банк памяти и модуль внимания к памяти. Эти компоненты совместно хранят и используют информацию из прошлых кадров, позволяя модели поддерживать согласованное отслеживание объектов во времени.
- Mask Decoder: Генерирует финальные маски сегментации на основе закодированных признаков изображения и подсказок. В видео он также использует контекст памяти для обеспечения точного отслеживания по кадрам.
Механизм памяти и обработка окклюзии
Механизм памяти позволяет SAM 2 обрабатывать временные зависимости и окклюзии в видеоданных. Когда объекты перемещаются и взаимодействуют, SAM 2 записывает их характеристики в банк памяти. Когда объект становится окклюдированным, модель может полагаться на эту память, чтобы предсказать его положение и внешний вид, когда он снова появится. Голова окклюзии специально обрабатывает сценарии, в которых объекты не видны, предсказывая вероятность окклюзии объекта.
Разрешение неоднозначности нескольких масок
В ситуациях с неоднозначностью (например, перекрывающиеся объекты) SAM 2 может генерировать несколько прогнозов масок. Эта функция имеет решающее значение для точного представления сложных сцен, где одной маски может быть недостаточно для описания нюансов сцены.
Датасет SA-V
Набор данных SA-V, разработанный для обучения SAM 2, является одним из самых больших и разнообразных наборов данных для сегментации видео. Он включает в себя:
- 51 000+ видео: Снято в 47 странах, что обеспечивает широкий спектр реальных сценариев.
- 600 000+ аннотаций масок: Детализированные пространственно-временные аннотации масок, называемые "masklets", охватывающие целые объекты и их части.
- Масштаб набора данных: Он содержит в 4,5 раза больше видео и в 53 раза больше аннотаций, чем предыдущие крупнейшие наборы данных, предлагая беспрецедентное разнообразие и сложность.
Оценка производительности
Сегментация видеообъектов
SAM 2 продемонстрировал превосходную производительность по основным тестам сегментации видео:
Набор данных | J&F | J | F |
---|---|---|---|
DAVIS 2017 | 82.5 | 79.8 | 85.2 |
YouTube-VOS | 81.2 | 78.9 | 83.5 |
Интерактивная сегментация
В задачах интерактивной сегментации SAM 2 показывает значительную эффективность и точность:
Набор данных | NoC@90 | AUC |
---|---|---|
DAVIS Interactive | 1.54 | 0.872 |
Установка
Чтобы установить SAM 2, используйте следующую команду. Все модели SAM 2 будут автоматически загружены при первом использовании.
pip install ultralytics
Как использовать SAM2: Универсальность в сегментации изображений и видео
В следующей таблице подробно описаны доступные модели SAM 2, их предварительно обученные веса, поддерживаемые задачи и совместимость с различными режимами работы, такими как Inference, Validation, Training и Export.
Тип модели | Предварительно обученные веса | Поддерживаемые задачи | Инференс | Валидация | Обучение | Экспорт |
---|---|---|---|---|---|---|
SAM 2 tiny | sam2_t.pt | Сегментация экземпляров | ✅ | ❌ | ❌ | ❌ |
SAM 2 small | sam2_s.pt | Сегментация экземпляров | ✅ | ❌ | ❌ | ❌ |
Базовая модель SAM 2 | sam2_b.pt | Сегментация экземпляров | ✅ | ❌ | ❌ | ❌ |
SAM 2 large | sam2_l.pt | Сегментация экземпляров | ✅ | ❌ | ❌ | ❌ |
SAM 2.1 tiny | sam2.1_t.pt | Сегментация экземпляров | ✅ | ❌ | ❌ | ❌ |
SAM 2.1 small | sam2.1_s.pt | Сегментация экземпляров | ✅ | ❌ | ❌ | ❌ |
SAM 2.1 base | sam2.1_b.pt | Сегментация экземпляров | ✅ | ❌ | ❌ | ❌ |
SAM 2.1 large | sam2.1_l.pt | Сегментация экземпляров | ✅ | ❌ | ❌ | ❌ |
Примеры предсказаний SAM 2
SAM 2 можно использовать в широком спектре задач, включая редактирование видео в реальном времени, медицинскую визуализацию и автономные системы. Его способность сегментировать как статические, так и динамические визуальные данные делает его универсальным инструментом для исследователей и разработчиков.
Сегментация с запросами
Сегментация с запросами
Используйте подсказки для сегментации определенных объектов на изображениях или видео.
from ultralytics import SAM
# Load a model
model = SAM("sam2.1_b.pt")
# Display model information (optional)
model.info()
# Run inference with bboxes prompt
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])
# Run inference with single point
results = model(points=[900, 370], labels=[1])
# Run inference with multiple points
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])
# Run inference with multiple points prompt per object
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
# Run inference with negative points prompt
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
Сегментировать все
Сегментировать все
Сегментируйте все изображение или видеоконтент без конкретных запросов.
from ultralytics import SAM
# Load a model
model = SAM("sam2.1_b.pt")
# Display model information (optional)
model.info()
# Run inference
model("path/to/video.mp4")
# Run inference with a SAM 2 model
yolo predict model=sam2.1_b.pt source=path/to/video.mp4
Сегментация видео и отслеживание объектов
Сегментация видео
Сегментируйте весь видеоконтент с конкретными запросами и отслеживайте объекты.
from ultralytics.models.sam import SAM2VideoPredictor
# Create SAM2VideoPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="sam2_b.pt")
predictor = SAM2VideoPredictor(overrides=overrides)
# Run inference with single point
results = predictor(source="test.mp4", points=[920, 470], labels=[1])
# Run inference with multiple points
results = predictor(source="test.mp4", points=[[920, 470], [909, 138]], labels=[1, 1])
# Run inference with multiple points prompt per object
results = predictor(source="test.mp4", points=[[[920, 470], [909, 138]]], labels=[[1, 1]])
# Run inference with negative points prompt
results = predictor(source="test.mp4", points=[[[920, 470], [909, 138]]], labels=[[1, 0]])
- В этом примере показано, как SAM 2 можно использовать для сегментации всего содержимого изображения или видео, если не предоставлены никакие подсказки (ограничивающие рамки/точки/маски).
Сравнение SAM 2 и YOLO
Здесь мы сравниваем модели SAM 2 от Meta, включая самый маленький вариант SAM2-t, с самой маленькой моделью сегментации Ultralytics, YOLO11n-seg:
Модель | Размер (МБ) |
Параметры (M) |
Скорость (CPU) (мс/изобр.) |
---|---|---|---|
Meta SAM-b | 375 | 93.7 | 49401 |
Meta SAM2-b | 162 | 80.8 | 31901 |
Meta SAM2-t | 78.1 | 38.9 | 25997 |
MobileSAM | 40.7 | 10.1 | 25381 |
FastSAM-s с backbone YOLOv8 | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n-seg | 6.7 (в 11.7 раз меньше) | 3.4 (в 11.4 раза меньше) | 24.5 (в 1061 раз быстрее) |
Ultralytics YOLO11n-seg | 5.9 (в 13.2 раза меньше) | 2.9 (в 13.4 раза меньше) | 30.1 (в 864 раза быстрее) |
Это сравнение демонстрирует существенные различия в размерах и скорости моделей между вариантами SAM и моделями сегментации YOLO. В то время как SAM предоставляет уникальные возможности автоматической сегментации, модели YOLO, в частности YOLOv8n-seg и YOLO11n-seg, значительно меньше, быстрее и более эффективны с вычислительной точки зрения.
Тесты выполняются на Apple M4 Pro 2025 года с 24 ГБ ОЗУ с использованием torch==2.6.0
и ultralytics==8.3.90
. Чтобы воспроизвести этот тест:
Пример
from ultralytics import ASSETS, SAM, YOLO, FastSAM
# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.pt", "mobile_sam.pt"]:
model = SAM(file)
model.info()
model(ASSETS)
# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)
# Profile YOLO models
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
model = YOLO(file_name)
model.info()
model(ASSETS)
Автоматическая аннотация: эффективное создание наборов данных
Автоматическая аннотация — это мощная функция SAM 2, позволяющая пользователям быстро и точно генерировать наборы данных сегментации, используя предварительно обученные модели. Эта возможность особенно полезна для создания больших, высококачественных наборов данных без значительных ручных усилий.
Как выполнять автоматическую аннотацию с помощью SAM 2
Смотреть: Автоматическая аннотация с использованием модели Segment Anything 2 от Meta с помощью Ultralytics | Маркировка данных
Чтобы автоматически аннотировать свой набор данных с помощью SAM 2, следуйте этому примеру:
Пример автоматической аннотации
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam2_b.pt")
Аргумент | Тип | По умолчанию | Описание |
---|---|---|---|
data |
str |
обязательно | Путь к каталогу, содержащему целевые изображения для аннотации или сегментации. |
det_model |
str |
'yolo11x.pt' |
Путь к модели обнаружения объектов YOLO для начального обнаружения объектов. |
sam_model |
str |
'sam_b.pt' |
Путь к модели SAM для сегментации (поддерживает варианты SAM, SAM2 и mobile_sam). |
device |
str |
'' |
Вычислительное устройство (например, 'cuda:0', 'cpu' или '' для автоматического определения устройства). |
conf |
float |
0.25 |
Порог уверенности обнаружения YOLO для фильтрации слабых обнаружений. |
iou |
float |
0.45 |
Порог IoU для Non-Maximum Suppression, используемый для фильтрации перекрывающихся ограничивающих прямоугольников. |
imgsz |
int |
640 |
Размер входного изображения для изменения размера (должен быть кратным 32). |
max_det |
int |
300 |
Максимальное количество обнаружений на изображение для эффективности использования памяти. |
classes |
list[int] |
None |
Список индексов классов для обнаружения (например, [0, 1] для человека и велосипеда). |
output_dir |
str |
None |
Каталог для сохранения аннотаций (по умолчанию './labels' относительно пути к данным). |
Эта функция облегчает быстрое создание высококачественных наборов данных для сегментации, что идеально подходит для исследователей и разработчиков, стремящихся ускорить свои проекты.
Ограничения
Несмотря на свои сильные стороны, SAM 2 имеет определенные ограничения:
- Стабильность отслеживания: SAM 2 может потерять отслеживание объектов во время длительных последовательностей или значительных изменений точки обзора.
- Путаница объектов: Модель может иногда путать похожие объекты, особенно в переполненных сценах.
- Эффективность при работе с несколькими объектами: Эффективность сегментации снижается при одновременной обработке нескольких объектов из-за отсутствия межобъектной связи.
- Детализация Точности: Может упускать мелкие детали, особенно при работе с быстро движущимися объектами. Дополнительные запросы могут частично решить эту проблему, но временная гладкость не гарантируется.
Цитирование и благодарности
Если SAM 2 является важной частью вашей исследовательской или опытно-конструкторской работы, пожалуйста, сошлитесь на него, используя следующую ссылку:
@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},
year={2024}
}
Мы выражаем благодарность Meta AI за их вклад в AI-сообщество с этой новаторской моделью и набором данных.
Часто задаваемые вопросы
Что такое SAM 2 и как он улучшает оригинальную модель Segment Anything Model (SAM)?
SAM 2, преемник Segment Anything Model (SAM) от Meta, — это передовой инструмент, предназначенный для комплексной сегментации объектов как на изображениях, так и на видео. Он превосходно справляется со сложными визуальными данными благодаря унифицированной архитектуре модели с возможностью запросов, которая поддерживает обработку в реальном времени и обобщение zero-shot. SAM 2 предлагает несколько улучшений по сравнению с оригинальной SAM, включая:
- Унифицированная архитектура модели: Объединяет возможности сегментации изображений и видео в одной модели.
- Производительность в реальном времени: Обрабатывает примерно 44 кадра в секунду, что делает его подходящим для приложений, требующих немедленной обратной связи.
- Обобщение Zero-Shot: Сегментирует объекты, с которыми никогда раньше не сталкивался, что полезно в различных визуальных областях.
- Интерактивное уточнение: Позволяет пользователям итеративно уточнять результаты сегментации, предоставляя дополнительные подсказки.
- Расширенная обработка визуальных проблем: Управляет распространенными проблемами сегментации видео, такими как окклюзия и повторное появление объектов.
Для получения более подробной информации об архитектуре и возможностях SAM 2 изучите научную статью SAM 2.
Как я могу использовать SAM 2 для сегментации видео в реальном времени?
SAM 2 можно использовать для сегментации видео в реальном времени, используя его интерфейс с подсказками и возможности инференса в реальном времени. Вот основной пример:
Сегментация с запросами
Используйте подсказки для сегментации определенных объектов на изображениях или видео.
from ultralytics import SAM
# Load a model
model = SAM("sam2_b.pt")
# Display model information (optional)
model.info()
# Segment with bounding box prompt
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])
# Segment with point prompt
results = model("path/to/image.jpg", points=[150, 150], labels=[1])
Для получения более подробной информации об использовании обратитесь к разделу Как использовать SAM 2.
Какие наборы данных используются для обучения SAM 2 и как они повышают его производительность?
SAM 2 обучен на наборе данных SA-V, одном из крупнейших и наиболее разнообразных доступных наборов данных для сегментации видео. Набор данных SA-V включает в себя:
- 51 000+ видео: Снято в 47 странах, что обеспечивает широкий спектр реальных сценариев.
- 600 000+ аннотаций масок: Детализированные пространственно-временные аннотации масок, называемые "masklets", охватывающие целые объекты и их части.
- Масштаб набора данных: Содержит в 4,5 раза больше видео и в 53 раза больше аннотаций, чем предыдущие крупнейшие наборы данных, предлагая беспрецедентное разнообразие и сложность.
Этот обширный набор данных позволяет SAM 2 достичь превосходной производительности в основных тестах сегментации видео и улучшает его возможности обобщения без дополнительного обучения. Для получения дополнительной информации см. раздел SA-V Dataset.
Как SAM 2 обрабатывает окклюзии и повторные появления объектов в сегментации видео?
SAM 2 включает сложный механизм памяти для управления временными зависимостями и окклюзиями в видеоданных. Механизм памяти состоит из:
- Memory Encoder и Memory Bank: Хранит признаки из прошлых кадров.
- Memory Attention Module: Использует сохраненную информацию для поддержания согласованного отслеживания объектов во времени.
- Occlusion Head: Специально обрабатывает сценарии, в которых объекты не видны, прогнозируя вероятность окклюзии объекта.
Этот механизм обеспечивает непрерывность, даже когда объекты временно скрыты или выходят и снова входят в сцену. Для получения более подробной информации обратитесь к разделу Механизм памяти и обработка окклюзии.
Как SAM 2 соотносится с другими моделями сегментации, такими как YOLO11?
Модели SAM 2, такие как SAM2-t и SAM2-b от Meta, предлагают мощные возможности сегментации zero-shot, но значительно больше и медленнее по сравнению с моделями YOLO11. Например, YOLO11n-seg примерно в 13 раз меньше и более чем в 860 раз быстрее, чем SAM2-b. В то время как SAM 2 превосходен в универсальных сценариях сегментации на основе подсказок и zero-shot, YOLO11 оптимизирован для скорости, эффективности и приложений реального времени, что делает его более подходящим для развертывания в средах с ограниченными ресурсами.