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

Ultralytics Документы: Использование YOLOv8 вместе с SAHI для получения результатов по фрагментам

Добро пожаловать на Ultralytics , где описано, как использовать YOLOv8 с SAHI (Slicing Aided Hyper Inference). Это исчерпывающее руководство призвано снабдить тебя всеми необходимыми знаниями, которые понадобятся тебе для реализации SAHI наряду с YOLOv8. Мы подробно расскажем о том, что такое SAHI, почему гиперанализ с нарезкой критически важен для крупномасштабных приложений и как интегрировать эти функции с YOLOv8 для повышения производительности обнаружения объектов.

Обзор нарезного умозаключения SAHI

Введение в SAHI

SAHI (Slicing Aided Hyper Inference) - это инновационная библиотека, предназначенная для оптимизации алгоритмов обнаружения объектов на крупномасштабных снимках высокого разрешения. Ее основная функциональность заключается в разбиении изображений на управляемые фрагменты, выполнении обнаружения объектов на каждом фрагменте и последующем сшивании результатов вместе. SAHI совместим с целым рядом моделей обнаружения объектов, включая серию YOLO, что обеспечивает гибкость при оптимальном использовании вычислительных ресурсов.

Ключевые особенности SAHI

  • Бесшовная интеграция: SAHI без особых усилий интегрируется с моделями YOLO , а это значит, что ты можешь приступать к нарезке и детектированию без особых модификаций кода.
  • Эффективность использования ресурсов: Разбивая большие изображения на более мелкие части, SAHI оптимизирует использование памяти, позволяя тебе запускать высококачественное обнаружение на оборудовании с ограниченными ресурсами.
  • Высокая точность: SAHI поддерживает точность обнаружения, используя умные алгоритмы для слияния перекрывающихся блоков обнаружения в процессе сшивки.

Что такое "срезанное умозаключение"?

Sliced Inference - это практика разбиения большого изображения или изображения высокого разрешения на более мелкие сегменты (срезы), обнаружения объектов на этих срезах, а затем перекомпиляции срезов для восстановления местоположения объектов на исходном изображении. Эта техника неоценима в сценариях, где вычислительные ресурсы ограничены или при работе с изображениями очень высокого разрешения, которые в противном случае могут привести к проблемам с памятью.

Преимущества умозаключений в разрезе

  • Снижение вычислительной нагрузки: Маленькие фрагменты изображения обрабатываются быстрее и занимают меньше памяти, что обеспечивает более плавную работу на менее производительном оборудовании.

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

  • Улучшенная масштабируемость: Методика позволяет легче масштабировать обнаружение объектов на изображениях разного размера и разрешения, что делает ее идеальной для широкого спектра приложений - от спутниковых снимков до медицинской диагностики.

YOLOv8 без САХИ YOLOv8 с САХИ
YOLOv8 без САХИ YOLOv8 с САХИ

Установка и подготовка

Установка

Чтобы приступить к работе, установи последние версии SAHI и Ultralytics:

pip install -U ultralytics sahi

Импортируй модули и загружай ресурсы

Вот как импортировать необходимые модули и загрузить модель YOLOv8 и несколько тестовых изображений:

from sahi.utils.yolov8 import download_yolov8s_model
from sahi import AutoDetectionModel
from sahi.utils.cv import read_image
from sahi.utils.file import download_from_url
from sahi.predict import get_prediction, get_sliced_prediction, predict
from pathlib import Path
from IPython.display import Image

# Download YOLOv8 model
yolov8_model_path = "models/yolov8s.pt"
download_yolov8s_model(yolov8_model_path)

# Download test images
download_from_url('https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/small-vehicles1.jpeg', 'demo_data/small-vehicles1.jpeg')
download_from_url('https://raw.githubusercontent.com/obss/sahi/main/demo/demo_data/terrain2.png', 'demo_data/terrain2.png')

Стандартное умозаключение с YOLOv8

Создай модель

Ты можешь инстанцировать модель YOLOv8 для обнаружения объектов следующим образом:

detection_model = AutoDetectionModel.from_pretrained(
    model_type='yolov8',
    model_path=yolov8_model_path,
    confidence_threshold=0.3,
    device="cpu",  # or 'cuda:0'
)

Выполни стандартное предсказание

Выполни стандартное умозаключение, используя путь к изображению или numpy-изображение.

# With an image path
result = get_prediction("demo_data/small-vehicles1.jpeg", detection_model)

# With a numpy image
result = get_prediction(read_image("demo_data/small-vehicles1.jpeg"), detection_model)

Визуализируй результаты

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

result.export_visuals(export_dir="demo_data/")
Image("demo_data/prediction_visual.png")

Разрезанное умозаключение с YOLOv8

Выполни умозаключение с использованием срезов, указав размеры срезов и коэффициенты перекрытия:

result = get_sliced_prediction(
    "demo_data/small-vehicles1.jpeg",
    detection_model,
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2
)

Обработка результатов предсказаний

SAHI предоставляет PredictionResult объект, который можно преобразовать в различные форматы аннотаций:

# Access the object prediction list
object_prediction_list = result.object_prediction_list

# Convert to COCO annotation, COCO prediction, imantics, and fiftyone formats
result.to_coco_annotations()[:3]
result.to_coco_predictions(image_id=1)[:3]
result.to_imantics_annotations()[:3]
result.to_fiftyone_detections()[:3]

Предсказание партии

Для пакетного предсказания на директории с изображениями:

predict(
    model_type="yolov8",
    model_path="path/to/yolov8n.pt",
    model_device="cpu",  # or 'cuda:0'
    model_confidence_threshold=0.4,
    source="path/to/dir",
    slice_height=256,
    slice_width=256,
    overlap_height_ratio=0.2,
    overlap_width_ratio=0.2,
)

Вот и все! Теперь ты готов использовать YOLOv8 с SAHI как для стандартных, так и для нарезных выводов.

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

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

@article{akyon2022sahi,
  title={Slicing Aided Hyper Inference and Fine-tuning for Small Object Detection},
  author={Akyon, Fatih Cagatay and Altinuc, Sinan Onur and Temizel, Alptekin},
  journal={2022 IEEE International Conference on Image Processing (ICIP)},
  doi={10.1109/ICIP46576.2022.9897990},
  pages={966-970},
  year={2022}
}

Мы выражаем благодарность исследовательской группе SAHI за создание и поддержку этого бесценного ресурса для сообщества компьютерного зрения. Чтобы узнать больше о SAHI и его создателях, посети репозиторий SAHI на GitHub.



Создано 2023-11-12, Обновлено 2023-11-22
Авторы: glenn-jocher (3)

Комментарии