Ultralytics YOLO27:
Get Started

SAM 2: модель сегментации всего 2#

Эволюция SAM

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

Inference with Segment Anything 2 In Colab

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

SAM 2 на платформе Ultralytics

Модели SAM 2.1 лежат в основе функции интеллектуальной разметки на платформе Ultralytics, где сегментация по кликам ускоряет разметку наборов данных. Подробности см. в руководстве по разметке.

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

Основные особенности#



Смотри: Как запустить инференс с SAM2 от Meta с помощью Ultralytics | Пошаговое руководство 🎉

Унифицированная архитектура модели#

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

Производительность в реальном времени#

Модель обеспечивает инференс в реальном времени, обрабатывая около 44 кадров в секунду. Поэтому SAM 2 подходит для приложений, которым нужна мгновенная обратная связь, например для видеомонтажа и дополненной реальности.

Zero-shot-генерализация#

SAM 2 может сегментировать объекты, с которыми раньше не сталкивалась, демонстрируя высокую способность к обобщению в режиме zero-shot. Это особенно полезно в разнообразных или меняющихся визуальных областях, где заранее заданные категории могут не охватывать все возможные объекты.

Интерактивное уточнение#

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

Расширенная обработка визуальных сложностей#

SAM 2 умеет справляться с распространёнными сложностями сегментации видео, такими как перекрытие объектов и их повторное появление. Механизм памяти отслеживает объекты между кадрами, обеспечивая непрерывность, даже когда объекты временно скрываются или покидают сцену, а затем возвращаются.

Чтобы подробнее узнать об архитектуре и возможностях SAM 2, ознакомься с исследовательской статьёй о SAM 2.

Производительность и технические характеристики#

SAM 2 задаёт новую планку в этой области и превосходит предыдущие модели по различным метрикам:

ПоказательSAM 2Предыдущий SOTA
Интерактивная сегментация видеоЛучший результат-
Требуется взаимодействий с человекомВ 3 раза меньшеБазовый уровень
Точность сегментации изображенийВышеSAM
Скорость инференсаВ 6 раз быстрееSAM

Архитектура модели#

Основные компоненты#

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

Схема архитектуры SAM 2

Механизм памяти и обработка перекрытий#

Механизм памяти позволяет SAM 2 учитывать временные зависимости и перекрытия в видеоданных. По мере движения и взаимодействия объектов SAM 2 записывает их признаки в банк памяти. Когда объект перекрывается, модель может использовать эти данные, чтобы предсказать его положение и внешний вид после повторного появления. Специальная голова для обработки перекрытий работает со случаями, когда объекты не видны, и предсказывает вероятность того, что объект перекрыт.

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

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

Датасет SA-V#

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

  • Более 51 000 видео: снятых в 47 странах, что позволяет охватить широкий спектр сценариев из реального мира.
  • Более 600 000 аннотаций масок: подробные пространственно-временные аннотации масок, называемые «масклетами», охватывают целые объекты и их части.
  • Масштаб датасета: в нём в 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

Как использовать SAM 2: универсальная сегментация изображений и видео#

В таблице ниже указаны доступные модели SAM 2, их предварительно обученные веса, поддерживаемые задачи и совместимость с различными режимами работы, такими как инференс, валидация, обучение и экспорт.

Тип моделиПредобученные весаПоддерживаемые задачиОбучениеВалидацияИнференсЭкспорт
SAM 2 tinysam2_t.ptСегментация экземпляров❌❌✅❌
SAM 2 smallsam2_s.ptСегментация экземпляров❌❌✅❌
SAM 2 basesam2_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 можно применять в самых разных задачах, включая редактирование видео в реальном времени, анализ медицинских изображений и автономные системы. Благодаря способности сегментировать статические и динамические визуальные данные эта модель подходит для самых разных задач исследователей и разработчиков.

Сегментация с помощью подсказок#

Сегментация с помощью подсказок

Используй подсказки, чтобы сегментировать конкретные объекты на изображениях или видео.

from ultralytics import SAM

# Загрузить модель
model = SAM("sam2.1_b.pt")

# Показать информацию о модели (необязательно)
model.info()

# Выполнить инференс с подсказкой в виде bboxes
results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])

# Выполнить инференс с одной точкой
results = model(points=[900, 370], labels=[1])

# Выполнить инференс с несколькими точками
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Выполнить инференс с подсказкой в виде нескольких точек для каждого объекта
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Выполнить инференс с подсказкой в виде отрицательных точек
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

Сегментировать всё#

Сегментировать всё

Сегментируй всё содержимое изображения или видео без специальных подсказок.

from ultralytics import SAM

# Загрузить модель
model = SAM("sam2.1_b.pt")

# Показать информацию о модели (необязательно)
model.info()

# Выполнить инференс
model("path/to/video.mp4")
  • В этом примере показано, как использовать SAM 2 для сегментации всего содержимого изображения или видео, если не заданы подсказки (bboxes/точки/маски).

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

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

