Быстрая модель сегмента "Все" (FastSAM)
Fast Segment Anything Model (FastSAM) - это новое решение на основе CNN для задачи Segment Anything в реальном времени. Эта задача предназначена для сегментирования любого объекта на изображении на основе различных возможных подсказок пользователя. FastSAM значительно снижает вычислительные требования, сохраняя при этом конкурентоспособную производительность, что делает ее практичным выбором для различных задач зрения.
Обзор
FastSAM разработан для устранения недостатков модели Segment Anything Model (SAM), тяжелой модели трансформера с существенными требованиями к вычислительным ресурсам. Модель FastSAM разделяет задачу сегментирования на два последовательных этапа: сегментация всех объектов и выбор с подсказкой. На первом этапе с помощью YOLOv8-seg создаются маски сегментации всех экземпляров изображения. На втором этапе выводится область интереса, соответствующая подсказке.
Основные характеристики
-
Решение в реальном времени: Используя вычислительную эффективность CNN, FastSAM обеспечивает решение задачи сегментации чего-либо в реальном времени, что делает его ценным для промышленных приложений, требующих быстрых результатов.
-
Эффективность и производительность: FastSAM обеспечивает значительное снижение требований к вычислительным и ресурсным ресурсам без ущерба для качества работы. Он достигает производительности, сравнимой с SAM , но при этом значительно сокращает вычислительные ресурсы, что позволяет использовать его в режиме реального времени.
-
Prompt-guided Segmentation: FastSAM может сегментировать любой объект на изображении, руководствуясь различными возможными подсказками при взаимодействии с пользователем, обеспечивая гибкость и адаптивность в различных сценариях.
-
На основе YOLOv8 -seg: FastSAM основан на YOLOv8-seg, детекторе объектов, оснащенном ветвью сегментации экземпляров. Это позволяет ему эффективно производить сегментацию масок всех экземпляров на изображении.
-
Конкурентные результаты на бенчмарках: В задаче предложения объектов на MS COCO FastSAM достигает высоких результатов на значительно более высокой скорости, чем SAM на одной NVIDIA RTX 3090, демонстрируя свою эффективность и возможности.
-
Практическое применение: Предложенный подход обеспечивает новое, практичное решение для большого количества задач зрения на действительно высокой скорости, в десятки и сотни раз быстрее, чем существующие методы.
-
Целесообразность сжатия моделей: 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='./')
Этот сниппет демонстрирует простоту загрузки предварительно обученной модели и выполнения предсказания на изображении.
Использование вала
Валидация модели на наборе данных может быть выполнена следующим образом:
Пример
Обрати внимание, что FastSAM поддерживает обнаружение и сегментацию только одного класса объектов. Это значит, что он будет распознавать и сегментировать все объекты как один и тот же класс. Поэтому при подготовке набора данных тебе нужно преобразовать все идентификаторы категорий объектов в 0.
Использование трека
Чтобы выполнить слежение за объектом на изображении, используй track
метод, как показано ниже:
Пример
FastSAM Официальное использование
FastSAM также можно получить непосредственно из репозитория https://github.com/CASIA-IVA-Lab/FastSAM. Вот краткий обзор типичных шагов, которые ты можешь предпринять, чтобы использовать FastSAM:
Установка
- Клонируй репозиторий FastSAM :
- Создай и активируй окружение Conda с помощью Python 3.9:
- Перейди в клонированный репозиторий и установи необходимые пакеты:
- Установи модель CLIP:
Пример использования
-
Загрузи модель контрольной точки.
-
Используй FastSAM для умозаключений. Примеры команд:
- Сегментируй все в изображении:
- Выделяй конкретные объекты, используя текстовую подсказку:
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]"
- Сегментируй объекты вблизи определенных точек:
Кроме того, ты можешь попробовать FastSAM через демо-версию Colab или на веб-демонстрацииHuggingFace для наглядного ознакомления.
Цитаты и благодарности
Мы хотели бы поблагодарить авторов сайта FastSAM за их значительный вклад в область сегментации экземпляров в реальном времени:
Оригинальную статью FastSAM можно найти на arXiv. Авторы сделали свою работу общедоступной, а кодовую базу можно найти на GitHub. Мы ценим их усилия, направленные на развитие области и обеспечение доступности их работы для широкого сообщества.
Создано 2023-11-12, Обновлено 2024-05-01
Авторы: RizwanMunawar (1), glenn-jocher (8), Laughing-q (1), berry-ding (1)