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

Быстрая модель сегмента "Все" (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. 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
results = prompt_process.everything_prompt()

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

# Text prompt
results = 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
results = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=results, output="./")
# Load a FastSAM model and segment everything with it
yolo segment predict model=FastSAM-s.pt source=path/to/bus.jpg imgsz=640

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

Примечание

Все возвращенные 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
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()

# Bounding box prompt
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
ann = prompt_process.point_prompt(points=[[200, 200]], pointlabel=[1])
prompt_process.plot(annotations=ann, output="./")

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

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

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

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

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



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

Комментарии