YOLOv5输入端(一)—— Mosaic数据增强|CSDN创作打卡

本文详细解析了YOLOv5中的Mosaic数据增强技术,涉及load_mosaic函数中的图片裁剪、拼接及标签处理过程,同时解读了load_image和random_perspective函数的作用。通过实例学习和关键代码剖析,助力初学者理解和实践图像增强方法。

入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。

目录

一、原理分析

二、代码分析

1、主体部分——load_mosaic

2、load_image函数

3、random_perspective()函数(详见代码解析)


一、原理分析

YOLOv5采用和YOLOv4一样的Mosaic数据增强。

主要原理:它将一张选定的图片和随机的3张图片进行随机裁剪,再拼接到一张图上作为训练数据。

这样可以丰富图片的背景,而且四张图片拼接在一起变相提高了batch_size,在进行batch normalization(归一化)的时候也会计算四张图片。

这样让YOLOv5对本身batch_size不是很依赖。


二、代码分析

1、主体部分——load_mosaic

    labels4, segments4 = [], []
    s = self.img_size #获取图像尺寸
    yc, xc = (int(random.uniform(-x, 2 * s + x)) for x in self.mosaic_border)  # mosaic center x, y
    #random.uniform随机生成上述范围的实数(即一半图像尺寸到1.5倍图像尺寸)
    #这里是随机生成mosaic中心点

先初始化标注列表为空,然后获取图像尺寸s

根据图像尺寸利用random.uniform()随机生成mosaic中心点,范围在(即一半图像尺寸到1.5倍图像尺寸)

    indices = [index] + random.choices(self.indices, k=3)  # 3 additional image indices
    #随机生成另外3张图片的索引
    #random.choices——随机生成3个图片总数内的索引
    #然后一起把索引,连同原先选定的图片打包进indices
    random.shuffle(indices)
    #对这些索引值随机排序

利用random.choices()随机生成另外3张图片的索引,将这4张图片的索引填进indices列表,然后利用random.shuffle()对这些索引值随机排序

for i, index in enumerate(indices): #循环遍历这些图片
        # Load image
        img, _, (h, w) = load_image(self, index)#加载图片和高宽

循环遍历这4张图片,并且调用load_image()函数加载图片和对应高宽

接下来就是如何放置这4张图啦~

        # place img in img4
        if i == 0:  # top left(左上角)
            img4 = np.full((s * 2, s * 2, img.shape[2]), 114, dtype=np.uint8)  # base image with 4 tiles
            #先生成背景图
            x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc  # xmin, ymin, xmax, ymax (large image)
            #设置大图上的位置(要么原图大小,要么放大)(w,h)或(xc,yc)(新生成的那张大图)
            x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h  # xmin, ymin, xmax, ymax (small image)
            #选取小图上的位置(原图)

第一张图片放在左上角

img4首先用np.full()函数填充初始化大图,尺寸是4张图那么大

然后分别设置大图上该图片的位置,以及相应的在原图(即小图)上截取的位置坐标

        elif i == 1:  # top right(右上角)
            x1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, s * 2), yc
            x1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), h
        elif i == 2:  # bottom left(左下角)
            x1a, y1a, x2a, y2a = max(xc - w, 0), yc, xc, min(s * 2, yc + h)
            x1b, y1b, x2b, y2b = w - (x2a - x1a), 0, w, min(y2a - y1a, h)
        elif i == 
### YOLOv5Mosaic 数据增强的实现方式 #### 背景介绍 YOLOv5输入引入了种名为 **Mosaic 数据增强** 技术,该方法通过组合四张图片来生成张新的训练样本[^1]。这种方法不仅增加了模型对不同场景的学习能力,还减少了对批量大小(batch size)的依赖性[^3]。 --- #### Mosaic 数据增强的核心原理 Mosaic 增强的主要目标是将四张不同的图像拼接成个新的图像,并调整其标注框的位置以匹配新图像中的物体位置。具体来说: - 随机选取四个图像作为输入。 - 定义个随机中心点 `(yc, xc)` 来决定如何分割这四张图并将其拼接在起。 - 对每张图像进行裁剪、缩放以及可能的比例变换操作[^2]。 - 将这些处理后的子图像按照定义好的布局重新排列形成最终的新图像。 这种技术可以显著提升检测器对于复杂背景和多尺度对象的理解能力。 --- #### 主要代码解析 (`load_mosaic` 函数) 以下是 `load_mosaic` 函数的关键部分及其功能说明: ```python def load_mosaic(self, index): labels4, segments4 = [], [] s = self.img_size # 获取图像尺寸 yc, xc = (int(random.uniform(-x, 2 * s + x)) for x in self.mosaic_border) # mosaic center x, y indices = [index] + random.choices(range(len(self.labels)), k=3) # 取出当前索引和其他三个随机索引 random.shuffle(indices) for i, index in enumerate(indices): # 遍历四个选定的图像 img, _, (h, w) = self.load_image(index) # 加载原始图像 if i == 0: # top left 图像 x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc # 计算裁剪区域 x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h # 对应原图上的裁剪区域 elif i == 1: # top right 图像 x1a, y1a, x2a, y2a = xc, max(yc - h, 0), min(xc + w, s * 2), yc x1b, y1b, x2b, y2b = 0, h - (y2a - y1a), min(w, x2a - x1a), h elif i == 2: # bottom left 图像 x1a, y1a, x2a, y2a = max(xc - w, 0), yc, xc, min(s * 2, yc + h) x1b, y1b, x2b, y2b = w - (x2a - x1a), 0, w, min(y2a - y1a, h) elif i == 3: # bottom right 图像 x1a, y1a, x2a, y2a = xc, yc, min(xc + w, s * 2), min(s * 2, yc + h) x1b, y1b, x2b, y2b = 0, 0, min(w, x2a - x1a), min(y2a - y1a, h) img4[y1a:y2a, x1a:x2a] = img[y1b:y2b, x1b:x2b] # 合并图像片段至img4上 ``` 上述代码实现了以下逻辑: 1. 初始化变量用于存储标签信息。 2. 设置图像尺寸参数 `s` 和随机中心点坐标 `(xc, yc)`。 3. 随机选择四个图像索引,并打乱顺序以便于后续拼接过程更加多样化。 4. 根据所选图像的不同位置分别计算它们对应的裁剪边界条件。 5. 将各部分按指定规则粘贴到统的大画布 `img4` 上完成整个马赛克构建流程。 --- #### 实现细节补充 除了基本的数据增强外,在实际应用过程中还可以加入其他辅助手段进步优化效果,比如颜色抖动(Color Jittering),高斯模糊(Gaussian Blur)等额外预处理步骤来模拟更多真实世界的变化情况从而提高泛化性能。 --- ### 总结 通过对以上内容的阐述可以看出,YOLOv5采用的MOSAIC策略确实有效增强了网络学习特征的能力同时也降低了传统意义上关于批次数量设置方面的要求限制. ---
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tt丫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值