Ultralytics YOLO27:

Модель Segment Anything (SAM)#

Эволюция SAM

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

How to use Segment Anything In Colab

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

Введение в SAM: модель Segment Anything#

Модель Segment Anything, или 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 (SAM)#

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

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

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

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

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

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

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

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

Модель Segment Anything можно использовать для множества последующих задач, выходящих за пределы данных, на которых она обучалась. К ним относятся обнаружение границ, генерация предложений объектов, сегментация экземпляров и предварительное предсказание масок по тексту. С помощью разработки промптов 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/точки/маски).
Пример 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, min_mask_region_area=100)
Примечание

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

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

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

МодельРазмер
(МБ)
Параметры
(млн)
Скорость (CPU)
(мс/изобр.)
Meta SAM-b37593.741703
MobileSAM40.710.123802
FastSAM-s с бэкбоном 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, nms=False)  # YOLO26 NMS-free head; no-op for YOLOv8/YOLO11
    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 для подавления немаксимумов, используемый для фильтрации перекрывающихся рамок.
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 за создание и поддержку этого ценного ресурса для сообщества компьютерного зрения.

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

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

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

Комментарии