解读YOLO v7的代码(二)训练数据的准备

news2024/11/18 9:47:57

在上一篇文章解读YOLO v7的代码(一)模型结构研究_gzroy的博客-CSDN博客,我对Yolo v7的模型结构进行了分析,那么这次我们将进一步研读代码的关键部分,学习是如何对模型进行训练的。

训练数据的准备是模型训练的关键,通常我们需要对图像数据做很多图像增广的处理,例如色彩的变换,形变,mixup, mosaic等等,通过对代码的训练数据处理部分的解读,可以更好的帮助我们理解当前主流的图像增广技术。

首先是下载训练数据,Yolo v7可以直接对Coco数据进行训练和检测,不需要像以往传统的检测模型那样需要先在Imagenet这些数据集上进行预训练。

在scripts目录下有一个get_coco.sh,运行这个文件下载数据,下载的数据会放在几个文件夹,包括了训练集,验证集和测试集。

然后运行python train.py --workers 8 --device 0 --batch-size 32 --data data/coco.yaml --img 640 640 --cfg cfg/training/yolov7.yaml --weights '' --name yolov7 --hyp data/hyp.scratch.p5.yaml即可进行训练。

在train.py文件中,第616行的train(hyp, opt, device, tb_writer)是跳转到train函数进行训练。

第245行是加载训练数据

dataloader, dataset = create_dataloader(train_path, imgsz, batch_size, gs, opt,
                                            hyp=hyp, augment=True, cache=opt.cache_images, rect=opt.rect, rank=rank,
                                            world_size=opt.world_size, workers=opt.workers,
                                            image_weights=opt.image_weights, quad=opt.quad, prefix=colorstr('train: '))

继续跳到create_dataloader函数,可以看到是调用以下函数来构建一个数据集

dataset = LoadImagesAndLabels(path, imgsz, batch_size,
                                      augment=augment,  # augment images
                                      hyp=hyp,  # augmentation hyperparameters
                                      rect=rect,  # rectangular training
                                      cache_images=cache,
                                      single_cls=opt.single_cls,
                                      stride=int(stride),
                                      pad=pad,
                                      image_weights=image_weights,
                                      prefix=prefix)

这个loadImagesAndLabels是继承了Dataset类,其中的__getitem__方法定义了对图像处理的步骤,根据运行train.py指定的超参数,我们可以看到在标准的训练过程中,对图像做了如下的处理:

1. 图片缩放

假设最终要进行训练的图片的大小为640*640,那么把训练集的图片进行缩放,按比例缩放,缩放后的图片的长边等于640。

2. Mosaic处理

这个处理方式的思想是把几张图片拼接起来,其好处是避免要识别的物体都处在图像的中心区域,以及使得对物体的识别可以排除物体所处背景的影响。

这里会有80%的几率用四张图片做拼接,20%的几率用9张图片做拼接。

以四张图片的拼接为例,通过对load_mosaic这个函数进行解读,我们可以理解到这个处理过程。假设我们最终需要的训练图像大小为640*640,那么构建一个大小为1280*1280的图片,图片以像素114进行填充。然后确定一个mosaic的中心点,这个中心点的x,y坐标的范围在(0.5*640, 1.5*640)的范围中随机选择。

然后把第一张图片的右下角对齐这个中心点,第二张图片的左下角对齐中心点,第三张图片的右上角对齐中心点,第四张图片的左上角对齐中心点进行铺排,然后把这四张图片对应的像素拷贝到这个1280*1280的图片的对应位置中,最后对超出这个1280*1280的图片的区域进行裁剪。

以下是四张图片:

 经过mosaic拼接后的效果:

mosaic9的处理方式也是类似

之后就是进行copy_paste的处理,因为默认的copy_paste的概率为0,因此没有进行这个处理,这里也略过不提。

3. 形变处理