Сегментируй всё содержимое видео с помощью специальных подсказок и отслеживай объекты.

from ultralytics.models.sam import SAM2VideoPredictor

# Create SAM2VideoPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "sam2_b.pt"}
predictor = SAM2VideoPredictor(overrides=overrides)

# Выполнить инференс с одной точкой
results = predictor(source="test.mp4", points=[920, 470], labels=[1])

# Выполнить инференс с несколькими точками
results = predictor(source="test.mp4", points=[[920, 470], [909, 138]], labels=[1, 1])

# Выполнить инференс с подсказкой в виде нескольких точек для каждого объекта
results = predictor(source="test.mp4", points=[[[920, 470], [909, 138]]], labels=[[1, 1]])

# Выполнить инференс с подсказкой в виде отрицательных точек
results = predictor(source="test.mp4", points=[[[920, 470], [909, 138]]], labels=[[1, 0]])

Динамическая интерактивная сегментация и отслеживание#

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

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

Основные особенности#

Это решение предлагает три важных улучшения:

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

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

  • Гибкие подсказки: принимает в качестве подсказок ограничивающие рамки, точки и маски
  • Управление банком памяти: поддерживает динамический банк памяти для хранения состояний объектов между кадрами
  • Отслеживание нескольких объектов: позволяет одновременно отслеживать несколько объектов, каждому из которых присваивается собственный ID
  • Обновления в реальном времени: позволяет добавлять подсказки во время инференса, не обрабатывая предыдущие кадры повторно
  • Обработка отдельных изображений: обрабатывай отдельные изображения с общим контекстом памяти, чтобы обеспечивать согласованность объектов между изображениями
Динамическое добавление объектов
from ultralytics.models.sam import SAM2DynamicInteractivePredictor

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

# Задать категорию с помощью подсказки в виде рамки
predictor(source="image1.jpg", bboxes=[[100, 100, 200, 200]], obj_ids=[0], update_memory=True)

# Найти этот конкретный объект на новом изображении
results = predictor(source="image2.jpg")

# Добавить новую категорию с новым ID объекта
results = predictor(
    source="image4.jpg",
    bboxes=[[300, 300, 400, 400]],  # Новый объект
    obj_ids=[1],  # Новый ID объекта
    update_memory=True,  # Добавить в память
)
# Выполнить инференс
results = predictor(source="image5.jpg")

# Добавить уточняющие промпты в ту же категорию, чтобы повысить точность
# Это помогает, когда внешний вид объекта значительно меняется
results = predictor(
    source="image6.jpg",
    points=[[150, 150]],  # Точка уточнения
    labels=[1],  # Положительная точка
    obj_ids=[1],  # Тот же ID объекта
    update_memory=True,  # Обновить память новыми данными
)
# Выполнить инференс на новом изображении
results = predictor(source="image7.jpg")
Примечание

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

Аргументы#

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

Варианты использования#

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

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

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

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

МодельРазмер
(МБ)
Параметры
(M)
Скорость (CPU)
(мс/изобр.)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s с бэкбоном YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (в 11.0 раз меньше)3.4 (в 11.4 раза меньше)24.8 (в 945 раз быстрее)
Ultralytics YOLO11n-seg6.2 (в 12.6 раза меньше)2.9 (в 13.4 раза меньше)24.3 (в 964 раза быстрее)
Ultralytics YOLO26n-seg6.7 (в 11.7 раза меньше)2.7 (в 14.4 раза меньше)25.2 (в 930 раз быстрее)

Это сравнение показывает существенные различия в размере и скорости моделей вариантов SAM и моделей сегментации YOLO. Хотя SAM предоставляет уникальные возможности автоматической сегментации, модели YOLO, особенно YOLOv8n-seg, YOLO11n-seg и YOLO26n-seg, значительно компактнее, быстрее и эффективнее используют вычислительные ресурсы.

Скорость SAM измерялась с помощью PyTorch, скорость YOLO — с помощью ONNX Runtime. Тесты проводились на Apple M4 Air 2025 года с 16 ГБ оперативной памяти с использованием torch==2.10.0, ultralytics==8.4.31 и onnxruntime==1.24.4. Чтобы воспроизвести этот тест:

Пример
from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Профилировать 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)

# Профилирование FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Профилировать модели YOLO (ONNX)
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt", "yolo26n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    onnx_path = model.export(format="onnx", dynamic=True, nms=False)  # Голова YOLO26 без NMS; ничего не делает для YOLOv8/YOLO11
    model = YOLO(onnx_path)
    model(ASSETS)

Автоматическое аннотирование: эффективное создание наборов данных#

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

Как автоматически аннотировать данные с помощью SAM 2#



Смотри: Автоматическая разметка с моделью Meta Segment Anything 2 с помощью Ultralytics | Разметка данных

Чтобы автоматически аннотировать набор данных с помощью SAM 2, воспользуйся этим примером:

