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
+SAHI
demo: (RECOMMENDED)YOLOv5
+SAHI
walkthrough:MMDetection
+SAHI
walkthrough:Detectron2
+SAHI
walkthrough:HuggingFace
+SAHI
walkthrough:TorchVision
+SAHI
walkthrough:
Имеются также 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