在mosaic操作完成之后,就要对图像进行形变处理。这里的形变包括了旋转,平移,缩放,剪切,透视的处理。默认的形变参数为'degrees': 0.0, 'translate': 0.2, 'scale': 0.9, 'shear': 0.0, 'perspective': 0.0,也就是只进行平移和缩放。最后形变完成之后再对图像进行缩放为640*640。以下是对之前mosaic图像进行形变处理后的图形:

 4. Mixup处理

在形变处理之后,下一步就是有15%的几率要做mixup的处理,这里把两个mosaic形变之后的图片进行mixup处理,合为一张图片。效果如下:

5. 颜色处理

随机调整色彩的hsv值,这里的参数取值是'hsv_h': 0.015, 'hsv_s': 0.7, 'hsv_v': 0.4,调整后的效果如下:

 6. paste-in处理

之后有15%的几率进行paste-in的处理,这时将构建另外一张mosaic的图片,由另外4张图片构成,然后从这个mosaic图片中选取不超过30个的物体,将其拷贝到上一步得到的图片中。以下是paste-in处理后的结果,可以看到,在图片上添加了一些从其他图片拷贝过来的人物和烤炉的物体:

 7. 随机翻转

这里就比较简单,有50%的几率进行随机左右翻转。

以上就是标准的YOLO V7做目标检测用到的图像增强处理的技术。在下一篇博客,我将继续分析YOLOv7的损失函数和具体训练过程。

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

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

相关文章

保姆教程系列一、什么?Redis部署 so easy

系列文章目录 !!!是的没错,胖友们,保姆教程系列又更新了!!! 保姆教程系列一、Redis部署 so easy 保姆教程系列二、Redis高可用(主从同步哨兵模式) 保姆教程系…

(3)Qt中的变体数据类型(QVariant)

QVariant的使用 QVariant(变体数据类型)这个类很神奇,或者说方便。很多时候,需要几种不同的数据类型需要传递,如果用结构体,又不大方便,容器保存的也只是一种数据类型,而QVariant则可以统统搞定。QVariant …

ceph-mds文件系统操作指南

