Segment Anything Model (SAM)

Эволюция SAM

Это оригинальная модель SAM от Meta. Чтобы получить расширенные возможности, обрати внимание на SAM 2 для сегментации видео или SAM 3 для Promptable Concept Segmentation с использованием текстовых и графических подсказок.

Как использовать Segment Anything в Colab

Добро пожаловать на передовую сегментации изображений с моделью Segment Anything Model, или SAM. Эта революционная модель изменила правила игры, представив сегментацию изображений с поддержкой подсказок и производительностью в реальном времени, установив новые стандарты в этой области.

Знакомство с SAM: Segment Anything Model

Segment Anything Model, или SAM, — это передовая модель сегментации изображений, которая позволяет выполнять сегментацию на основе подсказок, обеспечивая непревзойденную гибкость в задачах анализа изображений. SAM составляет основу инициативы Segment Anything — новаторского проекта, который представляет новую модель, задачу и набор данных для сегментации изображений.

Передовая архитектура SAM позволяет ей адаптироваться к новым распределениям изображений и задачам без предварительного обучения, что называется zero-shot переносом (нулевым обучением). Обученная на обширном наборе данных SA-1B, содержащем более 1 миллиарда масок на 11 миллионах тщательно отобранных изображений, модель SAM продемонстрировала впечатляющие результаты zero-shot, зачастую превосходя предыдущие методы с полным обучением.

Пример набора данных SA-1B с автоматическими масками сегментации Примеры изображений SA-1B. На изображениях набора данных наложены маски из недавно представленного SA-1B. SA-1B содержит 11 миллионов разнообразных лицензионных изображений высокого разрешения, защищающих конфиденциальность, и 1,1 миллиарда высококачественных масок сегментации. Эти маски были аннотированы полностью автоматически с помощью SAM и, как подтверждено оценками экспертов и многочисленными экспериментами, отличаются высоким качеством и разнообразием. Изображения сгруппированы по количеству масок на изображение для визуализации (в среднем ∼100 масок на изображение).

Ключевые особенности Segment Anything Model (SAM)

  • Задача сегментации с подсказками (Promptable Segmentation): SAM была разработана с учетом задачи сегментации с подсказками, что позволяет ей генерировать корректные маски сегментации на основе любой заданной подсказки, например, пространственных или текстовых указаний, идентифицирующих объект.
  • Передовая архитектура: Segment Anything Model использует мощный энкодер изображений, энкодер подсказок и легкий декодер масок. Эта уникальная архитектура обеспечивает гибкое управление подсказками, вычисление масок в реальном времени и учет неоднозначности в задачах сегментации.
  • Набор данных SA-1B: Представленный проектом Segment Anything, набор данных SA-1B содержит более 1 миллиарда масок на 11 миллионах изображений. Являясь крупнейшим на сегодняшний день набором данных для сегментации, он предоставляет SAM разнообразный и масштабный источник данных для обучения.
  • Производительность Zero-Shot: SAM демонстрирует выдающуюся производительность zero-shot в различных задачах сегментации, что делает ее готовым к использованию инструментом для разнообразных приложений с минимальной потребностью в prompt engineering (проектировании подсказок).

Чтобы углубиться в изучение Segment Anything Model и набора данных SA-1B, пожалуйста, посети Segment Anything GitHub и ознакомься с исследовательской статьей Segment Anything.

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

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

Доступные модели, поддерживаемые задачи и режимы работы

В этой таблице представлены доступные модели с их конкретными предобученными весами, задачи, которые они поддерживают, и их совместимость с различными режимами работы, такими как Инференс, Валидация, Обучение и Экспорт, что обозначено эмодзи ✅ для поддерживаемых режимов и ❌ для неподдерживаемых.

Тип моделиПредобученные весаПоддерживаемые задачиЛогический выводВалидацияОбучениеЭкспорт (Export)
SAM basesam_b.ptСегментация экземпляров
SAM largesam_l.ptСегментация экземпляров

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

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

Пример предсказания SAM

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

Сегментируй изображение с заданными подсказками.

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference with bboxes prompt
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# 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("sam_b.pt")

# Display model information (optional)
model.info()

# Run inference
model("path/to/image.jpg")
  • Логика здесь заключается в том, чтобы сегментировать всё изображение, если ты не передаешь никаких подсказок (bbox, точек, масок).
Пример SAMPredictor

Таким образом, ты можешь задать изображение один раз и выполнять инференс с подсказками несколько раз, не запуская энкодер изображения повторно.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Set image
predictor.set_image("ultralytics/assets/zidane.jpg")  # set with image file
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # set with np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])

