yolov5源码解读--数据处理模块

news2024/10/6 2:25:37

yolov5源码解读--数据处理模块

  • 加载数据
    • 读取图片
    • 加载标签
  • 马赛克数据增强
    • 图片
    • 标签
  • 其他的数据增强
    • 变图像
    • 变标签
  • __getitem__构建Batch

加载数据

create_dataloader
在这里插入图片描述
跳转到datasets.py文件中,可以看到支持输入的文件类型非常丰富。。
在这里插入图片描述
回归正题
在这里插入图片描述
跳转LoadImagesAndLabels
加载图片和标签的函数

读取图片

在这里插入图片描述

f = []存储所有图片的路径
在这里插入图片描述
bi给当前数组做batch索引
nb就是所有的batch数目
在这里插入图片描述

加载标签

label_files所有标签的路径
cache_path、cache是缓存路径和缓存
在这里插入图片描述
cache
在这里插入图片描述
labels是按照文件名从cache中取出对应图片的标签,
在这里插入图片描述
在这里插入图片描述

extract_bounding_boxes 是否把框截取出来
create_datasubset、labels_loaded、extract_bounding_boxes和目标检测后续任务有关
在这里插入图片描述
nm, nf, ne, ns, nd = 0, 0, 0, 0, 0 # number missing, found, empty, datasubset, duplicate
这些和读取数据进度条打印的数据有关

在这里插入图片描述
一张张读取标签数据,做异常处理。。

在这里插入图片描述
进度条打印数据
在这里插入图片描述
在一次循环遍历读取标签

马赛克数据增强

完成的数据和标签的初始化操作后,
当训练网络时,执行__getitem__函数向网络传递数据
在这里插入图片描述

图片

使用了马赛克数据增强
在这里插入图片描述
在这里插入图片描述
四合一的拼接
在这里插入图片描述

yc, xc = [int(random.uniform(-x, 2 * s + x)) for x in self.mosaic_border]  

随机中心点

img4 = np.full((s * 2, s * 2, img.shape[2]), 114, dtype=np.uint8) 

1.初始化大图

x1a, y1a, x2a, y2a = max(xc - w, 0), max(yc - h, 0), xc, yc

2.计算当前图片放在大图中什么位置
在这里插入图片描述
max是为了防止小图在大图中越界。。
左上角,右上角为(0,0)坐标系原点。。。

x1b, y1b, x2b, y2b = w - (x2a - x1a), h - (y2a - y1a), w, h

3.计算在小图中取哪一部分放到大图中


开始截图

在这里插入图片描述
a大图的区域
b小图的部分

padw,padh是当前小图左上角点距离原点的距离
(左上角那俩青色的线条长度)
在这里插入图片描述

标签

应为截图拼接了,所以标签位置也需要变化
在这里插入图片描述
标签加上padw,padh的原因显而易见。。。
(偏移量)

其他的数据增强

源码是在马赛克数据增强后直接来random_perspective
整合的大图再进行随机旋转、平移、缩放、裁剪

在这里插入图片描述

变图像

在这里插入图片描述
在这里插入图片描述
img是输入图像
M就是图像变换矩阵

M = T @ S @ R @ P @ C

将旋转 平移 缩放等操作 都需要系数矩阵组合到一起。。

cv2.warpPerspective()完成数据增强

变标签

在这里插入图片描述

__getitem__构建Batch

做完数据增强,返回到__getitem__
如果batch是16,就调用16次__getitem__,得到一个batch的最终数据。。
在这里插入图片描述
1.调整标签格式 2.归一化标签取值范围
在这里插入图片描述

在就是最后,
按照一定比例做不做数据增强。。。
数据和标签都得做。。。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小程序(九)后端 签到1

文章目录一、考勤时间表设计1、表设计二、缓存考勤时间1、mapper.xml2、常量封装类三、封装检测当天是否可以签到1、为什么要检测是否可以签到?2、怎么判断当天是工作日还是节假日?3、封装持久层代码1)查询特殊休息日2)查询特殊工…

jjava企业级开发-01

一、Spring容器演示 采用Spring配置文件管理Bean 1、创建Maven项目 修改项目的Maven配置 2、添加Spring依赖 在Maven仓库里查找Spring框架&#xff08;https://mvnrepository.com&#xff09; 同上添加其他依赖 <?xml version"1.0" encoding"UTF-8…

stm32f407探索者开发板(十八)——串口通信实验讲解(USART_RX_STA流程图详解)

文章目录一、uart_init&#xff08;串口初始化&#xff09;二、USART1_IRQHandler&#xff08;串口1中断服务程序&#xff09;三、main.c&#xff08;主函数&#xff09;四、关于printf的支持一、uart_init&#xff08;串口初始化&#xff09; 就是根据上一篇的一样的步骤&…

数据结构之树

树是一种数据结构 包括&#xff1a; 根节点 度&#xff1a;每一个节点的子节点个数 左子节点&#xff1a;左下方的节点 右子节点&#xff1a;右下方的节点 左子树 右子树 树的内部结构 二叉查找树 又称二叉搜索树或者二叉排序树 特点 每一个节点最多只有两个节点 任…

【强化学习】解决gym安装Atari2600环境gym[atari,accept-rom-license] RuntimeError 无法下载Roms的问题

先上Roms.tar.gz安装地址&#xff1a;Roms.tar.gz 以下内容是解决问题的思路&#xff0c;如果已经完全知道问题原因可以直接跳过 安装gym[accept-rom-license]时会出现安装失败的情况: 先是卡在&#xff1a;Building wheel for AutoROM.accept-rom-license 然后是显示安装失败…

