当前位置: 首页 > news >正文

【 YOLOv5】目标检测 YOLOv5 开源代码项目调试与讲解实战(3)-训练yolov5模型(本地)

训练yolov5模型(本地)

  • 训练文件 train.py
    • 训练如下图
  • 一些参数的设置
    • weights:
      • 对于weight参数,可以往Default参数中填入的参数有
    • cfg:(缩写)
      • cfg参数可以选择的网络模型
    • data
      • 对于data
    • hyp 超参数
    • epochs 训练多少轮
    • batch-size 把多少数据打包成一个batch,送到网络当中
    • img-size
    • rect:矩阵的训练方式
    • resume
    • nosave
    • notest
    • noautoanchor 锚点
    • evolve
    • bucket
    • cache-image
    • image-weight
    • device
    • multi-scale
    • single-cls
    • adam 优化器
    • sync-bn
    • local_rank
    • project
    • entity
    • name
    • exist-ok
    • quad
    • linear-lr
    • Label-smoothing
    • save-period

训练文件 train.py

往下翻,找到main函数
在这里插入图片描述

这里的works最好设置为0
在这里插入图片描述
运行如图,下载coco数据集中
在这里插入图片描述
在这里插入图片描述

超参数:学习速率等各种参数
库:显示权重

训练如下图

在这里插入图片描述
出现数据集下载的问题可以参考下面的解决方法
Dataset autodownload failure

训练文件保存的目录
在这里插入图片描述

如果没有发现该文件夹可以进行刷新
在这里插入图片描述

在这里插入图片描述

best.pt :在哪个训练轮数当中最好效果的网络模型参数
last.pt:最后一个训练的网络模型
hyp.yaml :训练过程中对模型的一些超参数
labels.jpg:标注的分布
labels_correlogram:标注的一些相关矩阵
opt.yaml:在训练过程中对参数的一些设置
results.txt:对训练结果的一些记录
tran_batch0.jpg:训练的一些图片

一些参数的设置

weights:

指定训练好模型的路径,用该模型去初始化网络中的一些参数(自动去下载这些模型),如果我自己拥有一个训练好的模型,放在某一个路径,把这个路径放进来,就会用我训练好的模型作为训练过程中模型的参数初始化。
但是我们现在的训练一般是从头开始训练,所以这里默认为空,采用程序对参数的权重对它初始化,不采用训练好的模型对他初始化
在这里插入图片描述

对于weight参数,可以往Default参数中填入的参数有

在这里插入图片描述

cfg:(缩写)

关于模型的一些配置,一般都存在model里面,
在这里插入图片描述
整个yolov55总共可以分为4个模型,
在这里插入图片描述
里面都是模型参数的一些设置
在这里插入图片描述

nc:模型应该分为多少个类
depth_multiple:模型的一些深度

如果选择小模型复制路径填入default
修改之后的代码为
在这里插入图片描述
我们现在来训练模型,这个模型的结构是yolov5s,其中的一些模型初始化的参数采用程序之中的简单初始化,不用其他已经训练好的模型来指定参数初始化

cfg参数可以选择的网络模型

在这里插入图片描述

data

指定训练数据集
在这里插入图片描述
在这里插入图片描述

download :指定从哪里下载数据集,没法下载就从浏览器复制地址粘贴下载
train:指定coco数据集应该下载到什么地方
nc:总共有多少个类别
names:每个类别的名称是什么
0 类别代表人

对于data

在这里插入图片描述

hyp 超参数

在这里插入图片描述
在这里插入图片描述
scratch 从头开始,一般把这个文件作为从头开始训练的文件
finetune:用于对模型进行一个微调

epochs 训练多少轮

默认300轮
在这里插入图片描述

batch-size 把多少数据打包成一个batch,送到网络当中

在这里插入图片描述

img-size

去分别设置训练集,和数列集的大小
在这里插入图片描述
5s对应640

rect:矩阵的训练方式

在这里插入图片描述
在这里插入图片描述
加速模型。减少不必要信息

resume

从最近训练的一个模型当中在它的基础上进行一个训练
在这里插入图片描述
默认是false,但并不是设置为ture就是能运行的,需要指定在哪一个模型的基础上进行一个继续的训练,需要告诉它模型处在什么地方,所以default 后应该设置为模型的位置
需要指定之前训练的模型文件,因为需要读取模型文件和相应的配置
在这里插入图片描述

在这里插入图片描述
运行就是从该模型停止的地方继续
在这里插入图片描述
在这里插入图片描述

