Перейти к содержанию

Сегмент "Любая модель" (SAM)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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")
# Run inference with a SAM model
yolo predict model=sam_b.pt source=path/to/image.jpg
  • Логика заключается в том, чтобы сегментировать все изображение, если вы не передаете никаких подсказок (bboxes/points/masks).

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

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

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

Модель Размер
(МБ)
Параметры
(M)
Скорость (CPU)
(мс/им)
Мета SAM-b 375 93.7 49401
MobileSAM 40.7 10.1 25381
FastSAM смагистралью YOLOv8 23.7 11.8 55.9
Ultralytics YOLOv8n-seg 6,7 (11,7x меньше) 3,4 (на 11,4 меньше) 24,5 (в 1061 раз быстрее)
Ultralytics YOLO11n-seg 5,9 (13,2x меньше) 2,9 (13,4x меньше) 30.1 (864x быстрее)

Это сравнение демонстрирует существенные различия в размерах и скорости работы моделей между вариантами SAM и моделями сегментации YOLO . Хотя SAM предоставляет уникальные возможности автоматической сегментации, модели YOLO , в частности YOLOv8n и YOLO11n-seg, значительно меньше, быстрее и эффективнее с вычислительной точки зрения.

Тесты проводились на Apple M4 Pro 2025 года с 24 ГБ оперативной памяти с использованием torch==2.6.0 и ultralytics==8.3.90. Чтобы воспроизвести этот тест:

Пример

from ultralytics import ASSETS, SAM, YOLO, FastSAM

# Profile SAM2-t, SAM2-b, SAM-b, MobileSAM
for file in ["sam_b.pt", "sam2_b.pt", "sam2_t.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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
    model = YOLO(file_name)
    model.info()
    model(ASSETS)

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

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

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

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

Пример

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolo11x.pt", sam_model="sam_b.pt")
Аргумент Тип По умолчанию Описание
data str требуется Путь к каталогу, содержащему целевые изображения для аннотации или сегментации.
det_model str 'yolo11x.pt' YOLO траектория модели обнаружения для первоначального обнаружения объекта.
sam_model str 'sam_b.pt' Путь модели SAM для сегментации (поддерживает модели SAM, SAM2 и mobile_sam).
device str '' Вычислительное устройство (например, 'cuda:0', 'cpu' или '' для автоматического определения устройства).
conf float 0.25 YOLO порог достоверности обнаружения для фильтрации слабых обнаружений.
iou float 0.45 Порог IoU для не максимального подавления для фильтрации перекрывающихся ящиков.
imgsz int 640 Входной размер для изменения размера изображений (должен быть кратен 32).
max_det int 300 Максимальное количество обнаружений на одно изображение для экономии памяти.
classes list[int] None Список индексов классов для обнаружения (например, [0, 1] для человека и велосипеда).
output_dir str None Каталог сохранения аннотаций (по умолчанию './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) от Ultralytics?

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

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

Вы можете использовать модель Segment Anything Model (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

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

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

По сравнению с моделями YOLO такие варианты SAM , как SAM, SAM2, MobileSAM и FastSAM, обычно крупнее и медленнее, но обладают уникальными возможностями сегментации без выстрела. Например, Ultralytics YOLOv8n в 11,7 раза меньше и в 1069 раз быстрее, чем оригинальная модель SAM компании Meta, что подчеркивает значительное преимущество YOLO в скорости и эффективности. Аналогично, новая модель YOLO11n-seg имеет еще меньший размер и сохраняет впечатляющую скорость вывода. Это делает модели YOLO идеальными для приложений, требующих быстрой, легкой и вычислительно эффективной сегментации, в то время как модели SAM превосходят их в задачах гибкой, оперативной и "нулевой" сегментации.

Как выполнить автоаннотирование набора данных с помощью SAM?

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

from ultralytics.data.annotator import auto_annotate

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

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

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

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

📅 Создано 1 год назад ✏️ Обновлено 9 дней назад

Комментарии