Быстрая модель Segment Anything (FastSAM)#
Быстрая модель Segment Anything (FastSAM) — это новое решение на основе CNN для выполнения задачи Segment Anything в реальном времени. Эта задача предназначена для сегментации любого объекта на изображении с помощью различных пользовательских подсказок. FastSAM значительно снижает вычислительные затраты, сохраняя конкурентоспособную производительность, и поэтому подходит для широкого круга задач компьютерного зрения.
Смотри: Трекинг объектов с FastSAM с помощью Ultralytics
Архитектура модели#

Обзор#
FastSAM разработана для устранения ограничений модели Segment Anything (SAM) — громоздкой модели на основе Transformer, требующей значительных вычислительных ресурсов. FastSAM разделяет задачу Segment Anything на два последовательных этапа: сегментацию всех экземпляров и выбор по подсказке. На первом этапе используется YOLOv8-seg для создания масок сегментации всех экземпляров на изображении. На втором этапе модель выделяет область интереса, соответствующую подсказке.
Основные особенности#
-
Решение для работы в реальном времени: благодаря вычислительной эффективности CNN FastSAM позволяет выполнять задачу Segment Anything в реальном времени и подходит для промышленных приложений, где важна скорость получения результатов.
-
Эффективность и производительность: FastSAM значительно снижает вычислительные затраты и потребление ресурсов без ухудшения качества. Она обеспечивает производительность, сопоставимую с SAM, но требует гораздо меньше вычислительных ресурсов, что позволяет использовать её в приложениях реального времени.
-
Сегментация по подсказкам: FastSAM может сегментировать любой объект на изображении с помощью различных пользовательских подсказок, обеспечивая гибкость и адаптивность в разных сценариях.
-
На основе YOLOv8-seg: FastSAM основана на YOLOv8-seg — детекторе объектов с ветвью сегментации экземпляров. Это позволяет эффективно создавать маски сегментации для всех экземпляров на изображении.
-
Конкурентные результаты на бенчмарках: в задаче генерации объектных предложений на MS COCO FastSAM показывает высокие результаты и работает значительно быстрее, чем SAM, на одном NVIDIA RTX 3090, демонстрируя свою эффективность и возможности.
-
Практическое применение: предлагаемый подход предоставляет новое практичное решение для множества задач компьютерного зрения на очень высокой скорости — в десятки и сотни раз быстрее существующих методов.
-
Возможность сжатия модели: FastSAM демонстрирует, что можно существенно снизить вычислительные затраты, введя в структуру искусственное априорное знание. Это открывает новые возможности для создания архитектур крупных моделей для общих задач компьютерного зрения.
Доступные модели, поддерживаемые задачи и режимы работы#
В этой таблице представлены доступные модели и соответствующие предварительно обученные веса, поддерживаемые задачи и совместимость с различными режимами работы, такими как инференс, валидация, обучение и экспорт. Поддерживаемые режимы отмечены эмодзи ✅, а неподдерживаемые — ❌.
| Тип модели | Предобученные веса | Поддерживаемые задачи | Обучение | Валидация | Инференс | Экспорт |
|---|---|---|---|---|---|---|
| FastSAM-s | FastSAM-s.pt | Сегментация экземпляров | ❌ | ✅ | ✅ | ✅ |
| FastSAM-x | FastSAM-x.pt | Сегментация экземпляров | ❌ | ✅ | ✅ | ✅ |
Сравнение FastSAM и YOLO#
Здесь мы сравниваем FastSAM-s с вариантами SAM от Meta и моделями сегментации Ultralytics, включая YOLO26n-seg:
| Модель | Размер (МБ) | Параметры (M) | Скорость (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
# Профилировать 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)
# Профилирование FastSAM-s
model = FastSAM("FastSAM-s.pt")
model.info()
model(ASSETS)
# Профилировать модели YOLO (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; ничего не делает для YOLOv8/YOLO11
model = YOLO(onnx_path)
model(ASSETS)Примеры использования#
Модели FastSAM легко интегрировать в приложения на Python. Ultralytics предоставляет удобные команды Python API и CLI, упрощающие разработку.
Использование для предсказаний#
Чтобы сегментировать изображение, используй метод predict, как показано ниже:
from ultralytics import FastSAM
# Задать источник для инференса
source = "path/to/bus.jpg"
# Создать модель FastSAM
model = FastSAM("FastSAM-s.pt") # или FastSAM-x.pt
# Запустить инференс на изображении
everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9)
# Выполнить инференс с подсказкой в виде bboxes
results = model(source, bboxes=[439, 437, 524, 709])
# Запустить инференс с подсказкой-точкой
results = model(source, points=[[200, 200]], labels=[1])
# Запустить инференс с текстовыми подсказками
results = model(source, texts="a photo of a dog")
# Запустить инференс одновременно с bbox, точками и текстовыми подсказками
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
# Создать FastSAMPredictor
overrides = {"conf": 0.25, "task": "segment", "mode": "predict", "model": "FastSAM-s.pt", "save": False, "imgsz": 1024}
predictor = FastSAMPredictor(overrides=overrides)
# Сегментировать всё
everything_results = predictor("ultralytics/assets/bus.jpg")
# Инференс по подсказке
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
# Создать модель FastSAM
model = FastSAM("FastSAM-s.pt") # или FastSAM-x.pt
# Валидировать модель
results = model.val(data="coco8-seg.yaml")Отслеживание объектов#
Чтобы отслеживать объекты на изображении, используй метод track, как показано ниже:
from ultralytics import FastSAM
# Создать модель FastSAM
model = FastSAM("FastSAM-s.pt") # или FastSAM-x.pt
# Отслеживание объектов в видео с помощью модели FastSAM
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 (Fast Segment Anything Model) — решение на основе свёрточной нейронной сети (CNN), предназначенное для сегментации объектов в реальном времени с меньшими вычислительными затратами и высокой производительностью. В отличие от модели Segment Anything Model (SAM), использующей более тяжёлую архитектуру на основе Transformer, FastSAM применяет Ultralytics YOLOv8-seg для эффективной сегментации экземпляров в два этапа: сегментация всех экземпляров, а затем их выбор по запросу.
FastSAM обеспечивает сегментацию в реальном времени, разделяя задачу на два этапа: сегментацию всех экземпляров с помощью YOLOv8-seg и выбор по запросу. Благодаря вычислительной эффективности CNN FastSAM существенно снижает вычислительные затраты и потребление ресурсов, сохраняя конкурентоспособную производительность. Такой двухэтапный подход позволяет FastSAM быстро и эффективно выполнять сегментацию в приложениях, где важен быстрый результат.
FastSAM подходит для множества задач компьютерного зрения, требующих сегментации в реальном времени. Например:
- Промышленная автоматизация для контроля и обеспечения качества
- Анализ видео в реальном времени для обеспечения безопасности и видеонаблюдения
- Автономные транспортные средства для обнаружения и сегментации объектов
- Обработка медицинских изображений для точной и быстрой сегментации
Благодаря поддержке различных пользовательских запросов FastSAM можно гибко адаптировать к разным сценариям.
Чтобы выполнить инференс с помощью FastSAM в Python, воспользуйся примером ниже:
from ultralytics import FastSAM # Задать источник для инференса source = "path/to/bus.jpg" # Создать модель FastSAM model = FastSAM("FastSAM-s.pt") # или FastSAM-x.pt # Запустить инференс на изображении everything_results = model(source, device="cpu", retina_masks=True, imgsz=1024, conf=0.4, iou=0.9) # Выполнить инференс с подсказкой в виде bboxes results = model(source, bboxes=[439, 437, 524, 709]) # Запустить инференс с подсказкой-точкой results = model(source, points=[[200, 200]], labels=[1]) # Запустить инференс с текстовыми подсказками results = model(source, texts="a photo of a dog") # Запустить инференс одновременно с bbox, точками и текстовыми подсказками results = model(source, bboxes=[439, 437, 524, 709], points=[[200, 200]], labels=[1], texts="a photo of a dog")Подробнее о методах инференса см. в разделе документации Использование режима Predict.
FastSAM поддерживает несколько типов запросов для управления сегментацией:
- Запрос «Все объекты»: сегментирует все видимые объекты.
- Запрос «Ограничивающая рамка (BBox)»: сегментирует объекты внутри заданной ограничивающей рамки.
- Текстовый запрос: использует текстовое описание, чтобы сегментировать соответствующие ему объекты.
- Запрос «Точка»: сегментирует объекты рядом с точками, заданными пользователем.
Благодаря такой гибкости FastSAM подходит для самых разных сценариев взаимодействия с пользователем и находит применение в различных задачах. Подробнее об использовании запросов см. в разделе Основные возможности.