nosave

我们在一个模型上训练很多次,如果设置为true,就生效了,只保存最后一次epoch训练的模型的一些权重数据,保存为pt文件
在这里插入图片描述

notest

是否只对最后一个epoch进行测试,按理说是对每个epoch上进行测试
在这里插入图片描述

noautoanchor 锚点

在目标检测算法中,大致可以分为有锚点的模型和没有锚点的模型

这里建议去查一下锚点锚框的相关知识

以前要是在图片中检测目标的话,要在图片上进行一个遍历,比如滑动窗口。现在都采用锚点的方式。

在这里插入图片描述
指定参数就会把锚点取消,默认是开启的

evolve

在这里插入图片描述

默认开启,对参数进行进化,寻找最优参数的方式
如果不明白参数是什么意思,可以去百度复制一下询问

bucket

作者之前把一些东西放在谷歌云盘上了,通过这个可以直接下载
在这里插入图片描述

cache-image

在这里插入图片描述

是否把图片缓存用于更好的训练

image-weight

从我们上一轮的测试过程中,对于哪些测试图片/测试部分,测试效果不好,在下一轮的训练过程中会对这些图片加一些相关的权重
在这里插入图片描述

device

设备
在这里插入图片描述

multi-scale

对图片尺寸进行变换
在这里插入图片描述

single-cls

训练的数据集是单类别还是多类别
在这里插入图片描述

adam 优化器

true选择优化器,false选择随机梯度下降
在这里插入图片描述

sync-bn

带DDP字眼的可以不用看了
在这里插入图片描述
分布式训练,多cpu

local_rank

DDP参数,不要去改
在这里插入图片描述

project

文件默认位置
在这里插入图片描述

entity

库,不用管
在这里插入图片描述
在这里插入图片描述

name

保存的文件名
在这里插入图片描述

exist-ok

在这里插入图片描述
不设置会存在exp1,2,3,4,5
设置了就存在一个exp里面

quad

在这里插入图片描述

按住ctrl+F可以找到的单词在什么位置,看源码
或者在问题里查询
在这里插入图片描述

linear-lr

对学习速率进行调整
在这里插入图片描述

Label-smoothing

标签平滑
在这里插入图片描述

save-period

程序日志
在这里插入图片描述

相关文章:

  • 一次降低进程IO延迟的性能优化实践——基于block层bfq调度器
  • YOLOv8改进 | 2023主干篇 | FasterNeT跑起来的主干网络( 提高FPS和检测效率)
  • 手撸一个仿蚂蚁森林微信小程序
  • Python序列之集合
  • 三.Linux无名管道(PIPE)和有名管道(FIFO)的区别
  • CSS去掉按钮阴影 | css去掉按钮边框 | 注意改变搜索的关键词、搜索方式
  • 论文阅读——SG-Former
  • 【Minikube Prometheus】基于Prometheus Grafana监控由Minikube创建的K8S集群
  • 通配符和正则表达式
  • JVM系列-方法区、堆区、栈区
  • 常见负载均衡方案分析
  • ClickHouse基础知识(六):ClickHouse的副本配置
  • jsp结合servlet
  • 计算机网络(第八版)期末复习(第二章物理层)
  • SpringBoot整合mail进行发送邮箱
  • 时间复杂度分析经典问题——最大子序列和
  • 78. Subsets
  • CentOS 7 防火墙操作
  • CentOS6 编译安装 redis-3.2.3
  • Java-详解HashMap
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • Lsb图片隐写
  • python_bomb----数据类型总结
  • Redis 懒删除(lazy free)简史
  • Redis字符串类型内部编码剖析
  • 半理解系列--Promise的进化史
  • 对象管理器(defineProperty)学习笔记
  • 给Prometheus造假数据的方法
  • 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  • 你真的知道 == 和 equals 的区别吗?
  • 前言-如何学习区块链
  • 我这样减少了26.5M Java内存!
  • 一些关于Rust在2019年的思考
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​比特币大跌的 2 个原因
  • (16)Reactor的测试——响应式Spring的道法术器
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (pojstep1.3.1)1017(构造法模拟)
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • *p++,*(p++),*++p,(*p)++区别?
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .gitignore文件—git忽略文件
  • .NET CLR基本术语
  • .NET Micro Framework初体验(二)
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET 中 GetProcess 相关方法的性能
  • .NET/C# 使窗口永不获得焦点
  • .NET/C# 使用反射注册事件
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • ::before和::after 常见的用法
  • @hook扩展分析