
151、YOLOv8改进实战:基于SAHI切片辅助推理的小目标检测优化与代码实现一个让我熬夜三天的bug去年做无人机航拍检测项目,模型在VisDrone上mAP能到52,一换到自己的航拍数据集直接掉到31。排查了三天,不是过拟合,不是标注问题,最后发现是目标太小——640×640的输入图上,一辆车才8×12像素,特征图下采样到20×20的时候,这辆车连一个格子都占不满。这就是小目标检测最典型的困境:特征图分辨率不够,目标信息在多次下采样中丢失了。后来在GitHub上翻到SAHI(Slicing Aided Hyper Inference),试了一下,mAP从31直接跳到47。今天就把这个方案拆开揉碎了讲清楚,包括我踩过的坑和优化过的代码。SAHI的核心逻辑:大图切小图,小图做检测SAHI的思路其实很朴素:既然小目标在原始大图上特征太少,那就把大图切成若干小图,每个小图独立推理,最后把结果拼回去。听起来简单,但实现细节里全是坑。切片策略有两种:常规网格切分和带重叠的滑动窗口切分。实际工程中必须用后者,因为目标可能正好被切在边界上。我一开始用不重叠的网格切,结果边界上的目标漏检率高达40%。重叠率一般设20%-30%,航拍场景我习惯设25%,既能保证边界目标完整,又不会产生太多冗余计算。切片大小需要根据你的模型输入尺寸来定。YOLOv8默认输入640×640,那切片大小就设640×640。有人问能不能设小一点比如320×320,理论上可以,但小图包含的上下文信息太少,检测精度反而下降。我测试过,640×640