Фаза 04 · урок 24

SAM 3 и сегментация с открытым словарём

Цель урока: SAM 2023 года был моделью только с визуальными запросами: вы щёлкаете по точке или рисуете рамку, и она возвращает маску. Для задачи «покажи мне все апельсины на этой фотографии» нужен был детектор (Grounding DINO), создающий рамки, а…

Текущий релиз AlexBred.com: первые 100 уроков русскоязычной программы.

Курс
AI Engineering from Scratch
Фаза
Компьютерное зрение
Чтение
13 мин.
Проверено
Содержание урока
  1. Цели обучения
  2. Проблема
  3. Концепция
  4. Три поколения
  5. Сегментация концептов по запросу
  6. Ключевые компоненты архитектуры
  7. Обучение в масштабе
  8. SAM 3.1 Object Multiplex
  9. Когда Grounded SAM всё ещё важен в 2026 году
  10. YOLO-World и SAM 3
  11. Эффективность SAM-MI
  12. Формат вывода трёх моделей
  13. Соберите
  14. Шаг 1: Построение запроса
  15. Шаг 2: Вспомогательные функции постобработки
  16. Шаг 3: Унифицированный интерфейс сегментации с открытым словарём
  17. Шаг 4: Использование SAM 3 через Hugging Face (справка)
  18. Шаг 5: Измерьте, что Grounded SAM 2 давал бесплатно
  19. Используйте
  20. Поставьте в продакшен
  21. Упражнения
  22. Ключевые термины
  23. Дополнительные материалы

Дайте модели текстовый запрос и изображение — и получите маски для каждого подходящего объекта. В SAM 3 это выполняется за один прямой проход.

Тип: Используйте + соберите Языки: Python Предварительные требования: Фаза 4, урок 07 (U-Net), фаза 4, урок 08 (Mask R-CNN), фаза 4, урок 18 (CLIP) Время: ~60 минут

Цели обучения

  • Различать SAM (только визуальные запросы), Grounded SAM / SAM 2 (детектор + SAM) и SAM 3 (нативные текстовые запросы через Promptable Concept Segmentation)
  • Объяснять архитектуру SAM 3: общий backbone + детектор изображений + видеотрекер на основе памяти + голова присутствия + развязанная конструкция детектора и трекера
  • Использовать интеграцию SAM 3 в Hugging Face transformers для обнаружения, сегментации и отслеживания видео по текстовому запросу
  • Выбирать между SAM 3, Grounded SAM 2, YOLO-World и SAM-MI с учётом задержки, сложности концепта и целевой среды развёртывания

Проблема

SAM 2023 года был моделью только с визуальными запросами: вы щёлкаете по точке или рисуете рамку, и она возвращает маску. Для задачи «покажи мне все апельсины на этой фотографии» нужен был детектор (Grounding DINO), создающий рамки, а затем SAM, сегментирующий каждый объект. Grounded SAM превратил это в конвейер, но он оставался каскадом из двух замороженных моделей с неизбежным накоплением ошибок.

SAM 3 (Meta, ноябрь 2025 года, ICLR 2026) объединил этот каскад. Он принимает в качестве запроса короткую именную группу или образец изображения и возвращает все подходящие маски и идентификаторы экземпляров за один прямой проход. Это называется Promptable Concept Segmentation (PCS) — сегментацией концептов по запросу. В сочетании с обновлением Object Multiplex от марта 2026 года (SAM 3.1) модель эффективно отслеживает в видео множество экземпляров одного и того же концепта.

Этот урок посвящён структурному сдвигу, который это представляет. Двумерная сегментация, обнаружение и связывание текста с изображением объединились в одной модели. Производственный вопрос теперь звучит не «какой конвейер мне собрать», а «какая модель с запросами обработает мой сценарий от начала до конца».

Концепция

Три поколения

Диаграмма к уроку «SAM 3 и сегментация с открытым словарём»

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

«Запрос-концепт» — это короткая именная группа ("yellow school bus", "striped red umbrella", "hand holding a mug") или образец изображения. Модель возвращает маски сегментации для каждого экземпляра изображения, соответствующего концепту, а также уникальный идентификатор экземпляра для каждого совпадения.

