Перейти к содержанию

SAM 2: Segment Anything Model 2

Эволюция SAM

SAM 2 развивает оригинальную модель SAM, добавляя возможности сегментации видео. Информацию о следующем поколении модели с расширенной памятью и 2-кратным ускорением обработки можно найти в разделе SAM 3.

Инференс с Segment Anything 2 в Colab

SAM 2, преемник Segment Anything Model (SAM) от Meta, — это передовой инструмент, предназначенный для комплексной сегментации объектов как на изображениях, так и на видео. Он превосходно справляется со сложными визуальными данными благодаря унифицированной архитектуре модели с возможностью запросов, которая поддерживает обработку в реальном времени и обобщение zero-shot.

Примеры результатов SAM 2

Основные характеристики



Смотреть: Как запустить вывод с помощью SAM2 от Meta, используя 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 записывает их характеристики в банк памяти. Когда объект становится окклюдированным, модель может полагаться на эту память, чтобы предсказать его положение и внешний вид, когда он снова появится. Голова окклюзии специально обрабатывает сценарии, в которых объекты не видны, предсказывая вероятность окклюзии объекта.

Разрешение неоднозначности нескольких масок

В ситуациях с неоднозначностью (например, перекрывающиеся объекты) SAM 2 может генерировать несколько прогнозов масок. Эта функция имеет решающее значение для точного представления сложных сцен, где одной маски может быть недостаточно для описания нюансов сцены.

Датасет SA-V

Набор данных SA-V, разработанный для обучения SAM 2, является одним из самых больших и разнообразных наборов данных для сегментации видео. Он включает в себя:

  • 51 000+ видео: Снято в 47 странах, что обеспечивает широкий спектр реальных сценариев.
  • 600 000+ аннотаций масок: Детализированные пространственно-временные аннотации масок, называемые "masklets", охватывающие целые объекты и их части.
  • Масштаб набора данных: Он содержит в 4,5 раза больше видео и в 53 раза больше аннотаций, чем предыдущие крупнейшие наборы данных, предлагая беспрецедентное разнообразие и сложность.

Оценка производительности

Сегментация видеообъектов

SAM 2 продемонстрировал превосходную производительность по основным тестам сегментации видео:

Набор данныхJ&FJF
DAVIS 201782.579.885.2
YouTube-VOS81.278.983.5

Интерактивная сегментация

В задачах интерактивной сегментации SAM 2 показывает значительную эффективность и точность:

Набор данныхNoC@90AUC
DAVIS Interactive1.540.872

Установка

Чтобы установить SAM 2, используйте следующую команду. Все модели SAM 2 будут автоматически загружены при первом использовании.

pip install ultralytics

Как использовать SAM2: Универсальность в сегментации изображений и видео

В следующей таблице подробно описаны доступные модели SAM 2, их предварительно обученные веса, поддерживаемые задачи и совместимость с различными режимами работы, такими как Inference, Validation, Training и Export.

Тип моделиПредварительно обученные весаПоддерживаемые задачиИнференсВалидацияОбучениеЭкспорт
SAM 2 tinysam2_t.ptСегментация экземпляров
SAM 2 smallsam2_s.ptСегментация экземпляров
Базовая модель SAM 2sam2_b.ptСегментация экземпляров
SAM 2 largesam2_l.ptСегментация экземпляров
SAM 2.1 tinysam2.1_t.ptСегментация экземпляров
SAM 2.1 smallsam2.1_s.ptСегментация экземпляров
SAM 2.1 basesam2.1_b.ptСегментация экземпляров
SAM 2.1 largesam2.1_l.ptСегментация экземпляров

Примеры предсказаний SAM 2

SAM 2 можно использовать в широком спектре задач, включая редактирование видео в реальном времени, медицинскую визуализацию и автономные системы. Его способность сегментировать как статические, так и динамические визуальные данные делает его универсальным инструментом для исследователей и разработчиков.

Сегментация с запросами

Сегментация с запросами

Используйте подсказки для segment-ации определенных объектов на изображениях или видео.

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

Сегментация видео и отслеживание объектов

Сегментация видео

