Fast Segment Anything Model (FastSAM)
Fast Segment Anything Model (FastSAM) — это новое решение на основе CNN для сегментации чего угодно в реальном времени. Эта задача предназначена для сегментирования любого объекта на изображении на основе различных возможных подсказок взаимодействия с пользователем. FastSAM значительно снижает вычислительные требования, сохраняя при этом конкурентоспособную производительность, что делает его практичным выбором для различных задач компьютерного зрения.
Смотреть: Отслеживание объектов с использованием FastSAM с Ultralytics
Архитектура модели
Обзор
FastSAM разработан для устранения ограничений Segment Anything Model (SAM), тяжелой модели Transformer со значительными потребностями в вычислительных ресурсах. 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
Здесь мы сравниваем модели SAM 2 от Meta, включая самый маленький вариант SAM2-t, с самой маленькой моделью сегментации Ultralytics, YOLO11n-seg:
Модель | Размер (МБ) |
Параметры (M) |
Скорость (CPU) (мс/изобр.) |
---|---|---|---|
Meta SAM-b | 375 | 93.7 | 49401 |
Meta SAM2-b | 162 | 80.8 | 31901 |
Meta SAM2-t | 78.1 | 38.9 | 25997 |
MobileSAM | 40.7 | 10.1 | 25381 |
FastSAM-s с backbone YOLOv8 | 23.7 | 11.8 | 55.9 |
Ultralytics YOLOv8n-seg | 6.7 (в 11.7 раз меньше) | 3.4 (в 11.4 раза меньше) | 24.5 (в 1061 раз быстрее) |
Ultralytics YOLO11n-seg | 5.9 (в 13.2 раза меньше) | 2.9 (в 13.4 раза меньше) | 30.1 (в 864 раза быстрее) |
Это сравнение демонстрирует существенные различия в размерах и скорости моделей между вариантами SAM и моделями сегментации YOLO. В то время как SAM предоставляет уникальные возможности автоматической сегментации, модели YOLO, в частности YOLOv8n-seg и YOLO11n-seg, значительно меньше, быстрее и более эффективны с вычислительной точки зрения.
Тесты выполняются на Apple M4 Pro 2025 года с 24 ГБ ОЗУ с использованием torch==2.6.0
и ultralytics==8.3.90
. Чтобы воспроизвести этот тест:
Пример
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
for file_name in ["yolov8n-seg.pt", "yolo11n-seg.pt"]:
model = YOLO(file_name)
model.info()
model(ASSETS)
Примеры использования
Модели FastSAM легко интегрируются в ваши приложения на python. Ultralytics предоставляет удобный Python API и команды CLI для оптимизации разработки.
Использование при прогнозировании
Чтобы выполнить обнаружения объектов на изображении, используйте 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")
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640
Этот фрагмент демонстрирует простоту загрузки предварительно обученной модели и выполнения прогнозирования на изображении.
Пример FastSAMPredictor
Таким образом, вы можете запустить инференс на изображении и получить весь сегмент 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 объект, который обеспечивает легкий доступ к прогнозируемым маскам и исходному изображению.
Использование при валидации
Валидация модели на наборе данных может быть выполнена следующим образом:
Пример
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")
# Load a FastSAM model and validate it on the COCO8 example dataset at image size 640
yolo segment val model=FastSAM-s.pt data=coco8.yaml imgsz=640
Обратите внимание, что FastSAM поддерживает только обнаружение и сегментацию одного класса объектов. Это означает, что он будет распознавать и сегментировать все объекты как один и тот же класс. Поэтому при подготовке набора данных необходимо преобразовать все идентификаторы категорий объектов в 0.
Использование при отслеживании
Чтобы выполнить отслеживание объектов на изображении, используйте 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)
yolo segment track model=FastSAM-s.pt 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"
-
Сегментировать объекты внутри ограничивающего прямоугольника (укажите координаты прямоугольника в формате 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 через CASIA-IVA-Lab Colab demo.
Цитирование и благодарности
Мы хотели бы выразить признательность авторам 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 и чем он отличается от SAM?
FastSAM, сокращение от Fast Segment Anything Model, — это решение на основе сверточной нейронной сети (CNN) в реальном времени, разработанное для снижения вычислительных затрат при сохранении высокой производительности в задачах сегментации объектов. В отличие от Segment Anything Model (SAM), в которой используется более тяжелая архитектура на основе Transformer, FastSAM использует Ultralytics YOLOv8-seg для эффективной сегментации экземпляров в два этапа: сегментация всех экземпляров с последующим выбором с подсказками.
Как FastSAM достигает производительности сегментации в реальном времени?
FastSAM обеспечивает сегментацию в реальном времени, разделяя задачу сегментации на сегментацию всех экземпляров с помощью YOLOv8-seg и этапы выбора с подсказками. Благодаря использованию вычислительной эффективности CNN, FastSAM предлагает значительное снижение вычислительных и ресурсных затрат, сохраняя при этом конкурентоспособную производительность. Этот двухэтапный подход позволяет FastSAM обеспечивать быструю и эффективную сегментацию, подходящую для приложений, требующих быстрых результатов.
Каковы практические применения FastSAM?
FastSAM практичен для различных задач компьютерного зрения, требующих производительности сегментации в реальном времени. Приложения включают в себя:
- Промышленная автоматизация для контроля качества и обеспечения
- Анализ видео в реальном времени для обеспечения безопасности и наблюдения
- Автономные транспортные средства для обнаружения и сегментации объектов
- Медицинская визуализация для точных и быстрых задач сегментации
Его способность обрабатывать различные подсказки взаимодействия с пользователем делает 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")
Для получения более подробной информации о методах логического вывода ознакомьтесь с разделом Использование прогнозирования документации.
Какие типы запросов поддерживает FastSAM для задач сегментации?
FastSAM поддерживает несколько типов подсказок для управления задачами сегментации:
- Everything Prompt: Генерирует сегментацию для всех видимых объектов.
- Bounding Box (BBox) Prompt: Сегментирует объекты внутри указанного ограничивающего прямоугольника.
- Текстовый запрос: Использует описательный текст для сегментации объектов, соответствующих описанию.
- Точечный запрос: Сегментирует объекты вблизи определенных пользовательских точек.
Эта гибкость позволяет FastSAM адаптироваться к широкому спектру сценариев взаимодействия с пользователем, повышая его полезность в различных приложениях. Для получения дополнительной информации об использовании этих подсказок обратитесь к разделу Key Features.