yolov5的Mosaic原理解析

众所周知,yolov5中使用了mosaic增强进行数据增强,效果就是将4张图片拼凑为1张图片。为了更好优化自定义任务,特对mosaic原理进行解析。
在这里插入图片描述

1、mosaic原理解析

mosaic增强的原理一张图就可以解释:
在这里插入图片描述

1.1 图的注释

首先高亮区域(红色实线框)就是最后产生的mosaic图片(即4张图片拼凑而成),高亮区域尺寸为2048*2048,而花朵图片的尺寸为1024*1024(每个任务的尺寸不一致,但是倍数关系一致),即高亮区域以中心点为4张图片的交汇点,那么刚好能够填装4个图片。

黄色虚线框是代码中规定了在该区域内随机产生图像交汇点,黄色虚线框的范围为单边1/4长度到3/4长度。

红色虚线是随机产生的图像交汇点,后续图像的拼凑都和这个点位置相关。

当然这个高亮区还有白色区域,这是因为没有图片填充。但是从源码def load_mosaic(self, index)可以看到,它定义了img4 = np.full((s * 2, s * 2, img.shape[2]), 114, dtype=np.uint8),即整个高亮区都使用114像素值填充,然后再copy花朵图片替换。所以在训练时空白区域的像素值为114。

1.2 图像填充

当在高亮区域(mosaic)中随机确定一个图像交汇点后,依次将4张图片复制到高亮区域中。但是必然存在以下两种情况:
-1) 某些图像的尺寸>高亮区域(mosaic)分配的块面积(如左上角图像),此时只有图像部分能够复制到mosaic图像中;
-2)某些图像的尺寸<高亮区域(mosaic)分配的块面积(如右下角图像),此时图像能够完全复制到mosaic中,空余的部分默认是114像素值;

现在我们以代码为例:

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)
    x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h  # xmin, ymin, xmax, ymax (small image)
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)

i==0即第一张图(左上角),第一次所以先创建一个2048*2048的矩阵(即mosaic图)。
然后计算mosaic图中多大的区域是给花朵图像用的,在这里x1a, y1a, x2a, y2a分别为0,0,xc,xy,即整个区块都用来复制花朵图像了。
最后计算需要从原图中复制哪块数据给mosai左上角区域。已知左上角全部都可以用来复制图片,但是这个区块面积比花朵图要小,通过计算只有花朵图中y1b:y2b, x1b:x2b这个区域的数据和mosaic分配的块区域一样大(4个方向上的图片都有一个角和图像交汇点对齐,所以以此为基准在原图花朵图中计算需要复制的size)。

最后通过img4[y1a:y2a, x1a:x2a] = img[y1b:y2b, x1b:x2b]将花朵图img中部分数据复制到mosaic的img4。

1.3 最后的数据增强

通过上述的mosaic增强后,获得4张图拼凑的图像,最后还进行了两次数据增强

 # Augment
# 目标随机复制到其他位置,需要segments4标注信息,实际上没有所有这个增强没有任何操作
img4, labels4, segments4 = copy_paste(img4, labels4, segments4, p=self.hyp["copy_paste"])

# 一系列增强,img4输入是2048*2048,输出是1024*1024(也是我任务的输入尺寸)
img4, labels4 = random_perspective(img4, labels4, ...)

上面一系列增强的源码见random_perspective,可以看到是一些常规的图像变化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/395298.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

河北省公务员考试照片上传不成功

河北省公务员考试报名照片审核太严格了 费了好长时间照片上传不成功,原来少了这一步 没报名得姐妹, 不要拿大图直接压缩小于10kb上传, 不通过,图片还会变模糊 选择这个模板做, 建议电脑报名,使用照片处理工…

【Linux】---Linux下基本指令(2)

目录 一、指令详细介绍1.1 cat 指令1.2 echo 指令1.3 more 指令1.4 less 指令1.5 head 指令1.6 tail 指令1.7 date 指令1.8 cal 指令1.9 find 指令1.10 grep 指令1.11 zip/unzip 指令1.12 tar 指令1.13 uname –r 指令: 一、指令详细介绍 1.1 cat 指令 语法&#…

Dom节点继承树基本操作

