123、YOLOv8改进实战:多尺度训练策略——动态输入尺寸与尺度抖动的工程实现与效果分析

123、YOLOv8改进实战:多尺度训练策略——动态输入尺寸与尺度抖动的工程实现与效果分析 123、YOLOv8改进实战:多尺度训练策略——动态输入尺寸与尺度抖动的工程实现与效果分析去年有个项目让我印象特别深。客户要求检测场景里从几十像素的小目标到占据半幅画面的近景目标,模型在验证集上mAP看着还行,一上实际视频流就翻车——小目标漏检严重,大目标定位偏移。我盯着训练日志看了半天,发现输入尺寸一直固定在640×640,心里咯噔一下:这模型压根没见过不同尺度的目标长啥样。多尺度训练这个思路其实不新鲜,YOLOv8官方代码里也留了口子,但真正落地的时候坑不少。今天把这套策略的工程实现掰开揉碎讲清楚,包括动态输入尺寸和尺度抖动两个层面的东西,以及我在实际项目中踩过的那些坑。为什么单尺度训练不够用先想一个问题:你的模型在训练时只见过640×640的图像,但推理时输入可能是各种分辨率,或者目标本身尺度变化极大。模型学到的特征尺度是固定的,它不知道小目标在放大后长什么样,也不知道大目标缩小后该怎么定位。更隐蔽的问题是数据增强里的随机裁剪和缩放。如果你固定输入尺寸,这些增强操作其实是在一个固定画布上做文章,模型对目标尺度的鲁棒性完全依赖这些增强的随机性。但增强的随机范围是有限的,远不如让模型直接看到不同分辨率的输入来得直接。动态输入尺寸:让模型适应不同分辨率YOLOv8的训练流程里,数据加载器会先把图像缩放到指定尺寸再送入网络。动态输入尺寸的核心思路是:每个epoch或者每个batch随机选择一个输入尺寸,让模型在不同分辨率下学习。我在ultralytics的源码里找到loaders.py