# Run inference with single point prompt
results = predictor(points=[900, 370], labels=[1])

# Run inference with multiple points prompt
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])

# Run inference with negative points prompt
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

# Reset image
predictor.reset_image()

Сегментируй всё с дополнительными аргументами.

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = dict(conf=0.25, task="segment", mode="predict", imgsz=1024, model="mobile_sam.pt")
predictor = SAMPredictor(overrides=overrides)

# Segment with additional args
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64)
Примечание

Все возвращаемые results в примерах выше являются объектами Results, которые позволяют легко получить доступ к предсказанным маскам и исходному изображению.

  • Больше дополнительных аргументов для Segment everything смотри в справочнике Predictor/generate Reference.

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

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

МодельРазмер
(МБ)
Параметры
(М)
Скорость (CPU)
(мс/из)
Meta SAM-b37593.741703
MobileSAM40.710.123802
FastSAM-s с бэкбоном YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (в 52.8x меньше)3.4 (в 27.6x меньше)24.8 (в 1682x быстрее)
Ultralytics YOLO11n-seg6.2 (в 60.5x меньше)2.9 (в 32.3x меньше)24.3 (в 1716x быстрее)
Ultralytics YOLO26n-seg6.7 (в 56.0x меньше)2.7 (в 34.7x меньше)25.2 (в 1655x быстрее)

Это сравнение демонстрирует существенные различия в размерах моделей и скорости между вариантами 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

# Profile SAM-b, MobileSAM
for file in ["sam_b.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 (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)
    model = YOLO(onnx_path)
    model(ASSETS)

Автоматическая аннотация: быстрый путь к наборам данных для сегментации

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

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

Чтобы автоматически аннотировать свой набор данных с помощью фреймворка Ultralytics, используй функцию auto_annotate, как показано ниже:

Пример
from ultralytics.data.annotator import auto_annotate

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

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

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

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

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

Цитата
@misc{kirillov2023segment,
      title={Segment Anything},
      author={Alexander Kirillov and Eric Mintun and Nikhila Ravi and Hanzi Mao and Chloe Rolland and Laura Gustafson and Tete Xiao and Spencer Whitehead and Alexander C. Berg and Wan-Yen Lo and Piotr Dollár and Ross Girshick},
      year={2023},
      eprint={2304.02643},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Мы хотели бы выразить нашу благодарность Meta AI за создание и поддержку этого ценного ресурса для сообщества computer vision (компьютерного зрения).

Часто задаваемые вопросы (FAQ)

Что такое Segment Anything Model (SAM) от Ultralytics?

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

Как я могу использовать Segment Anything Model (SAM) для сегментации изображений?

Ты можешь использовать Segment Anything Model (SAM) для сегментации изображений, запуская инференс с использованием различных подсказок, таких как ограничивающие рамки (bbox) или точки. Вот пример на Python:

from ultralytics import SAM

# Load a model
model = SAM("sam_b.pt")

# Segment with bounding box prompt
model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Segment with points prompt
model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

# Segment with multiple points prompt
model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[[1, 1]])

# Segment with multiple points prompt per object
model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Segment with negative points prompt.
model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

Альтернативно, ты можешь запустить инференс с SAM в интерфейсе командной строки (CLI):

yolo predict model=sam_b.pt source=path/to/image.jpg

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

Как сравниваются модели SAM и YOLO с точки зрения производительности?

По сравнению с моделями YOLO, варианты SAM, такие как SAM-b, MobileSAM и FastSAM-s, обычно больше и медленнее, но предлагают уникальные возможности сегментации zero-shot. Например, YOLO26n-seg в 56 раз меньше и более чем в 1650 раз быстрее, чем оригинальная модель SAM-b от Meta на CPU. Это делает модели YOLO идеальными для приложений, требующих быстрой, легкой и вычислительно эффективной сегментации, в то время как модели SAM превосходны в гибких, управляемых подсказками задачах сегментации zero-shot.

Как я могу автоматически аннотировать свой набор данных с помощью SAM?

SAM от Ultralytics предлагает функцию автоматической аннотации, которая позволяет генерировать наборы данных сегментации с использованием предобученной модели обнаружения. Вот пример на Python:

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")

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

Какие наборы данных используются для обучения Segment Anything Model (SAM)?

SAM обучена на обширном наборе данных SA-1B, который включает более 1 миллиарда масок на 11 миллионах изображений. SA-1B — крупнейший на сегодняшний день датасет для сегментации, предоставляющий высококачественные и разнообразные обучающие данные, что обеспечивает впечатляющую zero-shot производительность в различных задачах сегментации. Подробности ищи в разделе о наборах данных.

Комментарии