SAHI: Slicing Aided Hyper Inference
SAHI是一個用于大規模目標檢測和實例分割的輕量級視覺庫
概述
目標檢測和實例分割是目前計算機視中最重要的應用領域。然而,在實際應中,小目標的檢測和大圖像上的推理仍然是主要的問題,SAHI 來幫助開發人員用許多視覺實用工具克服這些現實世界的問題
教程
<1>Introduction to SAHI
Sahi:一種用于大規模對象檢測和實例分割的視覺庫
github開源:GitHub - obss/sahi: Framework agnostic sliced/tiled inference + interactive ui + error analysis plots
目標檢測和實例分割是目前計算機視覺中最重要的應用領域。然而,在實際應用中,小目標的檢測和大圖像上的推理仍然是主要的問題。
在這里,您可以看到最先進的實例分割模型Cascade MaskRCNN的推理結果:https://github.com/open-mmlab/mmdetection/tree/master/configs/cascade_rcnn#cascade-mask-r-cnn
如圖所示,上方較小的汽車不會被檢測到。
有沒有一種方法,用于檢測這些較小的對象,而無需重新訓練模型也不需要較大的GPU內存分配?
SAHI(切片輔助超推理)可以幫助開發人員克服這些現實世界的問題
看完這篇文章你就知道了
- 介紹對象檢測和實例分割
- SAHI的安裝
- 使用SAHI進行切片推理
- 基于SAHI的圖像和數據集切片
- 使用SAHI為新的檢測框架添加支持
介紹對象檢測和實例分割
A)目標檢測:
目標檢測是指對圖像中存在的所有目標進行識別和正確標記的方法。
這大致包括兩個步驟
1目標定位:在這里,以盡可能緊的方式確定包圍框或包圍區域,以確定物體在圖像中的確切位置。
2:圖像分類:本地化的對象,然后饋送到一個分類器,該分類器標記的對象。
B)語義分割:
它是指將給定圖像中的每個像素鏈接到特定類別標簽的過程。例如,在下面的圖像中,像素被標記為汽車、樹木、行人等。然后使用這些段來查找各種對象之間的相互作用/關系。
C)實例分割:
這里,我們將類標簽與每個像素相關聯,類似于語義分割,不同之處在于它將同一類的多個對象視為單個對象/單獨的實體。
<2>Installation of SAHI
GIF summarizing necessary installation steps for SAHI.
這里直接利用指令pip install -U sahi安裝
然后安裝torchvision,這里我安裝過就不再安裝了,若是安裝遇到困難,可以參考本人的博文,其中有提到crowdcountingp2p代碼復現_追憶苔上雪的博客-CSDN博客
然后安裝檢測框架,比如mmdetmmdet · PyPI
到這里就可在Python中導入和使用任何SAHI函數
?
<3>Sliced inference with SAHI
?Sliced inference with SAHI CLI.
切片推理的概念基本上是在原始圖像的較小切片上執行推理,然后合并原始圖像上的切片預測。可以如下圖所示:
在這里,我們將在此示例圖像上展示一個切片推理演示GitHub - obss/sahi: Framework agnostic sliced/tiled inference + interactive ui + error analysis plots
首先導入教程所需的函數
from sahi import AutoDetectionModel from sahi.predict import get_sliced_prediction from sahi.utils.cv import read_image_as_pilAutoDetectionModel是一個 factory class,支持流行檢測框架,它可用于在任何MMDetection模型上加載和執行切片/標準推理
get_sliced_prediction是用于執行切片推理的函數。
然后,我們需要通過定義所需的參數來創建一個DetectionModel實例
detection_model = AutoDetectionModel.from_pretrained(model_type='mmdet',model_path=mmdet_cascade_mask_rcnn_model_path,config_path=mmdet_cascade_mask_rcnn_config_path,confidence_threshold=0.4,device="cuda:0" )DetectionModel見下圖或者開源的代碼
model_type可以是‘yolov5’, ‘mmdet’, ‘huggingface’, ‘torchvision’, ‘detectron2’,取決于自己的權重文件
model_path 和 config_path 是成功加載任何模型所必須的
得分低于confidence_threshold的預測將在結果中被忽略。
device參數指定推理設備,可以將其設置為cuda:0或cpu。
讀取圖片
image = read_image_as_pil(image_dir)最后,我們可以執行切片預測。在本例中,我們設置重疊率為0.2:
result = get_sliced_prediction(image,detection_model,slice_height = 256,slice_width = 256,overlap_height_ratio = 0.2,overlap_width_ratio = 0.2 )可視化原始圖像上的預測邊界框和masks
result.export_visuals(export_dir="result/") Image("result/prediction_visual.png")可以下述鏈接中完成細節https://colab.research.google.com/github/obss/sahi/blob/main/demo/inference_for_mmdetection.ipynb
https://colab.research.google.com/github/obss/sahi/blob/main/demo/inference_for_yolov5.ipynb
基于SAHI的圖像和數據集切片
可以獨立地使用SAHI(GitHub - obss/sahi: Framework agnostic sliced/tiled inference + interactive ui + error analysis plots)的切片操作。
例如,可以將單個圖像切片為
from sahi.slicing import slice_image slice_image_result, num_total_invalid_segmentation = slice_image(image=image_path,output_file_name=output_file_name,output_dir=output_dir,slice_height=256,slice_width=256,overlap_height_ratio=0.2,overlap_width_ratio=0.2, )或者,可以從任何coco格式的數據集創建切片的coco數據集,如下所示
from sahi.slicing import slice_coco coco_dict, coco_path = slice_coco(coco_annotation_file_path=coco_annotation_file_path,image_dir=image_dir,slice_height=256,slice_width=256,overlap_height_ratio=0.2,overlap_width_ratio=0.2, )與SAHI的命令行接口
?sahi predict cli command
使用權重路徑對 YOLOv5 模型進行推理:
sahi predict --source image_dir/ --model_type yolov5 --model_path yolov5s.pt --slice_height 512 --slice_width 512使用權重路徑和配置路徑為 MMDetection 和 Detectron2 模型執行推理
sahi predict --source image_dir/ --model_type detectron2 --model_path weight.pt --config_path config.yaml --slice_height 512 --slice_width 512誤差分析圖/指標
使用COCO格式的數據集創建COCO格式的預測結果
?Gif showing COCO formatted dataset prediction capabilities of SAHI.
sahi predict --source image_dir/ --dataset_json_path dataset.json --model_type yolov5 --model_path weight.pt --no_sliced_prediction使用已創建的result.json創建錯誤分析圖:
?Gif showing error analysis capabilities of SAHI.
sahi coco analyse --dataset_json_path dataset.json --result_json_path result.json指標的含義:
C75: IOU閾值為0.75時的結果
C50: IOU閾值為0.50時的結果
Loc: 忽略定位錯誤后的結果
Sim: 忽略超類別誤報后的結果
Oth: 忽略所有類別混淆后的結果
BG: 忽略所有誤報后的結果
FN: 忽略所有假陰性后的結果
模型可能有改進的部分
C75-C50 and C50-Loc=更準確的邊界框預測可能帶來的收益
Loc-Sim=修正超類別混淆后的潛在收益
Loc-Oth=修正類別混淆后的潛在收益
Oth-BG=修正所有誤報后的潛在收益
BG-FN=修正所有假陰性后的潛在收益
交互式可視化
安裝fiftyone庫:
pip install -U fiftyone利用預測結果啟動一個fiftyone 網絡應用程序
?Gif showing interactive visualization capabilities of SAHI.
sahi coco fiftyone --dataset_json_path dataset.json --image_dir image_dir/ result.json使用SAHI為新的檢測框架添加支持
SAHI(GitHub - obss/sahi: Framework agnostic sliced/tiled inference + interactive ui + error analysis plots)框架目前支持YOLOv5(GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite),所有MMDetection模型(GitHub - open-mmlab/mmdetection at master),HuggingFace 目標檢測模型 (https://huggingface.co/models?pipeline_tag=object-detection&sort=downloads),所有Detectron2模型,此外還能輕松加到其他新的框架上
需要做的就是在sahi/models/文件夾路徑下(https://github.com/obss/sahi/tree/main/sahi/models)創建 一個新的.py文件然后在.py文件下創建一個繼承來自 DetectionModel class(https://github.com/obss/sahi/blob/7e48bdb6afda26f977b763abdd7d8c9c170636bd/sahi/models/base.py#L12)的類,可以將YOLOv5 wrapper (https://github.com/obss/sahi/blob/7e48bdb6afda26f977b763abdd7d8c9c170636bd/sahi/models/yolov5.py#L17)作為一個參考
總結
以上是生活随笔為你收集整理的SAHI: Slicing Aided Hyper Inference的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GStreamer移植
- 下一篇: 2022年2022年9月5日中软国际Li