Быстрая модель сегментации всего (FastSAM)#
Быстрая модель сегментации всего (FastSAM) — это инновационное решение на базе CNN для сегментации в реальном времени. Эта задача предназначена для сегментации любого объекта на изображении на основе различных возможных подсказок от пользователя. FastSAM значительно снижает вычислительные требования, сохраняя конкурентоспособную производительность, что делает её практичным выбором для разнообразных задач компьютерного зрения.
Watch: Object Tracking using FastSAM with Ultralytics
Архитектура модели#

Обзор#
FastSAM разработана для устранения ограничений модели сегментации всего (SAM) — ресурсоёмкой модели [Transformer](https://ultralytics-translation-1.invalid, предъявляющей высокие требования к вычислительным ресурсам. FastSAM разделяет задачу сегментации всего на два последовательных этапа: сегментацию всех экземпляров и выборку по подсказке. На первом этапе YOLOv8-seg создаёт маски сегментации всех экземпляров на изображении. На втором этапе модель выдаёт область интереса, соответствующую подсказке.
Ключевые особенности#
-
Решение для работы в реальном времени: благодаря вычислительной эффективности CNN FastSAM обеспечивает решение для сегментации всего в реальном времени, что делает её ценной для промышленных приложений, требующих быстрых результатов.
-
Эффективность и производительность: FastSAM значительно снижает вычислительные требования и потребление ресурсов без ущерба для качества работы. Она обеспечивает производительность, сопоставимую с SAM, но требует значительно меньше вычислительных ресурсов, что позволяет применять её в реальном времени.
-
Сегментация по подсказке: FastSAM может сегментировать любой объект на изображении под управлением различных возможных подсказок от пользователя, обеспечивая гибкость и адаптивность в разных сценариях.
-
На базе YOLOv8-seg: FastSAM основана на YOLOv8-seg — детекторе объектов с ветвью сегментации экземпляров. Это позволяет ей эффективно создавать маски сегментации всех экземпляров на изображении.
-
Конкурентоспособные результаты на эталонных наборах: в задаче генерации предложений объектов на MS COCO FastSAM получает высокие оценки и работает значительно быстрее, чем SAM, на одной NVIDIA RTX 3090, демонстрируя свою эффективность и возможности.
-
Практическое применение: предложенный подход обеспечивает новое практичное решение для большого числа задач компьютерного зрения с очень высокой скоростью — в десятки и сотни раз быстрее современных методов.
-
Возможность сжатия модели: FastSAM демонстрирует реализуемость подхода, который может значительно снизить вычислительные затраты за счёт введения искусственного априорного допущения в структуру, открывая новые возможности для архитектур больших моделей в общих задачах компьютерного зрения.
Доступные модели, поддерживаемые задачи и режимы работы#
В этой таблице представлены доступные модели с соответствующими предварительно обученными весами, поддерживаемые ими задачи и совместимость с различными режимами работы, такими как Inference, Validation, Training и Export, обозначенная эмодзи ✅ для поддерживаемых режимов и ❌ для неподдерживаемых.
| Тип модели | Предварительно обученные веса | Поддерживаемые задачи | Обучение | Валидация | Вывод | Экспорт |
|---|---|---|---|---|---|---|
| FastSAM-s | FastSAM-s.pt | Сегментация экземпляров | ❌ | ✅ | ✅ | ✅ |
| FastSAM-x | FastSAM-x.pt | Сегментация экземпляров | ❌ | ✅ | ✅ | ✅ |
Сравнение FastSAM с YOLO#
Здесь мы сравниваем FastSAM-s с вариантами SAM от Meta и моделями сегментации Ultralytics, включая YOLO26n-seg:
| Модель | Размер (МБ) | Параметры (млн) | Скорость (CPU) (мс/изобр.) |
|---|---|---|---|
| Meta SAM-b | 375 | 93.7 | 41703 |
| Meta SAM2-b | 162 | 80.8 | 28867 |
| Meta SAM2-t | 78.1 | 38.9 | 23430 |
| MobileSAM | 40.7 | 10.1 | 23802 |
| FastSAM-s с бэкбоном YOLOv8 | 23.9 | 11.8 | 58.0 |
| Ultralytics YOLOv8n-seg | 7.1 (в 11.0 раз меньше) | 3.4 (в 11.4 раза меньше) | 24.8 (в 945 раз быстрее) |
| Ultralytics YOLO11n-seg | 6.2 (в 12.6 раза меньше) | 2.9 (в 13.4 раза меньше) | 24.3 (в 964 раза быстрее) |
| Ultralytics YOLO26n-seg | 6.7 (в 11.7 раза меньше) | 2.7 (в 14.4 раза меньше) | 25.2 (в 930 раз быстрее) |
Это сравнение демонстрирует существенные различия в размере и скорости моделей между вариантами 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 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 (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-free head; no-op for YOLOv8/YOLO11
model = YOLO(onnx_path)
model(ASSETS)Примеры использования#
Модели FastSAM легко интегрировать в приложения на Python. Ultralytics предоставляет удобные Python API и команды CLI для упрощения разработки.
Использование Predict#
Чтобы сегментировать изображение, используй метод predict, как показано ниже:
from ultralytics import FastSAM
# Define an inference source
source = "path/to/bus.jpg"
# Create a FastSAM model
model = FastSAM("FastSAM-s.pt") # or FastSAM-x.pt
# Run inference on an image
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
# Run inference with bboxes prompt
results = model(source, bboxes=[439, 437, 524, 709])
# Run inference with points prompt
results = model(source, points=[[200, 200]], labels=[1])
# Run inference with texts prompt
results = model(source, texts="a photo of a dog")
# Run inference with bboxes and points and texts prompt at the same time
results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")Этот фрагмент кода демонстрирует, насколько просто загрузить предварительно обученную модель и выполнить предсказание для изображения.
Так можно выполнить инференс изображения и получить все сегменты results за один запуск, а затем многократно выполнять инференс подсказок без повторного запуска инференса изображения.
from ultralytics.models.fastsam import FastSAMPredictor
# Create FastSAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "model": "FastSAM-s.pt", "save": False, "imgsz": 1024}
predictor = FastSAMPredictor(overrides=overrides)
# Segment everything
everything_results = predictor("ultralytics/assets/bus.jpg")
# Prompt inference
bbox_results = predictor.prompt(everything_results, bboxes=[[200, 200, 300, 300]])
point_results = predictor.prompt(everything_results, points=[200, 200])
text_results = predictor.prompt(everything_results, texts="a photo of a dog")Все возвращаемые results в приведённых выше примерах являются объектами Results, которые обеспечивают удобный доступ к предсказанным маскам и исходному изображению.
Использование Val#
Обрати внимание, что FastSAM поддерживает обнаружение и сегментацию только одного класса объектов. Это означает, что все объекты будут распознаваться и сегментироваться как принадлежащие одному классу. Поэтому при подготовке набора данных необходимо преобразовать идентификаторы категорий всех объектов в 0.
Валидацию модели на наборе данных можно выполнить следующим образом:
from ultralytics import FastSAM
# Create a FastSAM model
model = FastSAM("FastSAM-s.pt") # or FastSAM-x.pt
# Validate the model
results = model.val(data="coco8-seg.yaml")Использование Track#
Чтобы выполнить отслеживание объектов на изображении, используй метод track, как показано ниже:
from ultralytics import FastSAM
# Create a FastSAM model
model = FastSAM("FastSAM-s.pt") # or FastSAM-x.pt
# Track with a FastSAM model on a video
results = model.track(source="path/to/video.mp4", imgsz=640)Официальное использование FastSAM#
FastSAM также доступен напрямую из репозитория CASIA-LMC-Lab/FastSAM. Вот краткий обзор типичных шагов, которые ты можешь предпринять для использования FastSAM:
Установка#
-
Клонируй репозиторий FastSAM:
git clone https://github.com/CASIA-LMC-Lab/FastSAM.git -
Создай и активируй окружение Conda с Python 3.9:
conda create -n FastSAM python=3.9 conda activate FastSAM -
Перейди в клонированный репозиторий и установи необходимые пакеты:
cd FastSAM pip install -r requirements.txt -
Установи модель CLIP:
pip install git+https://github.com/ultralytics/CLIP.git
Пример использования#
-
Скачай чекпойнт модели.
-
Используй FastSAM для инференса. Примеры команд:
-
Сегментация всех объектов на изображении:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg -
Сегментация определённых объектов с использованием текстовой подсказки:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --text_prompt "the yellow dog" -
Сегментация объектов внутри ограничивающей рамки (укажи координаты рамки в формате xywh):
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --box_prompt "[570,200,230,400]" -
Сегментация объектов рядом с определёнными точками:
python Inference.py --model_path ./weights/FastSAM.pt --img_path ./images/dogs.jpg --point_prompt "[[520,360],[620,300]]" --point_label "[1,0]"
-
Кроме того, ты можешь попробовать FastSAM через демо-версию в Colab от CASIA-LMC-Lab.
Цитирование и благодарности#
Мы хотели бы отметить авторов FastSAM за их значительный вклад в область сегментации экземпляров в реальном времени:
@misc{zhao2023fast,
title={Fast Segment Anything},
author={Xu Zhao and Wenchao Ding and Yongqi An and Yinglong Du and Tao Yu and Min Li and Ming Tang and Jinqiao Wang},
year={2023},
eprint={2306.12156},
archivePrefix={arXiv},
primaryClass={cs.CV}
}Оригинальную статью о FastSAM можно найти на arXiv. Авторы сделали свою работу общедоступной, а исходный код доступен на GitHub. Мы ценим их усилия по развитию этой области и открытию результатов своей работы для широкого сообщества.
Часто задаваемые вопросы#
FastSAM, сокращение от «быстрая модель сегментации всего», — это решение на базе свёрточной нейронной сети (CNN), предназначенное для снижения вычислительных требований при сохранении высокой производительности в задачах сегментации объектов. В отличие от модели сегментации всего (SAM), использующей более тяжёлую архитектуру на базе Transformer, FastSAM применяет Ultralytics YOLOv8-seg для эффективной сегментации экземпляров в два этапа: сегментация всех экземпляров, за которой следует выборка по подсказке.
FastSAM обеспечивает сегментацию в реальном времени, разделяя задачу сегментации на этапы сегментации всех экземпляров с помощью YOLOv8-seg и выборки по подсказке. Благодаря вычислительной эффективности CNN FastSAM значительно снижает вычислительные требования и потребление ресурсов, сохраняя конкурентоспособную производительность. Такой двухэтапный подход позволяет FastSAM обеспечивать быструю и эффективную сегментацию для приложений, требующих быстрых результатов.
FastSAM подходит для различных задач компьютерного зрения, требующих сегментации в реальном времени. Примеры применения:
- Промышленная автоматизация для контроля и обеспечения качества
- Анализ видео в реальном времени для обеспечения безопасности и наблюдения
- Автономные транспортные средства для обнаружения и сегментации объектов
- Медицинская визуализация для точной и быстрой сегментации
Способность обрабатывать различные подсказки от пользователя делает FastSAM адаптивной и гибкой для разнообразных сценариев.
Чтобы использовать FastSAM для инференса в Python, следуй примеру ниже:
from ultralytics import FastSAM # Define an inference source source = "path/to/bus.jpg" # Create a FastSAM model model = FastSAM("FastSAM-s.pt") # or FastSAM-x.pt # Run inference on an image everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9) # Run inference with bboxes prompt results = model(source, bboxes=[439, 437, 524, 709]) # Run inference with points prompt results = model(source, points=[[200, 200]], labels=[1]) # Run inference with texts prompt results = model(source, texts="a photo of a dog") # Run inference with bboxes and points and texts prompt at the same time results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")Подробнее о методах инференса см. в разделе документации Использование Predict.
FastSAM поддерживает несколько типов подсказок для управления задачами сегментации:
- Подсказка «Всё»: создаёт сегментацию всех видимых объектов.
- Подсказка с ограничивающей рамкой (BBox): сегментирует объекты внутри указанной ограничивающей рамки.
- Текстовая подсказка: использует описательный текст для сегментации объектов, соответствующих описанию.
- Точечная подсказка: сегментирует объекты рядом с определёнными пользователем точками.
Эта гибкость позволяет FastSAM адаптироваться к широкому спектру сценариев взаимодействия с пользователем, повышая её полезность в различных приложениях. Дополнительную информацию об использовании этих подсказок см. в разделе Ключевые возможности.