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

Обзор
FastSAM разработан для решения ограничений Segment Anything Model (SAM), тяжелой модели Transformer, требующей значительных вычислительных ресурсов. FastSAM разделяет задачу сегментации всего на два последовательных этапа: общая instance segmentation и выбор на основе подсказок (промптов). На первом этапе используется YOLOv8-seg для создания масок сегментации всех экземпляров на изображении. На втором этапе выводится область интереса, соответствующая подсказке.
Основные характеристики
-
Решение в реальном времени: Используя вычислительную эффективность CNN, FastSAM предоставляет решение для задачи сегментации в реальном времени, что делает его ценным для промышленных приложений, требующих быстрых результатов.
-
Эффективность и производительность: FastSAM предлагает значительное снижение вычислительных затрат и требований к ресурсам без ущерба для качества производительности. Он достигает производительности, сопоставимой с SAM, но с существенно меньшими вычислительными ресурсами, что позволяет использовать его в реальном времени.
-
Сегментация по подсказкам: FastSAM может сегментировать любой объект на изображении, руководствуясь различными возможными подсказками от пользователя, обеспечивая гибкость и адаптивность в разных сценариях.
-
На базе YOLOv8-seg: FastSAM основан на YOLOv8-seg, детекторе объектов, оснащенном веткой для instance segmentation. Это позволяет ему эффективно создавать маски сегментации всех экземпляров на изображении.
-
Конкурентные результаты на тестах: В задаче предложения объектов на MS COCO FastSAM достигает высоких баллов при значительно большей скорости, чем SAM, на одном NVIDIA RTX 3090, что демонстрирует его эффективность и возможности.
-
Практические применения: Предложенный подход предоставляет новое, практичное решение для большого количества задач компьютерного зрения с очень высокой скоростью — в десятки или сотни раз быстрее существующих методов.
-
Возможность сжатия модели: FastSAM демонстрирует осуществимость пути, который может значительно снизить вычислительные затраты за счет введения искусственного априорного знания в структуру, тем самым открывая новые возможности для архитектур больших моделей для общих задач компьютерного зрения.
Доступные модели, поддерживаемые задачи и режимы работы
В этой таблице представлены доступные модели с их конкретными предобученными весами, задачи, которые они поддерживают, и их совместимость с различными режимами работы, такими как Инференс, Валидация, Обучение и Экспорт, что обозначено эмодзи ✅ для поддерживаемых режимов и ❌ для неподдерживаемых.
| Тип модели | Предобученные веса | Поддерживаемые задачи | Логический вывод | Валидация | Обучение | Экспорт (Export) |
|---|---|---|---|---|---|---|
| FastSAM-s | FastSAM-s.pt | Сегментация экземпляров | ✅ | ❌ | ❌ | ✅ |
| FastSAM-x | FastSAM-x.pt | Сегментация экземпляров | ✅ | ❌ | ❌ | ✅ |
Сравнение FastSAM с YOLO
Здесь мы сравниваем модели SAM 2 от Meta, включая самый маленький вариант SAM2-t, с моделями сегментации 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)
model = YOLO(onnx_path)
model(ASSETS)Примеры использования
Модели FastSAM легко интегрируются в твои Python-приложения. Ultralytics предоставляет удобный Python API и CLI-команды для упрощения разработки.
Использование прогнозирования
Для выполнения object detection на изображении используй метод 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 = dict(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)
Проверку модели на наборе данных можно выполнить следующим образом:
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")Пожалуйста, обрати внимание, что FastSAM поддерживает только обнаружение и сегментацию одного класса объектов. Это означает, что модель будет распознавать и сегментировать все объекты как один и тот же класс. Поэтому при подготовке набора данных тебе нужно преобразовать все идентификаторы категорий объектов в 0.
Использование отслеживания (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 также доступен напрямую из репозитория https://github.com/CASIA-IVA-Lab/FastSAM. Вот краткий обзор типичных шагов, которые ты можешь предпринять для использования FastSAM:
Установка
-
Клонируй репозиторий FastSAM:
git clone https://github.com/CASIA-IVA-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" -
Сегментируй объекты внутри bounding box (укажи координаты рамки в формате 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 demo от CASIA-IVA-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. Мы ценим их усилия по развитию области и предоставлению доступа к их работе широкому сообществу.
Часто задаваемые вопросы (FAQ)
Что такое FastSAM и чем он отличается от SAM?
FastSAM, сокращение от Fast Segment Anything Model, — это решение на основе convolutional neural network (CNN) для работы в реальном времени, разработанное для снижения вычислительных затрат при сохранении высокой производительности в задачах сегментации объектов. В отличие от Segment Anything Model (SAM), которая использует более тяжелую архитектуру на основе Transformer, FastSAM использует Ultralytics YOLOv8-seg для эффективной сегментации экземпляров в два этапа: сегментация всех экземпляров, а затем выбор на основе подсказки.
Как FastSAM достигает производительности сегментации в реальном времени?
FastSAM достигает сегментации в реальном времени за счет разделения задачи сегментации на этапы сегментации всех экземпляров с помощью YOLOv8-seg и выбора на основе подсказки. Используя вычислительную эффективность CNN, FastSAM обеспечивает значительное снижение вычислительных затрат и требований к ресурсам при сохранении конкурентной производительности. Этот двухэтапный подход позволяет FastSAM обеспечивать быструю и эффективную сегментацию, подходящую для приложений, требующих мгновенных результатов.
Каковы практические применения FastSAM?
FastSAM практичен для множества задач computer vision, требующих производительности сегментации в реальном времени. Применения включают:
- Промышленная автоматизация для контроля качества и обеспечения надежности
- Анализ видео в реальном времени для систем безопасности и наблюдения
- Autonomous vehicles для обнаружения и сегментации объектов
- Медицинская визуализация для точных и быстрых задач сегментации
Способность обрабатывать различные подсказки пользователя делает FastSAM адаптивным и гибким для разнообразных сценариев.
Как мне использовать модель FastSAM для вывода в Python?
Чтобы использовать 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 Usage в документации.
Какие типы подсказок поддерживает FastSAM для задач сегментации?
FastSAM поддерживает несколько типов подсказок для направления задач сегментации:
- Подсказка «Всё» (Everything Prompt): Генерирует сегментацию для всех видимых объектов.
- Подсказка BBox: Сегментирует объекты внутри указанной рамки.
- Текстовая подсказка: Использует описательный текст для сегментации объектов, соответствующих описанию.
- Точечная подсказка: Сегментирует объекты рядом с указанными пользователем точками.
Эта гибкость позволяет FastSAM адаптироваться к широкому спектру сценариев взаимодействия с пользователем, повышая его полезность в различных приложениях. Для получения дополнительной информации об использовании этих подсказок обратись к разделу Key Features.