Ultralytics YOLO27:
Get Started

Быстрая модель Segment Anything (FastSAM)#

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



Смотри: Трекинг объектов с FastSAM с помощью Ultralytics

Архитектура модели#

Обзор архитектуры быстрой модели Segment Anything (FastSAM)

Обзор#

FastSAM разработана для устранения ограничений модели Segment Anything (SAM) — громоздкой модели на основе Transformer, требующей значительных вычислительных ресурсов. FastSAM разделяет задачу Segment Anything на два последовательных этапа: сегментацию всех экземпляров и выбор по подсказке. На первом этапе используется YOLOv8-seg для создания масок сегментации всех экземпляров на изображении. На втором этапе модель выделяет область интереса, соответствующую подсказке.

Основные особенности#

  1. Решение для работы в реальном времени: благодаря вычислительной эффективности CNN FastSAM позволяет выполнять задачу Segment Anything в реальном времени и подходит для промышленных приложений, где важна скорость получения результатов.

  2. Эффективность и производительность: FastSAM значительно снижает вычислительные затраты и потребление ресурсов без ухудшения качества. Она обеспечивает производительность, сопоставимую с SAM, но требует гораздо меньше вычислительных ресурсов, что позволяет использовать её в приложениях реального времени.

  3. Сегментация по подсказкам: FastSAM может сегментировать любой объект на изображении с помощью различных пользовательских подсказок, обеспечивая гибкость и адаптивность в разных сценариях.

  4. На основе YOLOv8-seg: FastSAM основана на YOLOv8-seg — детекторе объектов с ветвью сегментации экземпляров. Это позволяет эффективно создавать маски сегментации для всех экземпляров на изображении.

  5. Конкурентные результаты на бенчмарках: в задаче генерации объектных предложений на MS COCO FastSAM показывает высокие результаты и работает значительно быстрее, чем SAM, на одном NVIDIA RTX 3090, демонстрируя свою эффективность и возможности.

  6. Практическое применение: предлагаемый подход предоставляет новое практичное решение для множества задач компьютерного зрения на очень высокой скорости — в десятки и сотни раз быстрее существующих методов.

  7. Возможность сжатия модели: FastSAM демонстрирует, что можно существенно снизить вычислительные затраты, введя в структуру искусственное априорное знание. Это открывает новые возможности для создания архитектур крупных моделей для общих задач компьютерного зрения.

Доступные модели, поддерживаемые задачи и режимы работы#

В этой таблице представлены доступные модели и соответствующие предварительно обученные веса, поддерживаемые задачи и совместимость с различными режимами работы, такими как инференс, валидация, обучение и экспорт. Поддерживаемые режимы отмечены эмодзи ✅, а неподдерживаемые — ❌.

Тип моделиПредобученные весаПоддерживаемые задачиОбучениеВалидацияИнференсЭкспорт
FastSAM-sFastSAM-s.ptСегментация экземпляров❌✅✅✅
FastSAM-xFastSAM-x.ptСегментация экземпляров❌✅✅✅

Сравнение FastSAM и YOLO#

Здесь мы сравниваем FastSAM-s с вариантами SAM от Meta и моделями сегментации Ultralytics, включая YOLO26n-seg:

МодельРазмер
(МБ)
Параметры
(M)
Скорость (CPU)
(мс/изобр.)
Meta SAM-b37593.741703
Meta SAM2-b16280.828867
Meta SAM2-t78.138.923430
MobileSAM40.710.123802
FastSAM-s с бэкбоном YOLOv823.911.858.0
Ultralytics YOLOv8n-seg7.1 (в 11.0 раз меньше)3.4 (в 11.4 раза меньше)24.8 (в 945 раз быстрее)
Ultralytics YOLO11n-seg6.2 (в 12.6 раза меньше)2.9 (в 13.4 раза меньше)24.3 (в 964 раза быстрее)
Ultralytics YOLO26n-seg6.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")

Этот фрагмент показывает, как просто загрузить предварительно обученную модель и выполнить предсказание для изображения.

Пример FastSAMPredictor

Так можно один раз запустить инференс для изображения и получить все сегменты 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:

Установка#

  1. Клонируй репозиторий FastSAM:

    git clone https://github.com/CASIA-LMC-Lab/FastSAM.git
  2. Создай и активируй среду Conda с Python 3.9:

    conda create -n FastSAM python=3.9
    conda activate FastSAM
  3. Перейди в клонированный репозиторий и установи необходимые пакеты:

    cd FastSAM
    pip install -r requirements.txt
  4. Установи модель CLIP:

    pip install git+https://github.com/ultralytics/CLIP.git

Пример использования#

  1. Скачай чекпойнт модели.

  2. Используй 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 подходит для самых разных сценариев взаимодействия с пользователем и находит применение в различных задачах. Подробнее об использовании запросов см. в разделе Основные возможности.

Комментарии