
048、YOLOv11数据采样优化——自适应图像采样策略与类别平衡重采样的即插即用模块与性能提升一个让我失眠三天的bug去年秋天做工业缺陷检测项目,训练集里正常样本占了85%,剩下的15%分布在12种缺陷类别上。YOLOv11训练了200个epoch,mAP@0.5:0.95卡在0.32死活上不去。翻看训练日志,发现模型对占比0.3%的“划痕”类检测率几乎为零——不是检测不到,是压根没学会这个类长什么样。当时我第一反应是调loss权重,试了Focal Loss、Class-balanced Loss,效果有提升但有限。后来仔细看了数据加载流程,发现问题出在采样上:每个epoch里,模型看到“划痕”样本的次数不到20次,而正常样本看了上万次。这种极度不平衡下,再好的loss函数也救不了采样策略的缺陷。采样策略为什么比loss权重更关键很多人一上来就调loss权重,觉得给稀有类加大惩罚系数就能解决问题。但实际调试中我发现,loss权重只是改变了梯度更新的幅度,而采样策略决定了模型“看到”什么。如果模型连稀有类长什么样都没见过几次,权重再大也只是在没见过的东西上瞎猜。YOLOv11默认的RandomSampler是均匀采样,每个样本被抽到的概率相等。这在平衡数据集上没问题,但遇到长尾分布,稀有类样本被抽到的概率极低。更隐蔽的问题是,即使你用了WeightedRandomSampler给稀有类加权,训练过程中模型会反复看到同样的几个稀有类样本,导致过拟合——我踩过这个坑,验证集上稀有类mAP突然掉到0.1,就是过拟合的典型信号。