
171、Mosaic 数据增强源码拆解:四图拼接逻辑、拼接中心随机化与标注框 affine 变换从一次诡异的mAP波动说起去年秋天调YOLOv5s的蒸馏模型,batch size从16改到32,mAP@0.5:0.95直接掉了3个点。排查了学习率、BN层、梯度累积,最后发现是Mosaic的随机种子在作祟——多卡训练时每张卡的Mosaic拼接中心分布不均匀,导致某些卡上的小目标密度异常。这个坑让我意识到,Mosaic不是简单的“四张图拼一起”,它的随机化策略直接影响训练稳定性。今天拆解YOLOv11(其实v5到v11的Mosaic核心逻辑没变)的Mosaic实现,重点讲三个容易翻车的地方:四图拼接的坐标计算、拼接中心随机化对数据分布的影响、标注框的affine变换细节。代码基于ultralytics源码,但我会用更直白的写法,方便你直接改到自己的项目里。四图拼接:别被“随机拼接”骗了很多人以为Mosaic是随机把四张图扔到画布上,实际上它有一个固定的“田字格”逻辑。画布尺寸是(2*img_size, 2*img_size),四张图分别占据左上、右上、左下、右下四个象限。关键在拼接中心点(cx, cy)——它不是画布中心,而是在[img_size/2, 3*img_size/2]范围内随机采样。import