Перейти к содержанию

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

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



Смотреть: Отслеживание объектов с помощью FastSAM с Ultralytics

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

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

Обзор

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

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

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

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

  3. Сегментация с подсказками: 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

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

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

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

Пример

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

ЧАСТО ЗАДАВАЕМЫЕ ВОПРОСЫ

Что такое FastSAM и чем он отличается от SAM?

FastSAMсокращение от Fast Segment Anything Model - это решение на основе конволюционной нейронной сети (CNN), работающее в режиме реального времени и предназначенное для снижения вычислительных требований при сохранении высокой производительности в задачах сегментации объектов. В отличие от Segment Anything Model (SAM), использующей более тяжелую архитектуру на основе трансформаторов, 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")

Более подробную информацию о методах вывода можно найти в разделе документации Predict Usage.

Какие типы подсказок поддерживает FastSAM для задач сегментации?

FastSAM поддерживает несколько типов подсказок для управления задачами сегментации:

  • Все подсказки: Создает сегментацию для всех видимых объектов.
  • Подсказка Bounding Box (BBox): Сегментирует объекты в пределах указанного ограничительного поля.
  • Текстовая подсказка: Использует описательный текст для сегментации объектов, соответствующих описанию.
  • Point Prompt: Сегментирует объекты вблизи определенных пользователем точек.

Такая гибкость позволяет FastSAM адаптироваться к широкому спектру сценариев взаимодействия с пользователем, что повышает его полезность в различных приложениях. Более подробную информацию об использовании этих подсказок см. в разделе "Основные возможности".

📅 Создано 1 год назад ✏️ Обновлено 2 месяца назад

Комментарии