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, детекторе объектов, оснащенном ветвью сегментации экземпляров. Это позволяет ему эффективно создавать маски сегментации для всех объектов на изображении.
-
Конкурентные результаты в бенчмарках: В задаче предложения объектов на MS COCO FastSAM достигает высоких результатов при значительно более высокой скорости, чем SAM на одном NVIDIA RTX 3090, демонстрируя свою эффективность и возможности.
-
Практическое применение: Предложенный подход предоставляет новое практическое решение для большого числа задач компьютерного зрения с очень высокой скоростью, в десятки или сотни раз быстрее существующих методов.
-
Возможность сжатия модели: FastSAM демонстрирует возможность пути, который может значительно сократить вычислительные усилия за счет введения искусственного априорного знания в структуру, тем самым открывая новые возможности для архитектуры больших моделей для общих задач компьютерного зрения.
Доступные модели, поддерживаемые задачи и режимы работы#
В этой таблице представлены доступные модели с их конкретными предобученными весами, поддерживаемыми задачами и совместимостью с различными режимами работы, такими как Inference, Validation, Training и Export, обозначенные смайликами ✅ для поддерживаемых режимов и ❌ для неподдерживаемых режимов.
| Тип модели | Предобученные веса | Поддерживаемые задачи | Training | Validation | Inference | Экспорт |
|---|---|---|---|---|---|---|
| FastSAM-s | FastSAM-s.pt | Сегментация экземпляров | ❌ | ✅ | ✅ | ✅ |
| FastSAM-x | FastSAM-x.pt | Сегментация экземпляров | ❌ | ✅ | ✅ | ✅ |
Сравнение FastSAM с YOLO#
Здесь мы сравниваем модели Meta SAM 2, включая наименьший вариант 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 с backbone 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 = {"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, которые позволяют легко получить доступ к предсказанным маскам и исходному изображению.
Использование для валидации#
Обрати внимание, что FastSAM поддерживает только обнаружение и сегментацию объектов одного класса. Это означает, что он будет распознавать и сегментировать все объекты как один и тот же класс. Поэтому при подготовке набора данных тебе необходимо преобразовать все ID категорий объектов в 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, как показано ниже:
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
Пример использования#
-
Скачай model checkpoint.
-
Используй 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): Генерирует сегментацию для всех видимых объектов.
- Подсказка Bounding Box: Сегментирует объекты внутри указанной рамки.
- Текстовая подсказка: Использует описательный текст для сегментации объектов, соответствующих описанию.
- Точечная подсказка: Сегментирует объекты рядом с конкретными точками, заданными пользователем.
Эта гибкость позволяет FastSAM адаптироваться к широкому спектру сценариев взаимодействия с пользователем, повышая его полезность в различных приложениях. Для получения дополнительной информации об использовании этих подсказок обратись к разделу Key Features.