От классического SAM с визуальными запросами это отличается по трём направлениям:

  1. Не нужны отдельные запросы для каждого экземпляра: один текстовый запрос возвращает все совпадения.
  2. Открытый словарь: концептом может быть всё, что можно описать естественным языком.
  3. Модель возвращает несколько экземпляров сразу, а не одну маску на запрос.

Ключевые компоненты архитектуры

  • Общий backbone — одно ViT обрабатывает изображение. И голова детектора, и трекер на основе памяти читают его представления.
  • Голова присутствия — предсказывает, присутствует ли вообще концепт в изображении. Она отделяет вопрос «есть ли это здесь?» от вопроса «где это?». Это снижает число ложноположительных результатов для отсутствующих концептов.
  • Развязанные детектор и трекер — обнаружение на уровне изображения и отслеживание на уровне видео имеют отдельные головы, поэтому не мешают друг другу.
  • Банк памяти — хранит признаки каждого экземпляра между кадрами для отслеживания в видео (тот же механизм, который применял SAM 2).

Обучение в масштабе

SAM 3 обучали на 4 миллионах уникальных концептов, созданных механизмом сбора данных, который итеративно размечает и исправляет данные с помощью ИИ и проверки людьми. Новый бенчмарк SA-CO содержит 270 тысяч уникальных концептов — в 50 раз больше прежних бенчмарков. На SA-CO SAM 3 достигает 75–80% человеческого результата и вдвое превосходит существующие системы в PCS для изображений и видео.

SAM 3.1 Object Multiplex

Обновление марта 2026 года: Object Multiplex вводит механизм общей памяти для совместного отслеживания множества экземпляров одного концепта одновременно. Раньше отслеживание N экземпляров означало N отдельных банков памяти. Multiplex сводит это к одной общей памяти с запросами для каждого экземпляра. Результат — существенно более быстрое отслеживание нескольких объектов без потери точности.

Когда Grounded SAM всё ещё важен в 2026 году

  • Когда нужен конкретный заменяемый детектор с открытым словарём (DINO-X, Florence-2).
  • Когда лицензия SAM 3 (с ограниченным доступом на HF) оказывается препятствием.
  • Когда нужно больше контроля над порогом детектора, чем предоставляет SAM 3.
  • Для исследовательской работы или абляций компонента детектора.

Модульные конвейеры всё ещё имеют своё место. Но для большинства производственных задач SAM 3 — более простой ответ.

YOLO-World и SAM 3

  • YOLO-World — только детектор с открытым словарём (без масок). Работает в реальном времени. Лучше всего, когда нужны рамки с высокой частотой кадров.
  • SAM 3 — полная сегментация и отслеживание. Медленнее, но даёт более богатый результат.

Практическое разделение: YOLO-World — для быстрых конвейеров только с обнаружением (навигация роботов, оперативные панели), SAM 3 — для всего, что требует масок или отслеживания.

Эффективность SAM-MI

SAM-MI (2025–2026) устраняет узкое место декодера SAM. Ключевые идеи:

  • Разреженные точечные запросы — использует несколько удачно выбранных точек вместо плотных запросов; уменьшает число вызовов декодера на 96%.
  • Поверхностная агрегация масок — объединяет грубые предсказания масок в одну более чёткую маску.
  • Развязанная инъекция масок — декодер получает заранее вычисленные признаки масок вместо повторного запуска.

Результат: примерно 1,6-кратное ускорение относительно Grounded-SAM на бенчмарках с открытым словарём.

Формат вывода трёх моделей

Все они возвращают одну и ту же общую структуру (рамки + метки + оценки + маски + ID), что полезно: вашему последующему конвейеру не приходится ветвиться в зависимости от запущенной модели.

Соберите

Шаг 1: Построение запроса

Соберите вспомогательную функцию, которая превращает пользовательское предложение в список запросов-концептов для SAM 3. Это граница, на которой «то, что ввёл пользователь» встречается с «тем, что потребляет модель».

