mosaic图像增强技术基于现有数据极大的丰富了样本的多样性,极大程度降低了模型对于多样性学习的难度
本文将对yolov5中mosaic实现的核心源码进行解析并结合自身项目经历谈下其局限性
mosaic实现位于datasets.py中的load_mosaic()函数,入参是当前训练的图片序号,出参是一幅经过mosaic图像增强的图片及其label
经过如下步骤得到mosaic增强图像:
step1. 假设模型输入尺寸为s,生成一幅尺寸为2s * 2s的灰色图
step2. 从点A(s/2, s/2)和点B(3s/2, 3s/2)限定的矩形内随机选择一点作为拼接点,代码如下
yc, xc = [int(random.uniform(-x, 2 * s + x)) for x in self.mosaic_border] # mosaic center x, y
step3. 随机选择四张图,取其部分拼入该图,如下图所示,四种颜色代表四张样本图,超出的部分将被舍弃
step4. 将图片进行变换后得到最终输出,对应代码和示意图如下
# Augment
img4, labels4 = random_perspective(img4, labels4,
degrees=self.hyp['degrees'],
translate=self.hyp['translate'],
scale=self.hyp['scale'],
shear=self.hyp['shear'],
perspective=self.hyp['perspective'],
border=self.mosaic_border) # border to remove