YOLO Vision 2026:

Segment Anything Model (SAM)#

Эволюция SAM

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

How to use Segment Anything In 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 Task): SAM была разработана с учетом задачи сегментации по подсказкам, что позволяет ей создавать корректные маски сегментации на основе любых заданных подсказок, таких как пространственные или текстовые указания, идентифицирующие объект.
  • Передовая архитектура: Segment Anything Model использует мощный кодировщик изображений, кодировщик подсказок и легкий декодер масок. Эта уникальная архитектура обеспечивает гибкое использование подсказок, вычисление масок в реальном времени и учет неоднозначности в задачах сегментации.
  • Набор данных SA-1B: Представленный в рамках проекта Segment Anything, набор данных SA-1B содержит более 1 миллиарда масок на 11 миллионах изображений. Являясь крупнейшим на сегодняшний день набором данных для сегментации, он предоставляет SAM разнообразный и масштабный источник данных для обучения.
  • Zero-Shot Производительность: SAM демонстрирует выдающуюся zero-shot производительность в различных задачах сегментации, что делает ее готовым к использованию инструментом для разнообразных приложений с минимальной необходимостью в инжиниринге подсказок.

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

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

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

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

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

Тип моделиПредобученные весаПоддерживаемые задачиTrainingValidationInferenceЭкспорт
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")
  • Логика здесь заключается в том, чтобы сегментировать всё изображение, если ты не передаешь никаких подсказок (bboxes/points/masks).
Пример SAMPredictor

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

import cv2

from ultralytics.models.sam import Predictor as SAMPredictor

# Create SAMPredictor
overrides = {"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 = {"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, которые позволяют легко получить доступ к предсказанным маскам и исходному изображению.

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

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

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

Это сравнение демонстрирует существенные различия в размерах моделей и скорости между вариантами 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, SAM 2, MobileSAM и SAM 3).
devicestr''Вычислительное устройство (например, 'cuda:0', 'cpu' или '' для автоматического определения устройства).
conffloat0.25Порог уверенности YOLO для фильтрации слабых обнаружений.
ioufloat0.45Порог IoU для NMS для фильтрации перекрывающихся рамок.
imgszint640Размер входного изображения для изменения размера (должен быть кратен 32).
max_detint300Максимальное количество обнаружений на изображение для экономии памяти.
classeslist[int]NoneСписок индексов классов для обнаружения (например, [0, 1] для человека и велосипеда).
output_dirstrNoneДиректория сохранения аннотаций (по умолчанию: родительская папка <data>_auto_annotate_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 за создание и поддержку этого ценного ресурса для сообщества компьютерного зрения.

FAQ#

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

  • Ты можешь использовать Segment Anything Model (SAM) для сегментации изображений, запуская инференс с помощью различных подсказок, таких как ограничивающие рамки (bounding boxes) или точки. Вот пример с использованием 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

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

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

  • 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, а также параметры устройства и выходного каталога. Полное руководство см. в разделе Автоаннотирование.

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

Комментарии