def split_concepts(sentence):
    """
    Heuristic splitter for multi-concept prompts.
    Returns list of short noun phrases.
    """
    for sep in [",", ";", "and", "or", "&"]:
        if sep in sentence:
            parts = [p.strip() for p in sentence.replace("and ", ",").split(",")]
            return [p for p in parts if p]
    return [sentence.strip()]

print(split_concepts("cats, dogs and balloons"))

SAM 3 принимает один концепт на прямой проход; для запросов с несколькими концептами перебирайте их в цикле или объединяйте в пакет.

Шаг 2: Вспомогательные функции постобработки

Преобразуйте сырые выходы SAM 3 в чистый список обнаружений, соответствующий контракту конвейера из урока 16 фазы 4.

from dataclasses import dataclass
from typing import List

@dataclass
class ConceptDetection:
    concept: str
    instance_id: int
    box: tuple          # (x1, y1, x2, y2)
    score: float
    mask_rle: str       # run-length encoded


def rle_encode(binary_mask):
    flat = binary_mask.flatten().astype("uint8")
    runs = []
    prev, count = flat[0], 0
    for v in flat:
        if v == prev:
            count += 1
        else:
            runs.append((int(prev), count))
            prev, count = v, 1
    runs.append((int(prev), count))
    return ";".join(f"{v}x{c}" for v, c in runs)

RLE сохраняет небольшой размер полезной нагрузки ответа даже для множества масок высокого разрешения. Этот же формат подходит для SAM 2, SAM 3 и Grounded SAM 2.

Шаг 3: Унифицированный интерфейс сегментации с открытым словарём

Скройте любой имеющийся бэкенд (SAM 3, Grounded SAM 2, YOLO-World + SAM 2) за единым методом. Последующий код не меняется при смене бэкенда.

from abc import ABC, abstractmethod
import numpy as np

class OpenVocabSeg(ABC):
    @abstractmethod
    def detect(self, image: np.ndarray, concept: str) -> List[ConceptDetection]:
        ...


class StubOpenVocabSeg(OpenVocabSeg):
    """
    Deterministic stub used for pipeline testing when real models are not loaded.
    """
    def detect(self, image, concept):
        h, w = image.shape[:2]
        return [
            ConceptDetection(
                concept=concept,
                instance_id=0,
                box=(w * 0.2, h * 0.3, w * 0.5, h * 0.8),
                score=0.89,
                mask_rle="0x100;1x50;0x200",
            ),
            ConceptDetection(
                concept=concept,
                instance_id=1,
                box=(w * 0.55, h * 0.25, w * 0.85, h * 0.75),
                score=0.74,
                mask_rle="0x80;1x40;0x220",
            ),
        ]

Настоящий подкласс SAM3OpenVocabSeg оборачивал бы transformers.Sam3Model и Sam3Processor.

Шаг 4: Использование SAM 3 через Hugging Face (справка)

Для фактической модели используется интеграция transformers:

from transformers import Sam3Processor, Sam3Model
import torch

processor = Sam3Processor.from_pretrained("facebook/sam3")
model = Sam3Model.from_pretrained("facebook/sam3").eval()

inputs = processor(images=pil_image, return_tensors="pt")
inputs = processor.set_text_prompt(inputs, "yellow school bus")

with torch.no_grad():
    outputs = model(**inputs)

masks = processor.post_process_masks(
    outputs.masks, inputs.original_sizes, inputs.reshaped_input_sizes
)
boxes = outputs.boxes
scores = outputs.scores

Один запрос — все совпадения возвращаются одним вызовом.

Шаг 5: Измерьте, что Grounded SAM 2 давал бесплатно

Честный бенчмарк: что происходит, когда в реальном конвейере Grounded SAM 2 заменяется на SAM 3?

  • Задержка: SAM 3 экономит один прямой проход (без отдельного детектора), но сама модель тяжелее; обычно итоговая задержка не меняется либо немного уменьшается.
  • Точность: SAM 3 существенно лучше справляется с редкими или композиционными концептами ("striped red umbrella"). Для обычных концептов из одного слова результаты похожи.
  • Гибкость: Grounded SAM 2 позволяет заменять детекторы (DINO-X, Florence-2, Grounding DINO 1.5); SAM 3 монолитен.

