Link to this sectionSegment Anything Model (SAM)#
Добро пожаловать на передовой край сегментации изображений с помощью 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 содержит 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, позволяя выполнять интеллектуальную сегментацию на основе кликов для быстрой разметки наборов данных. Подробности смотри в руководстве по аннотированию.
Link to this sectionДоступные модели, поддерживаемые задачи и режимы работы#
В этой таблице представлены доступные модели с их конкретными предобученными весами, задачи, которые они поддерживают, и их совместимость с различными режимами работы, такими как Inference, Validation, Training и Export, что отмечено эмодзи ✅ для поддерживаемых режимов и ❌ для неподдерживаемых.
| Тип модели | Предобученные веса | Поддерживаемые задачи | Inference | Validation | Training | Экспорт |
|---|---|---|---|---|---|---|
| SAM base | sam_b.pt | Instance Segmentation | ✅ | ❌ | ❌ | ❌ |
| SAM large | sam_l.pt | Instance 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).
Таким образом, ты можешь настроить изображение один раз и запускать вывод по подсказкам несколько раз, не запуская кодировщик изображений многократно.
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, которые позволяют легко получить доступ к предсказанным маскам и исходному изображению.
- More additional args for
Segment everythingseePredictor/generateReference.
Link to this sectionСравнение SAM и YOLO#
Здесь мы сравниваем модель SAM-b от Meta с моделями сегментации Ultralytics, включая YOLO26n-seg:
| Модель | Размер (МБ) | Параметры (М) | Скорость (CPU) (мс/из) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s с backbone YOLOv8 | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (в 52.8 раза меньше) | 3.4 (в 27.6 раза меньше) | 24.8 (в 1682 раза быстрее) |
| Ultralytics YOLO11n-seg | 6.2 (в 60.5 раза меньше) | 2.9 (в 32.3 раза меньше) | 24.3 (в 1716 раз быстрее) |
| Ultralytics YOLO26n-seg | 6.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")| Аргумент | Тип | По умолчанию | Описание |
|---|---|---|---|
data | str | обязательно | Путь к директории, содержащей целевые изображения для аннотирования или сегментации. |
det_model | str | 'yolo26x.pt' | Путь к модели обнаружения YOLO для начального обнаружения объектов. |
sam_model | str | 'sam_b.pt' | Путь к модели SAM для сегментации (поддерживает веса SAM, SAM 2, MobileSAM и SAM 3). |
device | str | '' | Вычислительное устройство (например, 'cuda:0', 'cpu' или '' для автоматического определения устройства). |
conf | float | 0.25 | Порог достоверности обнаружения YOLO для фильтрации слабых детекций. |
iou | float | 0.45 | Порог IoU для подавления немаксимумов (NMS), чтобы отфильтровать перекрывающиеся рамки. |
imgsz | int | 640 | Размер входного изображения для изменения масштаба (должен быть кратен 32). |
max_det | int | 300 | Максимальное количество обнаружений на изображение для эффективности использования памяти. |
classes | list[int] | None | Список индексов классов для обнаружения (например, [0, 1] для человека и велосипеда). |
output_dir | str | None | Директория для сохранения аннотаций (по умолчанию: рядом с <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.