Выполнить segment всего видеоконтента с определенными запросами и track объектов.

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 можно использовать для segment всего содержимого изображения или видео, если не предоставлены запросы (bboxes/точки/маски).

Динамическая интерактивная segment и track

SAM2DynamicInteractivePredictor — это продвинутое расширение SAM2, не требующее обучения, которое обеспечивает динамическое взаимодействие с несколькими кадрами и возможности непрерывного обучения. Этот предиктор поддерживает обновления подсказок в реальном времени и управление памятью для повышения производительности track-кинга в последовательности изображений. По сравнению с оригинальным SAM2, SAM2DynamicInteractivePredictor перестраивает поток логического вывода, чтобы наилучшим образом использовать предварительно обученные модели SAM2 без необходимости дополнительного обучения.

Примеры результатов SAM 2

Основные характеристики

Он предлагает три существенных улучшения:

  1. Динамическое взаимодействие: Добавляйте новые подсказки для объединения / неотслеживаемых новых экземпляров в следующих кадрах в любое время во время обработки видео
  2. Непрерывное обучение: Добавляйте новые подсказки для существующих экземпляров, чтобы улучшить производительность модели с течением времени
  3. Независимая поддержка нескольких изображений: Обработка нескольких независимых изображений (не обязательно из видеопоследовательности) с совместным использованием памяти и отслеживанием объектов между изображениями

Основные возможности

  • Гибкость подсказок: Принимает ограничивающие рамки, точки и маски в качестве подсказок
  • Управление банком памяти: Поддерживает динамический банк памяти для хранения состояний объектов между кадрами
  • Multi-Object Tracking: Поддерживает track нескольких объектов одновременно с индивидуальными идентификаторами объектов
  • Обновления в реальном времени: Позволяет добавлять новые подсказки во время вывода без повторной обработки предыдущих кадров
  • Независимая обработка изображений: Обработка отдельных изображений с общим контекстом памяти для согласованности объектов между изображениями

Динамическое добавление объектов

from ultralytics.models.sam import SAM2DynamicInteractivePredictor

# Create SAM2DynamicInteractivePredictor
overrides = dict(conf=0.01, task="segment", mode="predict", imgsz=1024, model="sam2_t.pt", save=False)
predictor = SAM2DynamicInteractivePredictor(overrides=overrides, max_obj_num=10)

# Define a category by box prompt
predictor(source="image1.jpg", bboxes=[[100, 100, 200, 200]], obj_ids=[0], update_memory=True)

# Detect this particular object in a new image
results = predictor(source="image2.jpg")

# Add new category with a new object ID
results = predictor(
    source="image4.jpg",
    bboxes=[[300, 300, 400, 400]],  # New object
    obj_ids=[1],  # New object ID
    update_memory=True,  # Add to memory
)
# Perform inference
results = predictor(source="image5.jpg")

# Add refinement prompts to the same category to boost performance
# This helps when object appearance changes significantly
results = predictor(
    source="image6.jpg",
    points=[[150, 150]],  # Refinement point
    labels=[1],  # Positive point
    obj_ids=[1],  # Same object ID
    update_memory=True,  # Update memory with new information
)
# Perform inference on new image
results = predictor(source="image7.jpg")

Примечание

Параметр SAM2DynamicInteractivePredictor предназначен для работы с моделями SAM2 и поддерживает добавление/уточнение категорий всеми подсказки для ограничивающей рамки/точки/маски изначально поддерживается в SAM2. Это особенно полезно в сценариях, где объекты появляются или изменяются с течением времени, например, при аннотации видео или задачах интерактивного редактирования.

Аргументы

ИмяЗначение по умолчаниюТип данныхОписание
max_obj_num3intПредустановленное максимальное количество категорий
update_memoryFalseboolОбновлять ли память новыми запросами
obj_idsNoneList[int]Список идентификаторов объектов, соответствующих запросам

Случаи использования

