Ultralytics YOLO27:
Get Started

Использование YOLO26 с SAHI для инференса по фрагментам#

Open SAHI for Sliced Inference In Colab

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

Введение в SAHI#

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



Смотри: Как использовать SAHI с Ultralytics YOLO26 для обнаружения небольших объектов | Инференс с разбиением на фрагменты 🚀

Основные возможности SAHI#

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

Что такое инференс по фрагментам?#

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

Преимущества инференса по фрагментам#

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

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

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

YOLO26 без SAHIYOLO26 с SAHI
YOLO26 without SAHIYOLO26 with SAHI

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

Установка#

Для начала установи последние версии SAHI и Ultralytics:

pip install -U ultralytics sahi

Импорт модулей и загрузка ресурсов#

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

from sahi.utils.file import download_from_url

# Загрузка тестовых изображений
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",
)

Стандартный инференс с YOLO26#

Создание экземпляра модели#

Создать экземпляр модели YOLO26 для обнаружения объектов можно так:

from sahi import AutoDetectionModel

detection_model = AutoDetectionModel.from_pretrained(
    model_type="ultralytics",
    model_path="yolo26n.pt",
    confidence_threshold=0.3,
    device="cpu",  # или 'cuda:0'
)

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

Выполни стандартный инференс, указав путь к изображению.

from sahi.predict import get_prediction

result = get_prediction("demo_data/small-vehicles1.jpeg", detection_model)

result.export_visuals(export_dir="demo_data/", hide_conf=True)

Визуализация результатов#

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

from PIL import Image

# Открытие предсказанного изображения
processed_image = Image.open("demo_data/prediction_visual.png")

# Отображение предсказанного изображения
processed_image.show()

Инференс по фрагментам с YOLO26#

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

from PIL import Image
from sahi.predict import get_sliced_prediction

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

# Экспорт результатов
result.export_visuals(export_dir="demo_data/", hide_conf=True)

# Открытие предсказанного изображения
processed_image = Image.open("demo_data/prediction_visual.png")

# Отображение предсказанного изображения
processed_image.show()

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

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

# Доступ к списку предсказанных объектов
object_prediction_list = result.object_prediction_list

# Преобразование в форматы аннотаций COCO и предсказаний COCO
result.to_coco_annotations()[:3]
result.to_coco_predictions(image_id=1)[:3]
Дополнительные форматы экспорта

PredictionResult также может преобразовывать результаты обнаружения в объекты imantics и FiftyOne с помощью result.to_imantics_annotations() и result.to_fiftyone_detections(). Для этих методов нужны соответствующие пакеты, поэтому сначала установи их с помощью pip install imantics fiftyone.

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

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

from sahi.predict import predict

predict(
    model_type="ultralytics",
    model_path="yolo26n.pt",
    model_device="cpu",  # или '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,
)

Теперь ты готов использовать YOLO26 с 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.

Часто задаваемые вопросы#

  • Интеграция Ultralytics YOLO26 с SAHI (Slicing Aided Hyper Inference) для инференса по фрагментам оптимизирует обнаружение объектов на изображениях высокого разрешения, разделяя их на удобные для обработки части. Такой подход эффективнее использует память и обеспечивает высокую точность обнаружения. Для начала установи библиотеки ultralytics и sahi:

    pip install -U ultralytics sahi

    Затем загрузи тестовые изображения:

    from sahi.utils.file import download_from_url
    
    # Загрузка тестовых изображений
    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",
    )

    Подробные инструкции см. в нашем руководстве по инференсу по фрагментам.

  • Использование SAHI с Ultralytics YOLO26 для обнаружения объектов на больших изображениях даёт несколько преимуществ:

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

    Подробнее о преимуществах инференса по фрагментам читай в нашей документации.

  • Да, при использовании YOLO26 с SAHI можно визуализировать результаты предсказания. Вот как экспортировать и визуализировать результаты:

    from PIL import Image
    
    result.export_visuals(export_dir="demo_data/", hide_conf=True)
    
    processed_image = Image.open("demo_data/prediction_visual.png")
    
    processed_image.show()

    Эта команда сохранит визуализированные предсказания в указанном каталоге. Затем можно загрузить изображение, чтобы просмотреть его в блокноте или приложении. Подробные инструкции см. в разделе Стандартный инференс.

  • SAHI (Slicing Aided Hyper Inference) предлагает несколько возможностей, дополняющих Ultralytics YOLO26 при обнаружении объектов:

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

    Чтобы узнать больше, прочитай об основных возможностях SAHI.

  • Чтобы выполнять масштабный инференс с YOLO26 и SAHI, следуй этим рекомендациям:

    1. Установи необходимые библиотеки: убедись, что у тебя установлены последние версии ultralytics и sahi.
    2. Настрой инференс по фрагментам: подбери оптимальные размеры фрагментов и коэффициенты перекрытия для своего проекта.
    3. Запускай пакетные предсказания: используй возможности SAHI для пакетного выполнения предсказаний на изображениях из каталога — это повысит эффективность.

    Пример пакетного предсказания:

    from sahi.predict import predict
    
    predict(
        model_type="ultralytics",
        model_path="path/to/yolo26n.pt",
        model_device="cpu",  # или '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,
    )

    Подробные инструкции смотри в разделе Пакетное предсказание.

Комментарии