Вывод: SAM 3 — вариант по умолчанию для сегментации с открытым словарём в 2026 году. Grounded SAM 2 по-прежнему подходит, когда важны гибкость выбора детектора или другие условия лицензии.

Используйте

Сценарии производственного развёртывания:

  • Аннотирование в реальном времени — SAM 3 + функция CVAT label-as-text-prompt. Разметчики выбирают имя метки; SAM 3 предварительно размечает каждый подходящий экземпляр. Затем они проверяют и исправляют результат.
  • Видеоаналитика — SAM 3.1 Object Multiplex для отслеживания множества объектов; подавайте кадры в трекер на основе памяти.
  • Робототехника — SAM 3 для манипуляций с открытым словарём («возьми красную чашку»); работает как примитив планирования.
  • Медицинская визуализация — SAM 3, дообученный на медицинских концептах; требуется запрос доступа на HF.

Ultralytics оборачивает SAM 3 в своём Python-пакете:

from ultralytics import SAM

model = SAM("sam3.pt")
results = model(image_path, prompts="yellow school bus")

Тот же интерфейс, что у YOLO и SAM 2.

Поставьте в продакшен

Этот урок создаёт:

  • outputs/prompt-open-vocab-stack-picker.md — запрос, выбирающий SAM 3 / Grounded SAM 2 / YOLO-World / SAM-MI с учётом задержки, сложности концепта и лицензирования.
  • outputs/skill-concept-prompt-designer.md — навык, превращающий высказывания пользователя в корректные запросы-концепты SAM 3 (разбиение, устранение неоднозначности, запасные варианты).

Упражнения

  1. (Легко) Запустите SAM 3 на 10 изображениях с выбранными вами запросами-концептами. Сравните его с SAM 2 + Grounding DINO 1.5 на тех же изображениях. Сообщите, какие концепты пропустила каждая модель.
  2. (Средне) Постройте поверх SAM 3 интерфейс «щёлкните, чтобы включить / щёлкните, чтобы исключить»: текстовый запрос возвращает кандидатов-экземпляров; пользователь отмечает щелчком те, которые следует считать положительными. Выведите итоговый набор концептов как JSON.
  3. (Сложно) Дообучите SAM 3 на пользовательском наборе концептов (например, пяти типах электронных компонентов), имея по 20 размеченных изображений каждого. Сравните с SAM 3 без обучения на том же тестовом наборе; измерьте улучшение IoU масок.

Ключевые термины

Термин Как обычно говорят Что это на самом деле означает
Сегментация с открытым словарём «Сегментировать по тексту» Создавать маски объектов, описанных естественным языком, а не фиксированным набором меток
PCS «Promptable Concept Segmentation» Основная задача SAM 3: по именной группе или образцу изображения сегментировать все подходящие экземпляры
Запрос-концепт «Текстовый ввод» Короткая именная группа или образец изображения; не полное предложение
Голова присутствия «Есть ли это здесь?» Модуль SAM 3, определяющий, существует ли концепт на изображении до локализации
SA-CO «Бенчмарк SAM 3» Бенчмарк сегментации с открытым словарём на 270 тысячах концептов; в 50 раз больше прежних бенчмарков открытого словаря
Object Multiplex «Обновление SAM 3.1» Многообъектное отслеживание с общей памятью; быстрое совместное отслеживание множества экземпляров
Grounded SAM 2 «Модульный конвейер» Каскад детектора и SAM 2; всё ещё актуален, когда важна замена детектора
SAM-MI «Эффективный вариант SAM» Mask Injection, дающий 1,6-кратное ускорение относительно Grounded-SAM

Дополнительные материалы


Источник: SAM 3 & Open-Vocabulary Segmentation 04.23 — Диффузионные трансформеры и Rectified Flow · Фаза 04 — Компьютерное зрение · 04.25 — Модели «зрение—язык» · Полный каталог