遍历节点树 基于元素节点树的遍历 parcntElcrmcnt -> 返回当前元素的父元秦节点 (IE不兼容)children ->只返回当前元素的元素子节点node.childFlement(ount nodechildren.length当前元素节点的子元素(IE不兼容)firstElementChild->返回的是第一个元素节点(IE不兼容)l…

07 按键控制 LED

按键简介 按键开关是一种电子开关,属于电子元器件类。常见的按键开关有两种,第一种是轻触式按键开关(简称轻触开关),使用时以向开关的操作方向施加压力使内部电路闭合接通,当撤销压力时开关断开&#xff0…

unity学习(22)——客户端与服务器合力完成注册功能(4)数据库化

单纯的账号密码这种非频繁读写,实现起来很简单的,游戏的属性信息到时候也许会比较麻烦。 思路:每次加入有新键值TryAdd,如果加入成功,直接重写账号密码文件即可。 C#JsonConvert.DeserializeObject反序列化与JsonCon…

15-55V输入自动升降压 光伏MPPT自动跟踪充电方案 大功率300瓦

1.MPPT原理--简介 MPPT,全称为Maximum Power Point Tracking,即最大功点跟踪,它是一种通过调节电气模块的工作状态,使光伏板能够输出更多电能的电气系统能够将太阳能电池板发出的直流电有效地贮存在蓄电池中,可有效地…

0205-2-数据链路层

第 3 章 数据链路层 使用点对点信道的数据链路层 数据链路和帧 数据链路层使用的信道主要有以下两种类型: 点对点信道。这种信道使用一对一的点对点通信方式。广播信道。这种信道使用一对多的广播通信方式,因此过程比较复杂。广播信道上连接的主机很多…

程序员金三银四跳槽指南:时间线经典面试16问

祝大家成功上岸,升职加薪,冲鸭 🎉 金三银四 今天复工,就要开始准备啦💼✨ 把握好打工人跳槽的金三银四,获得满意的新工作 🎉 时间线 年后跳槽时间线,过完年刚好开始准备&#xf…

COMSOL Multiphysics在超材料与超表面仿真中的应用

随着科技的飞速发展,超材料和超表面作为新兴研究领域,吸引了广泛关注。它们通过人工设计的结构,能够在特定条件下表现出特殊的物理性质,为光电子领域带来革命性的变革。COMSOL Multiphysics作为一款强大的多物理场仿真软件&#x…

vue 实现docx文件在线预览

预览请求步骤: 准备一个需要预览的文件地址【如:https://usdoc.cn/vw/文件模板.docx】GET 参数到请求地址将拼接好的地址放在浏览器中,开始预览 请求地址:https://vw.usdoc.cn/ 请求方式:GET 请求参数: 字段名称字段类型必填参数…

WordPress主题YIA在广告位添加图片广告时下方有空白怎么办?

YIA主题设置中默认有4个广告位,而侧边栏的广告位由站长自行添加。boke112百科在这些广告位添加图片广告后发现图片下方有空白,导致下方的两个角没有变圆角,看起来也有点不好看。具体如下图所示: 其实,这个问题就是典型…

Spring Security基础学习

一、SpringSecurity框架简介 二、SpringSecurity入门案例 三、SpringSecurity Web权限方案 四、SpringSecurity微服务权限方案 五、SpringSecurity原理总结

Model / View结构

红色部分是可以直接使用的。 QFileSystemModel; QFileSystemModel的使用: 头文件: QFileSystemModel* model nullptr; cpp文件: model new QFileSystemModel; model->setRootPath(QDir::currentPath()); ui->listView->setModel…

微信小程序:实现微信小程序应用首页开发 (本地生活首页)

文章目录 小程序应用页面开发1、创建项目并配置项目目录结构配置导航栏效果三、配置 tabBar 效果四、轮播图实现4.1 创建轮播图数据容器4.2 定义一个请求轮播图数据的接口4.3 页面加载调用 数据请求接口 五、九宫格实现5.1 获取九宫格数据5.2 结构和样式的完善六、图片布局实现…

普中51单片机学习(九)

蜂鸣器 蜂鸣器简介 在单片机应用的设计上,很多方案都会用到蜂鸣器,大部分都是使用蜂鸣器来做提示或报警,比如按键按下、开始工作、工作结束或是故障等等。改变单片机引脚输出波形的频率,就可以调整控制蜂鸣器音调,产…

Qt的基本操作

文章目录 1. Qt Hello World 程序1.1 通过图形化界面的方式1.2 通过代码的方式实现 2. Qt 的编码问题3. 使用输入框实现hello world4. 使用按钮实现hello world5. Qt 编程注意事项6. 查询文档的方式7. 认识Qt坐标系 1. Qt Hello World 程序 1.1 通过图形化界面的方式 我们先讲…

Autosar --- CAN Driver标准解读

前言 本文是对Autosar文档的翻译与解读,通过对规范的理解,加上实际的应用来一一对应,方便大家更好的理解。 注意:本文并非完全的按照【AUTOSAR_SWS_CANDriver.pdf】来进行翻译的。文章内容的标题与【AUTOSAR_SWS_CANDriver.pdf】保…

记录setData报错TypeError: [object Array] is not a function

小程序调用setData控制台显示报错.但是功能正常 同样的各个地方调setData都报错,经过一轮排除法后发现是自定义组件写法有问题 修改正确之后就没问题了

精品jsp+ssm健身器材管理系统-教练开发与设计

《[含文档PPT源码等]精品jspssm健身管理系统开发与设计[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 使用技术: 开发语言:Java 框架:ssm 技术:JSP JDK版本&…

VUE3 中导入VISO 图形

微软的VISO是一个功能强大的图形设计工具,它能够绘制流程图,P&ID,UML 类图等工程设计中常用的图形。它要比其它图形设计软件要简单许多。以后我的博文中将更多地使用VISO 来绘制图形。之前我一直使用的是corelDraw。 VISO 已经在工程设计…