前言
本文记录项目中涉及到了无人机正射图像的推理(通常8000像素*8000像素以上),由于模型推理尺寸是640*640的,如果直接整图送入模型推理,推理效果极差,可以考虑采用多个切片进行分别进行推理,最后合并推理结果的方式。如何增强小目标检测?SAHI与Yolov8完美结合
一、SAHI介绍
SAHI(Slicing Aided Hyper Inference,切片辅助超推理)是一种专为优化小目标检测设计的通用框架,其核心思想是通过图像切片和分层推理提升检测效果,尤其适用于处理大尺寸图像中的小目标。
切片推理
SAHI通过滑动窗口将原始图像分割为多个重叠的子图(切片),并对每个子图和整张原图分别进行推理。切片后的小目标在子图中占据更大比例,从而增强模型对细节特征的捕捉能力。所有子图的检测结果会与原图的检测结果合并,最终通过非极大值抑制(NMS)过滤重复框,得到全局最优结果。
兼容性设计
SAHI无需修改现有检测器的结构,支持与YOLOv8、YOLOv5、MMDetection等主流框架无缝集成。用户只需加载预训练模型并调用SAHI的接口即可实现推理优化。
二、使用步骤
图像切片
参数配置:需定义切片尺寸(slice_height、slice_width)和重叠率(overlap_height_ratio、overlap_width_ratio)。例如,设置切片为640×640像素,重叠率0.2(即相邻切片重叠20%的区域)。
滑动窗口逻辑:切片时从左上角开始,按行列顺序移动窗口。若图像边缘无法完整切片,则反向调整窗口位置以确保覆盖全图。
推理与结果融合
对每个切片和原图分别进行目标检测,生成候选框。
将所有候选框映射回原图坐标系,合并后通过NMS(如IoU阈值0.45)过滤冗余框。
代码示例
此处选用支持分割的项目进行调试,项目代码地址:https://github.com/sweetlhare/sahi-yolov8-instance-segmentation
新建test.py
from sahi import AutoDetectionModel
from sahi.predict import get_sliced_prediction
# 加载模型
detection_model = AutoDetectionModel.from_pretrained(
model_type='yolov8',
model_path='yolov8-seg.pt',
confidence_threshold=0.45,
device='cuda:0'
)
# 切片推理
result = get_sliced_prediction(
'small-vehicles.jpeg',
detection_model,
slice_height=640,
slice_width=640,
overlap_height_ratio=0.2,
overlap_width_ratio=0.2
)
# 保存可视化结果
result.export_visuals(export_dir='output/')
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
结果对比
此效果为整图推理的效果;
此图为sahi方式后的推理效果;
可以看出对小目标的检测提升很大。
总结
SAHI可以提高大图中小目标的检测精度,SAHI 的主要优势在于它与模型无关,可以搭配各种模型。但是检测精度的提升是基于切片的多次推理实现的,切片数量与计算时间成正比,需权衡检测精度与实时性要求。
参考文档:
https://github.com/obss/sahi/tree/main
https://github.com/sweetlhare/sahi-yolov8-instance-segmentation
https://blog.csdn.net/demm868/article/details/143160318
如果阅读本文对你有用,欢迎一键三连呀!!!
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/JulyLi2019/article/details/146062570