Skip to content

chernovssss/sahi_lib_article

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

SAHI: Slicing Aided Hyper Inference

A lightweight vision library for performing large scale object detection & instance segmentation
Оригинальная статья: Slicing Aided Hyper Inference and Fine-Tuning for Small Object Detection
Официальный репозиторий: github

Abstract

Современные детекторы плохо справляются с детекцией небольших объектов. Что бы решить эту проблему был разработан SAHI.

SAHI "с нахлёстом" разрезает изображение на несколько изображений поменьше. На них уже производится инференс, а результаты склеиваются обратно в исходное изображение.

Блокнот с демонстрацией возможностей: sahi_demo.ipynb

Гифка с демонстрацией: teaser

SAHI может быть использован поверх любого детектора.
Имеются CLI команды
Интеграция с roboflow

Проблема Small Object Detection

Объекты относительно небольшого размера - это объекты, которые обычно имеют ограниченную пространственную протяженность и низкий охват пикселей, и их может быть сложно обнаружить из-за небольшого внешнего вида и низкого отношения сигнал/шум.

Детектить их сложно потому что:

  1. Limited Receptive Field
  2. Limited Spatial Resolution
  3. Limited Contextual Information
  4. Class Imbalance
  5. Feature Representation
  6. Scale Variation
  7. Training Data Bias

Можно обратить внимание на репозиторий Awesome Tiny Object Detection. Там список статей в которых люди занимаются детекцией/сегментацией/локализацией чего-то маленького.

или заглянуть сюда и посмотреть как применяется SAHI и какие результаты даёт:
List of publications that cite SAHI (currently 100+)

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

Весь важный код в slicing.py

get_sliced_prediction - Функция для разрезки изображения -> получение прогноза для каждого среза -> объединение прогнозов в полное изображение.

Простой вариант использования:

result = get_sliced_prediction(
    "img_path" | np.ndarray,
    detection_model, # DetectionModel
    slice_height = 256, # Height of each slice
    slice_width = 256, # Width of each slice
    overlap_height_ratio = 0.2, # Fractional overlap in height of each window (e.g. an overlap of 0.2 for a window of size 512 yields an overlap of 102 pixels). 
    overlap_width_ratio = 0.2 # Fractional overlap in width of each window
)

По тому же интерфейсу можно резать картинки "на ходу" с помощью sahi.slicing.slice_image или с помощью sahi.slicing.slice_coco нарезать из директории для дальнего использования.

Посмотреть/по запускать нарезку можно тут: slicing.ipynb

или можно заглянуть в официальные туториалы:

  • YOLOX + SAHI demo: sahi-yolox (RECOMMENDED)
  • YOLOv5 + SAHI walkthrough: sahi-yolov5
  • MMDetection + SAHI walkthrough: sahi-mmdetection
  • Detectron2 + SAHI walkthrough: sahi-detectron2
  • HuggingFace + SAHI walkthrough: sahi-huggingface
  • TorchVision + SAHI walkthrough: sahi-torchvision

CLI Commands

Имеются также CLI команды.

Command Description
predict perform sliced/standard video/image prediction using any yolov5/mmdet/detectron2/huggingface model
predict-fiftyone perform sliced/standard prediction using any yolov5/mmdet/detectron2/huggingface model and explore results in fiftyone app
coco slice automatically slice COCO annotation and image files
coco fiftyone explore multiple prediction results on your COCO dataset with fiftyone ui ordered by number of misdetections
coco evaluate evaluate classwise COCO AP and AR for given predictions and ground truth
coco analyse calculate and export many error analysis plots
coco yolov5 automatically convert any COCO dataset to yolov5 format

Дополнительные материалы

Exploring SAHI: Slicing Aided Hyper Inference for Small Object Detection
Slicing Aided Hyper Inference (SAHI) for Small Object Detection | Explained

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published