SAHI技术提升小目标检测精度

SAHI(Slicing Aided Hyper Inference)是一种提高小目标检测精度的常用方法,它通过在图像的部分区域运行推理,然后累积结果来实现。在本指南中,将展示如何使用SAHI和supervision库来检测图像中的小目标。supervision是一个Python包,提供了一系列计算机视觉项目中常用的工具。supervision的SAHI实现是模型无关的,这意味着可以在多种模型上使用它。将通过一个在海滩图像中检测目标的示例来演示SAHI的使用。

以下是在未使用SAHI和使用SAHI的情况下运行推理的图像示例:左侧为未使用SAHI的结果,右侧为使用SAHI的结果。可以尝试在Roboflow工作流中使用SAHI,具体方法如下:

开始之前

SAHI是一种在计算机视觉模型上运行推理的技术,它有助于检测图像中的较小目标。SAHI通过在图像的较小部分上运行推理,然后将结果拼接在一起,以显示图像中的所有检测结果。例如,假设正在进行空中调查,想要计算图像中房屋的数量,或者正在监控海滩在高峰时段的繁忙程度。在这两种情况下,预测可能很小,SAHI可以帮助提高目标的检测率。

介绍的SAHI使用方法是模型无关的,支持所有带有supervision数据加载器的模型。无论是使用Roboflow Inference部署的模型,使用Ultralytics YOLOv8 Python包部署的模型,还是使用Transformers Python包中的视图模型,或者是其他带有支持的数据加载器的模型,都可以按照下面的说明使用SAHI。

步骤1:设置模型

首先,需要一个模型来运行推理。在本指南中,将使用Roboflow Universe中的一个人检测模型。可以使用任何Roboflow Universe上的模型,与账户关联的私有模型,或者是其他带有supervision数据加载器的模型类型。

将在自己的硬件上使用Roboflow Inference部署此模型。Inference是一个用于生产环境中运行视觉模型的高性能服务器。Inference是Roboflow API背后的技术,为计算机视觉推理提供了数百万次API调用。首先,需要安装Inference。可以使用以下代码来实现:

pip install inference inference-sdk

现在,可以开始编写一个脚本来使用模型和SAHI。创建一个新的Python文件,并添加以下代码:

import supervision as sv import numpy as np import cv2 from inference import get_roboflow_model image_file = "image.jpeg" image = cv2.imread(image_file) model = get_roboflow_model(model_id="people-detection-general/5", api_key="API_KEY") def callback(image_slice: np.ndarray) -> sv.Detections: results = model.infer(image_slice)[0] return sv.Detections.from_inference(results)

在这段代码中,定义了一个回调函数,该函数接受一个图像,并使用Roboflow API运行推理并返回结果。当第一次运行程序时,系统会要求使用交互式登录界面登录Roboflow。在上面的代码中,将people-detection-general替换为Roboflow模型ID,将5替换为想要运行的模型版本。

步骤2:使用SAHI切片器运行推理

现在已经设置了模型,可以使用SAHI切片器运行推理了。可以使用以下代码来实现:

slicer = sv.InferenceSlicer(callback=callback) sliced_detections = slicer(image=image)

这段代码创建了一个切片器对象,该对象接受在前一步中定义的模型推理回调函数。然后使用切片器对象对图像运行推理。切片器对象将指定的图像分割成一系列较小的图像,并对这些图像运行推理。

要显示SAHI预测结果,可以使用以下代码:

label_annotator = sv.LabelAnnotator() box_annotator = sv.BoxAnnotator() annotated_image = box_annotator.annotate( scene=image.copy(), detections=sliced_detections) annotated_image = label_annotator.annotate( scene=annotated_image, detections=sliced_detections) sv.plot_image(annotated_image)

以下是使用和未使用SAHI进行推理的结果:左侧是没有使用SAHI处理的图像,右侧是使用SAHI处理的图像。使用SAHI运行模型能够捕获比不使用SAHI时更多的目标。

SAHI是一种提高目标检测模型对小目标检测率的技术。SAHI通过在图像的“切片”上运行推理,然后将结果组合在整个图像上。supervision在其中内置了加载器。结合Roboflow API或自托管的Roboflow Inference解决方案,可以使用SAHI技术在Roboflow上托管的模型上运行推理。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485