Перейти к содержимому

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

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

Введение в SAM: Модель "Сегмент - всё

Модель 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 разнообразным и масштабным источником обучающих данных.
  • Zero-Shot Performance: SAM демонстрирует выдающиеся показатели zero-shot в различных задачах сегментации, что делает его готовым к использованию инструментом для различных приложений с минимальной потребностью в оперативном проектировании.

Для более детального ознакомления с моделью 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
model("ultralytics/assets/zidane.jpg", bboxes=[439, 437, 524, 709])

# Run inference with points prompt
model("ultralytics/assets/zidane.jpg", points=[900, 370], labels=[1])

Сегментировать все

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

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])
results = predictor(points=[900, 370], labels=[1])

# Reset image
predictor.reset_image()

Сегментируй все с дополнительными args.

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)

SAM сравнение против YOLOv8

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

Модель Размер Параметры Скорость (процессор)
Meta's SAM-b 358 МБ 94.7 M 51096 ms/im
MobileSAM 40,7 МБ 10.1 M 46122 ms/im
FastSAM-s с магистралью YOLOv8 23,7 МБ 11.8 M 115 мс/им
Ultralytics YOLOv8n-seg 6,7 МБ (в 53,4 раза меньше) 3,4 М (в 27,9 раз меньше) 59 мс/им (в 866 раз быстрее)

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

Тесты проводятся на макбуке Apple M2 2023 года выпуска с 16 Гб оперативной памяти. Чтобы воспроизвести этот тест:

Пример

from ultralytics import SAM, YOLO, FastSAM

# Profile SAM-b
model = SAM("sam_b.pt")
model.info()
model("ultralytics/assets")

# Profile MobileSAM
model = SAM("mobile_sam.pt")
model.info()
model("ultralytics/assets")

# Profile FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model("ultralytics/assets")

# Profile YOLOv8n-seg
model = YOLO("yolov8n-seg.pt")
model.info()
model("ultralytics/assets")

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

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

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

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

Пример

from ultralytics.data.annotator import auto_annotate

auto_annotate(data="path/to/images", det_model="yolov8x.pt", sam_model="sam_b.pt")
Аргумент Тип Описание По умолчанию
данные str Путь к папке, содержащей изображения, которые нужно аннотировать.
det_model str, необязательно Предварительно обученная модель обнаружения YOLO . По умолчанию - 'yolov8x.pt'. 'yolov8x.pt'
sam_модель str, необязательно Предварительно обученная модель сегментации SAM . По умолчанию - 'sam_b.pt'. 'sam_b.pt'
Устройство str, необязательно Устройство, на котором будут запускаться модели. По умолчанию это пустая строка (CPU или GPU, если есть).
выходной_дир str, None, необязательно Каталог для сохранения аннотированных результатов. По умолчанию это папка 'labels' в той же директории, что и 'data'. Нет

The 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, Segment Anything Model, SAM, Meta SAM, сегментация изображений, promptable segmentation, zero-shot performance, SA-1B dataset, advanced architecture, auto-annotation, Ultralytics, pre-trained models, SAM base, SAM large, instance segmentation, computer vision, AI, artificial intelligence, machine learning, data annotation, segmentation masks, detection model, YOLO detection model, bibtex, Meta AI.



Created 2023-11-12, Updated 2024-06-10
Authors: glenn-jocher (13), Burhan-Q (1), ChaoningZhang (1), Laughing-q (1)

Комментарии