A lightweight vision library for performing large scale object detection & instance segmentation
Оригинальная статья: Slicing Aided Hyper Inference and Fine-Tuning for Small Object Detection
Официальный репозиторий: github
Современные детекторы плохо справляются с детекцией небольших объектов. Что бы решить эту проблему был разработан SAHI.
SAHI "с нахлёстом" разрезает изображение на несколько изображений поменьше. На них уже производится инференс, а результаты склеиваются обратно в исходное изображение.
Блокнот с демонстрацией возможностей: sahi_demo.ipynb
SAHI может быть использован поверх любого детектора.
Имеются CLI команды
Интеграция с roboflow
Объекты относительно небольшого размера - это объекты, которые обычно имеют ограниченную пространственную протяженность и низкий охват пикселей, и их может быть сложно обнаружить из-за небольшого внешнего вида и низкого отношения сигнал/шум.
Детектить их сложно потому что:
- Limited Receptive Field
- Limited Spatial Resolution
- Limited Contextual Information
- Class Imbalance
- Feature Representation
- Scale Variation
- 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+SAHIdemo:(RECOMMENDED)
YOLOv5+SAHIwalkthrough:MMDetection+SAHIwalkthrough:Detectron2+SAHIwalkthrough:HuggingFace+SAHIwalkthrough:TorchVision+SAHIwalkthrough:
Имеются также 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
