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

news/2024/4/20 22:46:06/文章来源:https://blog.csdn.net/qq_41701723/article/details/129133397

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.luyixian.cn/news_show_71990.aspx

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

相关文章

分析JEP 290机制的Java实现

简介 https://openjdk.org/jeps/290 Filter Incoming Serialization Data过滤传入的序列化数据 JEP290是Java官方提供的一套来防御反序列化的机制,其核心在于提供了一个ObjectInputFilter接口,通过设置filter对象,然后在反序列化&#xff…

c盘系统盘满了,无损扩容

磁盘管理 计算机-管理-磁盘管理 diskmgmt.msc1.选中c盘,右键选择扩展卷,如果是灰色,表示无法扩展 注意: 未分配区域不在同一磁盘,无法分配; 物理上不挨着的区域,无法分配; 2.把与c…

【Spring Cloud Alibaba】003-Nacos 概述与单机搭建

【Spring Cloud Alibaba】003-Nacos 概述与单机搭建 文章目录【Spring Cloud Alibaba】003-Nacos 概述与单机搭建一、Nacos 概述0、新技术学习思路推荐1、什么是 Nacos2、架构图架构图架构图信息二、Nacos 单机搭建1、下载与启动下载地址编辑 startup.cmd 文件下面对两种模式的…

cocos2d-x4.0 win10环境搭建

cocos2d-x默认只支持win32的版本,win64的我测试link不行 我搭建使用的环境 windows10vs2019py2.7cmake3 从GitHub上clone源码https://github.com/cocos2d/cocos2d-x coco2d-x默认带了submodule,有协同子模块,最好是一起下载,搞个…

破解遗留系统快速重构的5步心法(附实例)

前两天和一个架构师朋友闲聊,说到了 「重构」 这个话题,他们公司早年间上线的项目系统,因一直没专人在演进过程中为代码质量负责,导致现在代码越来越混乱,逐渐堆积成“屎山”,目前的维护成本已远高于重新开…

ubuntu server系统树莓派安装mysql8.0开启远程访问

文章目录前言博客一、安装mysql8.0二、创建一个远程访问的新用户三、在MySQL配置文件中启用远程访问。四、navicat15连接mysql8.0返回10061chatgpt回复前言 百度了半天没解决,问了下chatgpt成功解决了…… 博客 一、安装mysql8.0 确认MySQL 8.0服务器已安装并正在…

恺望数据:解决智驾数据生产痛点,提供自动化生产线和规模化人力

最近Chat GPT引起了一个热点话题,就是人工智能是否真的可以替代人类工作,特别是在需要进行数据标注等需要人力的领域。 自动驾驶数据服务公司恺望数据在最近的一个会议上透露了一些消息,他们已经推出了一个基于自动化的数据生产系统&#xff…

uniapp 引入彩色symbol和 指令权限

uniapp 引入iconfont图标库彩色symbol 1,先去阿里巴巴矢量图标库登录 然后点击下载至本地 2.下载本地,然后解压文件夹 3.打开终端cmd命令窗口 npm安装全局包npm i -g iconfont-tools 4.终端切换到上面解压的文件夹里面,运行iconfont-too…

idea 中的 profiles 详解

profile 主要是为了解决不同环境所需的不同变量、配置等问题. profile 一般出现在两个地方:settings.xml,pom.xml 在 settings.xml 时,一般用来做仓库的选择(只使用 aliyun 仓库可以这样配置 settings.xml) 在 pom.xml 时,一般…

EM算法总结

目录 一。Jensen不等式:若f是凸函数 二。最大似然估计 三。二项分布的最大似然估计 四。进一步考察 1.按照MLE的过程分析 2.化简对数似然函数 3.参数估计的结论 4.符合直观想象 五。从直观理解猜测GMM的参数估计 1.问题:随机变量无法直接…

开发日记-lombok

开发日记-lombok环境问题解决方案:1 Data注解失效 无法正常生成 get和set方法2 RequiredArgsConstructor(onConstructor _(Lazy)) 符号_无法识别环境 idea2020.1lombok1.18.24jdk1.8 问题 Data注解失效 无法正常生成 get和set方法RequiredArgsConstructor(onCons…

C++——map和set的应用总结

目录1. 关联式容器2. 键值对3. 树形结构的关联式容器3.1 set3.1.1 set的介绍3.1.2 set的使用3.2 multiset3.2.1 multiset的介绍3.2.2 multiset的使用3.3 map3.3.1 map的介绍3.3.2 map的使用operator[]3.4 multimap3.4.1 multimap的介绍3.4.2 multimap的使用3.5 map和set在OJ中的…

大学计算机基础 知识点总结

一/ 计算机的发展、类型及其应用领域。 1. 计算机(computer)是一种能自动、高速进行大量算术运算和逻辑运算的电子设备。 其特点为:速度快、精度高、存储容量大、通用性强、具有逻辑判断和自动控制能力。 2. 第一台计算机:ENIAC,美国&#…

【TensorFlow 】查看Tensorflow和python对应版本、将现有的TensorFlow更新到指定的版本

1、查看Tensorflow和python对应版本 1.1这里我是在TensorFlow官方网址产看的 1、打开官方网址 https://pypi.org/project/tensorflow/1.1.0rc2/#files但是这个网址好像打不开,点击会出现这样 问题不大 输入Tensorflow然后点击搜索,就会跳转到https://p…

面试官:说说react的渲染过程

hello,这里是潇晨,大家在面试的过程中有没有遇到过一些和react相关的问题呢,比如面试官让你说说react渲染的过程,这到题目比较开放,也比较考验大家对react渲染原理以及源码的整体架构的理解。 整体流程: r…

Vue — 详解mixins混入使用

前言 当我们的项目越来越大,我们会发现组件之间可能存在很多相似的功能,你在一遍又一遍的复制粘贴相同的代码段(data,method,watch、mounted等),如果我们在每个组件中去重复定义这些属性和方法会…

DJI 无人机 Onboard SDK ROS 功能包demo运行

DJI 无人机 Onboard SDK ROS 功能包demo运行demo功能准备测试环境运行 dji sdk 节点运行 demo 节点自动飞行任务航点自动飞行兴趣点环绕自动飞行飞行控制本地坐标位置控制搭建好 Onboard SDK ROS 的开发环境后,功能包自身具备一些写好的demo功能案例 dji sdk 的节点…

接口服务熔断方案

一.熔断方式1.中间件支持熔断2.支持节点级熔断2.支持url前缀匹配二.配置1.延迟方式expression "LatencyAtQuantileMS(50.0) > 100"//50%延迟超过100ms2.失败率方式expression "NetworkErrorRatio() > 0.30" //失败率超过30%3.组合方式expression …

Python学习-----文件操作(读写定位篇)

目录 前言: 1.打开文件 (open) 关闭文件(close) 2.文件的读取(文件变量名 f) (1)整体读取(read) (2)读取一行(readline) (3)读…

三次握手四次挥手详细解析面试常问

文章目录1.第2次握手传回了ACK,为什么还要传回SYN?2.断开连接-TCP 四次挥手3.为什么要四次挥手?4.为什么不能把服务器发送的 ACK 和 FIN 合并起来,变成三次挥手?5.如果第二次挥手时服务器的 ACK 没有送达客户端&#x…