SAM2DynamicInteractivePredictor идеально подходит для:

  • Рабочие процессы аннотации видео, где новые объекты появляются во время последовательности
  • Интерактивное редактирование видео, требующее добавления и уточнения объектов в реальном времени
  • Приложения для видеонаблюдения с потребностями в динамическом object tracking
  • Медицинская визуализация для отслеживания анатомических структур во временных рядах
  • Автономные системы, требующие адаптивного обнаружения и track объектов
  • Наборы данных с несколькими изображениями для согласованной segment объектов на независимых изображениях
  • Анализ коллекции изображений, где необходимо track объекты в разных сценах
  • Сегментация между доменами с использованием памяти из различных контекстов изображений
  • Полуавтоматическая аннотация для эффективного создания набора данных с минимальным ручным вмешательством

Сравнение SAM 2 и YOLO

Здесь мы сравниваем модели SAM 2 от Meta, включая самый маленький вариант SAM2-t, с самой маленькой моделью segment от Ultralytics, YOLO11n-seg:

МодельРазмер
(МБ)
Параметры
(M)
Скорость (CPU)
(мс/изобр.)
Meta SAM-b37593.749401
Meta SAM2-b16280.831901
Meta SAM2-t78.138.925997
MobileSAM40.710.125381
FastSAM-s с backbone YOLOv823.711.855.9
Ultralytics YOLOv8n-seg6.7 (в 11.7 раз меньше)3.4 (в 11.4 раза меньше)24.5 (в 1061 раз быстрее)
Ultralytics YOLO11n-seg5.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")
АргументТипПо умолчаниюОписание
datastrобязательноПуть к каталогу, содержащему целевые изображения для аннотации или сегментации.
det_modelstr'yolo11x.pt'Путь к модели обнаружения объектов YOLO для начального обнаружения объектов.
sam_modelstr'sam_b.pt'Путь к модели SAM для segment-ции (поддерживает варианты SAM, SAM2 и mobile_sam).
devicestr''Вычислительное устройство (например, 'cuda:0', 'cpu' или '' для автоматического определения устройства).
conffloat0.25Порог уверенности обнаружения YOLO для фильтрации слабых обнаружений.
ioufloat0.45Порог IoU для немаксимального подавления (Non-Maximum Suppression) для фильтрации перекрывающихся прямоугольников.
imgszint640Размер входного изображения для изменения размера (должен быть кратным 32).
max_detint300Максимальное количество обнаружений на изображение для эффективности использования памяти.
classeslist[int]NoneСписок индексов классов для detect (например, [0, 1] для человека и велосипеда).
output_dirstrNoneКаталог для сохранения аннотаций (по умолчанию './labels' относительно пути к данным).

Эта функция облегчает быстрое создание высококачественных наборов данных для сегментации, что идеально подходит для исследователей и разработчиков, стремящихся ускорить свои проекты.

Ограничения

Несмотря на свои сильные стороны, SAM 2 имеет определенные ограничения:

  • Стабильность отслеживания: SAM 2 может потерять track объектов во время расширенных последовательностей или значительных изменений точки обзора.
  • Путаница объектов: Модель может иногда путать похожие объекты, особенно в переполненных сценах.
  • Эффективность при работе с несколькими объектами: Эффективность сегментации снижается при одновременной обработке нескольких объектов из-за отсутствия межобъектной связи.
  • Детализация Точности: Может упускать мелкие детали, особенно при работе с быстро движущимися объектами. Дополнительные запросы могут частично решить эту проблему, но временная гладкость не гарантируется.

Цитирование и благодарности

Если 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 можно использовать для сегментации видео в реальном времени, используя его интерфейс с подсказками и возможности инференса в реальном времени. Вот основной пример:

Сегментация с запросами

Используйте подсказки для segment-ации определенных объектов на изображениях или видео.

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, такие как Meta SAM2-t и SAM2-b, предлагают мощные возможности zero-shot сегментации, но значительно больше и медленнее по сравнению с моделями YOLO11. Например, YOLO11n-seg примерно в 13 раз меньше и более чем в 860 раз быстрее, чем SAM2-b. В то время как SAM 2 превосходен в универсальных сценариях сегментации на основе подсказок и zero-shot, YOLO11 оптимизирован для скорости, эффективности и приложений реального времени, что делает его более подходящим для развертывания в средах с ограниченными ресурсами.



📅 Создано 1 год назад ✏️ Обновлено 25 дней назад
RizwanMunawarglenn-jocherLaughing-qY-T-GShuaiLYUjoshua-deanMatthewNoyce

Комментарии