Пример автоматического аннотирования
from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam2_b.pt")
АргументТипПо умолчаниюОписание
datastrобязательноПуть к каталогу с изображениями, которые нужно аннотировать или сегментировать.
det_modelstr'yolo26x.pt'Путь к модели обнаружения YOLO для первоначального обнаружения объектов.
sam_modelstr'sam_b.pt'Путь к модели SAM для сегментации (поддерживаются веса SAM, SAM 2, MobileSAM и SAM 3).
devicestr''Вычислительное устройство (например, 'cuda:0', 'cpu' или '' для автоматического определения устройства).
conffloat0.25Порог уверенности модели обнаружения YOLO для фильтрации слабых детекций.
ioufloat0.45Порог IoU для подавления немаксимумов, чтобы отфильтровать перекрывающиеся рамки.
imgszint640Размер входных изображений (при необходимости округляется вверх до ближайшего числа, кратного 32).
max_detint300Максимальное число детекций на изображение для экономии памяти.
classeslist[int]NoneСписок индексов классов для обнаружения (например, [0, 1] для человека и велосипеда).
output_dirstrNoneКаталог для сохранения аннотаций (по умолчанию: соседний каталог <data>_auto_annotate_labels).

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

Ограничения#

Несмотря на свои преимущества, SAM 2 имеет некоторые ограничения:

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

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

Если 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 за вклад в развитие сообщества ИИ, сделанный благодаря этой новаторской модели и набору данных.

Часто задаваемые вопросы#

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

    • Единая архитектура модели: объединяет возможности сегментации изображений и видео в одной модели.
    • Работа в реальном времени: обрабатывает около 44 кадров в секунду и подходит для приложений, требующих немедленной обратной связи.
    • Обобщение в режиме zero-shot: сегментирует объекты, с которыми модель раньше не сталкивалась, что полезно в различных визуальных областях.
    • Интерактивное уточнение: позволяет итеративно уточнять результаты сегментации с помощью дополнительных промптов.
    • Расширенная обработка визуальных сложностей: справляется с типичными задачами сегментации видео, например с перекрытием объектов и их повторным появлением.

    Подробнее об архитектуре и возможностях SAM 2 читай в исследовательской статье о SAM 2.

  • SAM 2 можно использовать для сегментации видео в реальном времени благодаря интерфейсу с поддержкой промптов и возможностям инференса в реальном времени. Вот простой пример:

    Сегментация с помощью подсказок

    Используй подсказки, чтобы сегментировать конкретные объекты на изображениях или видео.

    from ultralytics import SAM
    
    # Загрузить модель
    model = SAM("sam2_b.pt")
    
    # Показать информацию о модели (необязательно)
    model.info()
    
    # Сегментация с промптом в виде ограничивающей рамки
    results = model("path/to/image.jpg", bboxes=[100, 100, 200, 200])
    
    # Сегментация с промптом в виде точки
    results = model("path/to/image.jpg", points=[150, 150], labels=[1])

    Подробные инструкции смотри в разделе Как использовать SAM 2.

  • SAM 2 обучается на наборе данных SA-V — одном из крупнейших и наиболее разнообразных доступных наборов данных для сегментации видео. В набор данных SA-V входят:

    • Более 51 000 видео: снятых в 47 странах, что позволяет охватить широкий спектр сценариев из реального мира.
    • Более 600 000 аннотаций масок: подробные пространственно-временные аннотации масок, называемые «масклетами», охватывают целые объекты и их части.
    • Масштаб набора данных: в нем в 4.5 раза больше видео и в 53 раза больше аннотаций, чем в крупнейших предыдущих наборах данных, что обеспечивает беспрецедентное разнообразие и сложность.

    Этот обширный набор данных позволяет SAM 2 показывать превосходные результаты на основных бенчмарках сегментации видео и повышает ее способность обобщать знания в режиме zero-shot. Подробнее смотри в разделе Набор данных SA-V.

  • В SAM 2 предусмотрен сложный механизм памяти для обработки временных зависимостей и перекрытий в видеоданных. Механизм памяти состоит из следующих компонентов:

    • Кодировщик памяти и банк памяти: сохраняют признаки из предыдущих кадров.
    • Модуль внимания к памяти: использует сохраненную информацию, чтобы последовательно отслеживать объекты с течением времени.
    • Голова обработки перекрытий: специально обрабатывает ситуации, когда объекты не видны, и прогнозирует вероятность перекрытия объекта.

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

  • Модели SAM 2, такие как SAM2-t и SAM2-b от Meta, обеспечивают мощную сегментацию в режиме zero-shot, но значительно превосходят модели YOLO по размеру и уступают им в скорости. Например, YOLO26n-seg примерно в 24 раза меньше и более чем в 1145 раз быстрее, чем SAM2-b на CPU. SAM 2 отлично подходит для универсальной сегментации на основе промптов и в режиме zero-shot, а YOLO26 оптимизирована для скорости, эффективности и приложений реального времени. Благодаря сквозному инференсу без NMS YOLO26 лучше подходит для развертывания в условиях ограниченных ресурсов.

Комментарии