Meet YOLO26: next-gen vision AI.

Link to this sectionSegment Anything Model (SAM)#

Эволюция SAM

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

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

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

Link to this sectionВведение в 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 масок на изображение).

Link to this sectionКлючевые особенности 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 в различных задачах сегментации, что делает ее готовым инструментом для разнообразных приложений с минимальной потребностью в проектировании подсказок (prompt engineering).

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

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

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

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

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

Тип моделиПредобученные весаПоддерживаемые задачиInferenceValidationTrainingЭкспорт
SAM basesam_b.ptInstance Segmentation
SAM largesam_l.ptInstance Segmentation

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

Segment Anything Model можно использовать для множества последующих задач, выходящих за рамки ее обучающих данных. Это включает обнаружение границ, генерацию предложений объектов, сегментацию экземпляров (instance segmentation) и предварительное прогнозирование текста в маску. Благодаря проектированию подсказок (prompt engineering), SAM может быстро адаптироваться к новым задачам и распределениям данных в режиме zero-shot, что делает ее универсальным и мощным инструментом для всех твоих нужд в сегментации изображений.

Link to this sectionПример предсказания 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 = 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, которые позволяют легко получить доступ к предсказанным маскам и исходному изображению.

Link to this sectionСравнение 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)

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

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

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

Чтобы автоматически аннотировать свой набор данных с помощью фреймворка 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, устройства для запуска моделей, а также директории для сохранения аннотированных результатов.

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

Link to this sectionЦитирование и благодарности#

Если ты находишь 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.

Link to this sectionЧасто задаваемые вопросы (FAQ)#

Link to this sectionЧто такое Segment Anything Model (SAM) от Ultralytics?#

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

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

Ты можешь использовать 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

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

Link to this sectionКак модели SAM и YOLO сравниваются по производительности?#

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

Link to this sectionКак я могу автоматически аннотировать свой набор данных с помощью 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.

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

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

Комментарии