Перейти к содержимому

Быстрая модель сегмента "Все" (FastSAM)

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

Обзор архитектуры Fast Segment Anything Model (FastSAM)

Обзор

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

Основные характеристики

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

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

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

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

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

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

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

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

В этой таблице представлены доступные модели с их конкретными предварительно обученными весами, задачи, которые они поддерживают, и их совместимость с различными режимами работы, такими как Inference, Validation, Training и Export, обозначенные ✅ emojis для поддерживаемых режимов и ❌ emojis для неподдерживаемых режимов.

Тип модели Предварительно обученные веса Поддерживаемые задачи Заключение Валидация Тренировка Экспорт
FastSAM-s FastSAM-s.pt Сегментация экземпляров
FastSAM-x FastSAM-x.pt Сегментация экземпляров

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

Модели FastSAM легко интегрируются в твои Python приложения. Ultralytics предоставляет удобные Python API и CLI команды для упрощения разработки.

Предсказать использование

Чтобы выполнить обнаружение объектов на изображении, используй predict метод, как показано ниже:

Пример

from ultralytics import FastSAM
from ultralytics.models.fastsam import FastSAMPrompt

# 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)

# Prepare a Prompt Process object
prompt_process = FastSAMPrompt(source, everything_results, device='cpu')

# Everything prompt
ann = prompt_process.everything_prompt()

# Bbox default shape [0,0,0,0] -> [x1,y1,x2,y2]
ann = prompt_process.box_prompt(bbox=[200, 200, 300, 300])

# Text prompt
ann = prompt_process.text_prompt(text='a photo of a dog')

# Point prompt
# points default [[0,0]] [[x1,y1],[x2,y2]]
# point_label default [0] [1,0] 0:background, 1:foreground
ann = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=ann, output='./')
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640

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

Использование вала

Валидация модели на наборе данных может быть выполнена следующим образом:

Пример

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/file.mp4" imgsz=640

FastSAM Официальное использование

FastSAM также можно получить непосредственно из репозитория https://github.com/CASIA-IVA-Lab/FastSAM. Вот краткий обзор типичных шагов, которые ты можешь предпринять, чтобы использовать FastSAM:

Установка

  1. Клонируй репозиторий FastSAM :
git clone https://github.com/CASIA-IVA-Lab/FastSAM.git
  1. Создай и активируй окружение Conda с помощью Python 3.9:
conda create -n FastSAM python=3.9
conda activate FastSAM
  1. Перейди в клонированный репозиторий и установи необходимые пакеты:
cd FastSAM
pip install -r requirements.txt
  1. Установи модель 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 или на веб-демонстрацииHuggingFace для наглядного ознакомления.

Цитаты и благодарности

Мы хотели бы поблагодарить авторов сайта 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. Мы ценим их усилия, направленные на развитие области и обеспечение доступности их работы для широкого сообщества.



Создано 2023-11-12, Обновлено 2024-05-01
Авторы: RizwanMunawar (1), glenn-jocher (8), Laughing-q (1), berry-ding (1)

Комментарии