yolov7中的9-mosaic增强实现原理

yolov7源码链接GitHub - WongKinYiu/yolov7: Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors

4-mosaic增强实现原理: yolov7中的4-mosaic增强实现原理-CSDN博客

一、9-mosaic增强的总体思想

1、构建3×3的画布

s = img_size
img9 = np.full((s * 3, s * 3, 3), 114, dtype=np.uint8)

2、将9张图片依次填入画布

中间

img = cv2.imread(path)
## 原图的h和w
h0, w0 = img.shape[:2]
r = self.img_size / max(h0, w0)  # resize image to img_size
if r != 1:
    interp = cv2.INTER_AREA if r < 1 and not self.augment else cv2.INTER_LINEAR
    img = cv2.resize(img, (int(w0 * r), int(h0 * r)), interpolation=interp)
## resize后的图片的h和w
h, w = img.shape[:2]

h0, w0 = h, w
c = s, s, s + w, s + h

padx, pady = c[:2]
x1, y1, x2, y2 = [max(x, 0) for x in c]
img9[y1:y2, x1:x2] = img[y1 - pady:, x1 - padx:]

上方

"""
h和w为当前图片的高和宽
"""
c = s, s - h, s + w, s

padx, pady = c[:2]
x1, y1, x2, y2 = [max(x, 0) for x in c]
img9[y1:y2, x1:x2] = img[y1 - pady:, x1 - padx:]

右上方

"""
hp和wp为前一张图片的高和宽
"""
c = s + wp, s - h, s + wp + w, s

padx, pady = c[:2]
x1, y1, x2, y2 = [max(x, 0) for x in c]
img9[y1:y2, x1:x2] &
### YOLOv5 中 Mosaic 数据增强实现方式 #### 背景介绍 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策略确实有效增强了网络学习特征的能力同时也降低了传统意义上关于批次数量设置方面的要求限制. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

chen_znn

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

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

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

打赏作者

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

抵扣说明:

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

余额充值