前言:ceph-mds文件系统操作,常规操作汇总,看这一篇就够了 一、文件系统简介 Ceph 文件系统 (CephFS) 是兼容 POSIX 标准的文件系统,在 Ceph 的分布式对象存储基础上构建,称为 RADOS(可靠的自主分布式对象存…

用户级线程和内核级线程

线程的实现可以分为两类:用户级线程和内核级线程,后者又称为内核支持的线程或轻量级进程。在多线程操作系统中,各个系统的实现方式并不相同,在有的系统中实现了用户级线程,有的系统中实现了内核级线程。 用户级线程&am…

Python数据分析案例13——文本特征抽取(TfidfVectorizer)

在做机器学习的时候,构建特征变量有很多时候都是文本型的,比如电影分类的时候的电影标题,房价预测的时候房子地址,股吧评论等......都是文本类型的数据。 文本型数据怎么构建特征,它又不是分类变量不能直接独立热编码…

【再学Tensorflow2】TensorFlow2的模型训练组件(2)

TensorFlow2的模型训练组件(2)损失函数损失函数和正则化项Tensorflow2内置的损失函数自定义损失函数评估指标常用的内置评估指标自定义评估指标优化器优化器的使用使用optimizer.apply_gradients使用optimizer.minimize使用model.fitTensorflow2内置的优…

【nowcoder】笔试强训Day14

目录 一、选择题 二、编程题 2.1计算日期到天数转换 2.2幸运的袋子 一、选择题 1.定义学生、教师和课程的关系模式 S (S#,Sn,Sd,Dc,SA )(其属性分别为学号、姓名、所在系、所在系的系主任、年龄); C ( C#,Cn,P# &…

ansible的安装以及实例

目录 ansible的安装: 一、配置centos8基本源 二、配置epel 三、安装ansible 四、查看ansible是否安装以及版本 实例: 实例一:控制主机和受控主机通过root用户免密验证远程控制主机实施对应任务 实例二:控制主机连接受控主机…

SSH协议理论讲解

目录 基本概念 SSH协议的组成 SSH工作原理 SSH版本协商阶段(确定V1版本或V2版本) 算法协商阶段 密钥交换阶段 用户认证阶段 会话交互阶段 基本概念 SSH(Secure Shell)安全外壳协议,是一种用于在不安全网络上进…

Redisson实现延迟队列

k8s部署单点Redis (1)k8s部署redis的yaml文件 apiVersion: apps/v1 kind: Deployment metadata:creationTimestamp: nulllabels:app: redisname: redis spec:replicas: 1selector:matchLabels:app: redisstrategy: {}template:metadata:creationTimestamp: nulllabels:app: r…

Jmeter系统学习

Jmeter体系结构 Jmeter概念: 元件:每一个功能,例如Http请求,响应断言等。 组件:每一类元件的组合,例如采样器,配置元件。 Jmeter体系可以分为3个维度: X1--X5:负载模…

(二十八)Vue之组件化编码流程

文章目录组件化编码流程拆分静态组件实现动态组件实现交互实现添加实现勾选实现删除实现全选与全不选实现清除已完成任务TodoList案例小细节Vue学习目录上一篇:(二十七)Vue组件的样式 先看一个需求:TodoList案例 功能&#xff1a…

c# http请求使用multipart/form-data 方式上传文件及其他参数

这次的需求是请求java那边的一个excel批量上传的接口。但是他们的接口要求是这样的 于是自己写了个方法: 调用: 控制器层 var file this.HttpContext.Request.Files[0];//获取前端传来的文件 var fileName file.FileName; //注意&…

控制RK3568的GPIO

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、设备树中是如何描述引脚的?1.pinctrl子系统2.gpio子系统二、使用步骤总结前言 RK3568的引脚资源还是相当多的,一共有5组GPIO&#x…

数图互通高校房产管理——房屋修缮管理

数图互通房产管理系统在这方面做得比较全面; 实现房屋修缮改造、装修维护、零星维修线上管理,建立机制规范管理,避免私自改扩建。 建筑物立项审批全流程资料和过程管理,建筑物修建施工、维修审批流程管理。整套系统包含了建筑物从…

链下签名实现

什么是签名 比如我们在使用 opensea 的时候,经常会提示我们进行数字签名,如下图: 用户进行 sign 确认,即用自己的私钥对一段数据进行签名,得到一个 signature,其他人可以使用你私钥对应的公钥&#xff0c…

推荐5款Windows桌面效率工具

今天我想分享一些自己比较喜欢的桌面端软件,还请大家包涵指正。如果你曾搜索过 Windows 效率工具推荐,对下文的软件或许有所了解。不过为了凑字数,我还是会再介绍一遍。 1.文件定位——Listary Listary 是我使用频率最高的软件之一&#xf…

Java重点源码回顾——HashMap1.8

1. 概述 在之前的文章中,我们介绍了HashMap1.7的源码,今天我们来看下HashMap1.8的源码。HashMap1.8相比于1.7最大的改变就是改变了1.7中采用数组链表的方式存储键值对,转而由数组链表红黑树的方式来存储键值对。HashMap1.8的底层结构如下图所…

RPC 好,还是 RESTful 好

OSI网络七层模型 RPC服务 RPC架构 同步调用与异步调用 流行的RPC框架 HTTP服务 总之 RPC主要是基于TCP/IP协议的,而HTTP服务主要是基于HTTP协议的,我们都知道HTTP协议是在传输层协议TCP之上的,所以效率来看的话,RPC当然是要更…

【python】py课后作业程序题5「PTA」

py字典合集7-1 Python猜数游戏7-2 jmu-python-分段函数7-3 循环求e的近似值(高教社,《Python编程基础及应用》习题6-7)7-4 jmu-python-判断是否构成三角形7-5 jmu-python-输入输出-计算字符串中的数7-6 jmu-python-随机生成密码7-7 jmu-pytho…