Ultralytics YOLO27:
Get Started

Модель сегментации любых объектов (SAM)#

Эволюция SAM

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

How to use Segment Anything In Colab

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

Введение в SAM: модель сегментации любых объектов#

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

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

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

Ключевые особенности модели сегментации любых объектов (SAM)#

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

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

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

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

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

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

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

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

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

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

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

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

from ultralytics import SAM

# Загрузить модель
model = SAM("sam_b.pt")

# Показать информацию о модели (необязательно)
model.info()

# Выполнить инференс с подсказкой в виде bboxes
results = model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Выполнить инференс с одной точкой
results = model(points=[900, 370], labels=[1])

# Выполнить инференс с несколькими точками
results = model(points=[[400, 370], [900, 370]], labels=[1, 1])

# Выполнить инференс с подсказкой в виде нескольких точек для каждого объекта
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 1]])

# Выполнить инференс с подсказкой в виде отрицательных точек
results = model(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])
Сегментация всего изображения

Сегментировать всё изображение.

from ultralytics import SAM

# Загрузить модель
model = SAM("sam_b.pt")

# Показать информацию о модели (необязательно)
model.info()

# Выполнить инференс
model("path/to/image.jpg")
  • Логика здесь такова: сегментировать всё изображение, если не передать подсказки (bboxes/points/masks).
Пример SAMPredictor

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

import cv2

from ultralytics.models.sam import Predictor as SAMPredictor

# Создание SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Настройка изображения
predictor.set_image("ultralytics/assets/zidane.jpg")  # Задать файл изображения
predictor.set_image(cv2.imread("ultralytics/assets/zidane.jpg"))  # Задать np.ndarray
results = predictor(bboxes=[439, 437, 524, 709])

# Запуск инференса с подсказкой в виде одной точки
results = predictor(points=[900, 370], labels=[1])

# Запуск инференса с подсказкой в виде нескольких точек
results = predictor(points=[[400, 370], [900, 370]], labels=[1, 1])

# Выполнить инференс с подсказкой в виде отрицательных точек
results = predictor(points=[[[400, 370], [900, 370]]], labels=[[1, 0]])

# Сброс изображения
predictor.reset_image()

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

from ultralytics.models.sam import Predictor as SAMPredictor

# Создание SAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "imgsz": 1024, "model": "mobile_sam.pt"}
predictor = SAMPredictor(overrides=overrides)

# Сегментация с дополнительными аргументами
results = predictor(source="ultralytics/assets/zidane.jpg", crop_n_layers=1, points_stride=64, min_mask_region_area=100)
Примечание

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

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

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

МодельРазмер
(МБ)
Параметры
(M)
Скорость (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

# Профилирование SAM-b, MobileSAM
for file in ["sam_b.pt", "mobile_sam.pt"]:
    model = SAM(file)
    model.info()
    model(ASSETS)

# Профилирование FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)

# Профилировать модели YOLO (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; ничего не делает для 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 за создание и поддержку этого ценного ресурса для сообщества компьютерного зрения.

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

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

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

    from ultralytics import SAM
    
    # Загрузить модель
    model = SAM("sam_b.pt")
    
    # Сегментация с промптом в виде ограничивающей рамки
    model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])
    
    # Сегментация по подсказке-точке
    model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])
    
    # Сегментация по подсказке с несколькими точками
    model("ultralytics/assets/zidane.jpg", points=[[400, 370], [900, 370]], labels=[1, 1])
    
    # Сегментация каждого объекта по подсказке с несколькими точками
    model("ultralytics/assets/zidane.jpg", points=[[[400, 370], [900, 370]]], labels=[[1, 1]])
    
    # Сегментация по подсказке с отрицательными точками.
    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, обычно крупнее и медленнее, но обладают уникальными возможностями сегментации с нулевым обучением. Например, YOLO26n-seg в 56 раз меньше и более чем в 1650 раз быстрее оригинальной модели SAM-b от Meta при запуске на CPU. Поэтому модели YOLO идеально подходят для приложений, которым нужна быстрая, компактная и вычислительно эффективная сегментация, а модели 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, а также параметры устройства и выходного каталога. Полное руководство смотри в разделе «Автоматическая разметка».

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

Комментарии