Сегмент "Любая модель" (SAM)
Добро пожаловать на границу сегментации изображений с помощью модели 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]])
Сегментировать все
Сегментируйте все изображение.
- Логика заключается в том, чтобы сегментировать все изображение, если вы не передаете никаких подсказок (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
в приведенных выше примерах являются Результаты объект, который позволяет легко получить доступ к предсказанным маскам и исходному изображению.
- Дополнительные параметры для
Segment everything
см.Predictor/generate
Ссылка.
Сравнение 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
как показано ниже:
Пример
Аргумент | Тип | По умолчанию | Описание |
---|---|---|---|
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):
Более подробные инструкции по использованию можно найти в разделе "Сегментация".
Как модели 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 - это крупнейший на сегодняшний день набор данных для сегментации, который предоставляет высококачественные и разнообразные обучающие данные, обеспечивающие впечатляющую производительность при выполнении различных задач сегментации. Более подробную информацию можно найти в разделе "Наборы данных".