非常优秀的网站设计案例,设计师必备

厚积才能薄发&#xff0c;一个优秀的设计师的天性一定是想要获得更多网站设计灵感&#xff0c;擅于为新项目寻找创意切入点、搜索设计参考资源、最新的设计趋势。今天为大家带来了一组免费可商用的网站设计案例&#xff0c;通过这些网站设计案例&#xff0c;你可以获得&#xf…

To prevent a memory leak, the JDBC Driver has been forcibly unregistered.

java项目发布到kubernetes集群中&#xff0c;报错 SEVERE: The web application [] registered the JDBC driver [com.alibaba.druid.proxy.DruidDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has …

Obsidium一键编码作业,Obsidia惊人属性

Obsidium一键编码作业,Obsidia惊人属性 每个区域都包含几个可定制的功能&#xff0c;允许用户确定如何完全执行应用程序的安全性。Obsidia的功能区允许用户存储任何调整或一键编码作业。 Obsidia惊人属性&#xff1a; 代码虚拟化&#xff1a;代码虚拟化允许您转换程序代码的特定…

【电商】库存管理

库存管理&#xff0c;简单的说&#xff0c;就是管理商品和数量之间的关系。库存系统是电商后台系统中不可或缺的一部分 在电商系统中商品库存是非常重要的&#xff0c;在财务进销存系统中也梳理过存货的内容&#xff0c;在销售系统和仓库中的库存有什么区别&#xff1f; 一、什…

SSH 服务支持弱加密算法

漏洞扫描有SSH 服务支持弱加密算法&#xff0c;解决方案有两个&#xff1a; 方案一&#xff1a;修改 SSH 配置文件&#xff0c;添加加密算法&#xff1a; vi /etc/ssh/sshd_config 最后添加一下内容&#xff08;去掉 arcfour、arcfour128、arcfour256 等弱加密算法&#xff09;…

教你数分钟内创建并运行一个 DolphinScheduler Workflow

点击蓝字 关注我们作者 | 鲍亮&#xff0c;Apache DolphinScheduler PMC Member01Workflow是什么&#xff1f;对于数仓场景和数据湖场景来说&#xff0c;最显著的特点就是数据处理的长流程和高复杂度任务依赖关系&#xff0c;从源数据采集到最终报表数据的生成&#xff0c;中间…

边玩边学,13个 Python 小游戏真有趣啊(含源码)

经常听到有朋友说&#xff0c;学习编程是一件非常枯燥无味的事情。其实&#xff0c;大家有没有认真想过&#xff0c;可能是我们的学习方法不对&#xff1f; 比方说&#xff0c;你有没有想过&#xff0c;可以通过打游戏来学编程&#xff1f; 今天我想跟大家分享几个Python小游…

Docker网络模式解析

目录 前言 一、常用基本命令 &#xff08;一&#xff09;查看网络 &#xff08;二&#xff09;创建网络 &#xff08;三&#xff09;查看网络源数据 &#xff08;四&#xff09;删除网络 二、网络模式 &#xff08;一&#xff09;总体介绍 &#xff08;二&#xff09…

使用SpringBoot实现无限级评论回复功能

评论功能已经成为APP和网站开发中的必备功能。本文采用springbootmybatis-plus框架,通过代码主要介绍评论功能的数据库设计和接口数据返回。我们返回的格式可以分两种方案,第一种方案是先返回评论,再根据评论id返回回复信息,第二种方案是将评论回复直接封装成一个类似于树的数据…

Coremail新春分享会:解读Coremail产品新亮点、邮件安全新趋势

2月15日&#xff0c;由Coremail主办的 “新年‘邮’新意 Coremail新春分享会”在线上直播间重磅开启&#xff01;现场分享精彩纷呈&#xff0c;好礼持续放送&#xff0c;场面火爆&#xff0c;收获观众过万点赞&#xff01; 直播现场 嘉宾分享了哪些行业干货&#xff1f;直播现场…

大数据开发-Linux环境搭建

1、操作系统 1.1 计算机原理 冯诺依曼结构&#xff1a;把程序当作数据存储在计算机存储设备中。 冯诺依曼三个基本原则&#xff1a; 采用二进制逻辑程序存储执行计算机由五个部分组成&#xff1a;运算器、控制器、储存器、输入和输出设备 计算机由软件和硬件组成&#xff0c…

图床(Typora + uPic/PicGo+ 七牛云)

图床&#xff08;Typora uPic/PicGo 七牛云&#xff09; 笔者平时使用 Typora 编写 markdown 文档&#xff0c;文档中常常会放置图片&#xff0c;如果文档不需要分享的话&#xff0c;其实讲图片存放在本地就可以了。由于我有在多台机器编写 markdown 笔记&#xff0c;还有将…

OAK相机跑各种yolo模型的检测帧率和深度帧率

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是助手…

Python字符串处理 -- 内附蓝桥题:门牌制作,卡片

字符串处理 ~~不定时更新&#x1f383;&#xff0c;上次更新&#xff1a;2023/02/20 &#x1f5e1;常用函数&#xff08;方法&#xff09; 1. s.count(str) --> 计算字符串 s 中有多少个 str 举个栗子&#x1f330; s "1354111" print(s.count(1)) # 答案为…

Docker 安装nacos并且配置数据库持久化(无脑CV版)

我们以运行ruoyi-cloud项目为例子 在安装之前请注意版本对应问题 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E 由于我的是2021.0.4.0&#xff0c;因此安装2.0.4版本 否则可能会出现以下错误 在若依的issue有解决方案https:…