主要分3章,第一章先跑通模型代码,熟悉yolo v5的输入和输出;第二章训练自己的数据;第三章讲解模型参数部分

文章目录

  • 一、跑通模型
    • 1、代码下载
    • 2、环境配置
    • 3、参数路径调整
    • 3、运行detect.py文件
  • 二、训练自己的数据
    • 1.数据准备
      • 1.1准备数据样本和标签
    • 2、路径创建与修改
      • 2.1样本数据读取路径修改
      • 2.2新建并修改配置文件.yaml
      • 2.3修改train.py文件中的data路径参数
    • 3、常用参数调节
    • 4、train.py
  • 三、可修改的参数部分详解
    • 1.总述
    • 2.参数详解
      • 2.1--weights
      • 2.2--cfg
      • 2.3--data
      • 2.4--hyp
      • 2.5--epochs
      • 2.6--batch-size
      • 2.7--imgsz
      • 2.8--rect
      • 2.9--resume
      • 2.10--nosave
      • 2.11--notest
      • 2.12--noautoanchor
      • 2.13--evolve
      • 2.14--bucket
      • 2.15--cache
      • 2.16--image-weights
      • 2.17--device
      • 2.18--multi-scale
      • 2.19--single-cls
      • 2.20--adam
      • 2.21--sync-bn
      • 2.22--workers
      • 2.23--project
      • 2.24--name
      • 2.25--exist-ok
      • 2.26--quad
      • 2.27--linear-lr
      • 2.28--label-smoothing
      • 2.29--patience
      • 2.30--freeze
      • 2.31--save-period
      • 2.32--local_rank
      • 2.33--entity
      • 2.34--upload_dataset
      • 2.35--bbox_interval
      • 2.36--artifact_alias
  • 参考

一、跑通模型

1、代码下载

  • YOLOv5 开源代码项目下载地址:https://github.com/ultralytics/yolov5

  • yolov5s.pt 的下载地址,放到yolov5-master根目录下即可。
    ps:不提前下载也可以,代码自动下载
    https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.pt

2、环境配置

conda create -n 【环境名自定义】 python = 3.6
activate 【环境名自定义】

进入pytorch官网,选择复制对应版本的pytorch安装命令

conda install pytorch torchvision torchaudio cudatoolkit=10.2 -c pytorch

然后缺什么库下载什么库就行了。具体查看根目录下的 requirements.txt

3、参数路径调整

源代码中好像没有权重和视频,如果没有自动下载的话请自行下载并保存到相应位置
这部分主要需要确认权重路径、和数据(图像或视频)路径
视频的话改为路径下指定视频名即可


这里的路径也需要改!

运行之前配置一下 Edit Configurations --> 选择 detect -->在Parameters 里输入 --view-img 可实时观看检测情况
ps:也可以不配置,此步骤可略过

3、运行detect.py文件

训练结束后可在根目录下的run文件夹查看检测结果

二、训练自己的数据

1.数据准备

1.1准备数据样本和标签

  • 数据标签格式

  • 用到的工具:labelImg

a.安装labelImg

pip install labelImg

b.选择文件路径、选择保存路径、选择yolo模式。并在 View中选择 自动保存模式

2、路径创建与修改

2.1样本数据读取路径修改

# 新建文件夹 #
文件夹名称自定义,如mydata1,下所属文件夹按以下格式创建
mydata1下文件目录如下,分别将前面准备好的【训练样本】放到images下的train,【测试样本】放到images下的val;【训练标签】–> labes下的train,【测试标签】–> labels下的val

2.2新建并修改配置文件.yaml

  • 在根目录data下新建xxx.yaml文件
  • 复制粘贴参数内容如下,路径自定义为你数据路径,类的数量名称自定义并按0、1、2、3对应排列

2.3修改train.py文件中的data路径参数

指定自己创建的xxx.yaml文件路径

3、常用参数调节

高亮部分都是初步训练时常用可修改的,具体内容看后面的解释
parser.add_argument(’–weights’, type=str, default=ROOT / 'yolov5s.pt’, help=‘initial weights path’) #选择预训练权重模型,若default为空则用程序自带初始权重
parser.add_argument(’–cfg’, type=str, default=‘yolov5s.yaml’, help=‘model.yaml path’) #选择神经网络模型
parser.add_argument(’–data’, type=str, default=ROOT / ‘data/mydata.yaml’, help=‘dataset.yaml path’) #样本数据路径,进入到mydata.yaml文件里修改修改
parser.add_argument(’–hyp’, type=str, default=ROOT / ‘data/hyps/hyp.scratch.yaml’, help=‘hyperparameters path’) #超参数:动量、衰减率等。一般用不到
parser.add_argument(’–epochs’, type=int, default=400) #训练几轮,设定epoch数量
parser.add_argument(’–batch-size’, type=int, default=32, help=‘total batch size for all GPUs, -1 for autobatch’) #每批次的数据量,default=-1时自动调节大小
parser.add_argument(’–imgsz’, ‘–img’, ‘–img-size’, type=int, default=640, help=‘train, val image size (pixels)’)#训练集和测试集图片的像素大小,640*640
parser.add_argument(’–device’, default=’’, help=‘cuda device, i.e. 0 or 0,1,2,3 or cpu’) #用于设置运行 pytorch 框架的使用设备,是用 GPU cuda,还是 cpu
parser.add_argument(’–workers’, type=int, default=0, help=‘max dataloader workers (per RANK in DDP mode)’) #多线程:这里建议 default 设置为 0。
parser.add_argument(’–project’, default=ROOT / ‘runs/train’, help=‘save to project/name’) #用于指定训练好的模型的保存路径。
parser.add_argument(’–freeze’, type=int, default=24, help=‘Number of layers to freeze. backbone=10, all=24’) #冻结层数设置

4、train.py

运行train.py训练即可
训练结束后会在根目录下生成一个run文件夹,里面存放训练结果和权重

三、可修改的参数部分详解

1.总述

参数部分代码如下:

'''*****************超参数修改*****************'''
def parse_opt(known=False):parser = argparse.ArgumentParser()parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')  #选择预训练权重模型,若default为空则用程序自带初始权重# parser.add_argument('--weights', type=str, default='', help='initial weights path')# parser.add_argument('--cfg', type=str, default='', help='model.yaml path')         #选择神经网络模型parser.add_argument('--cfg', type=str, default='yolov5s.yaml', help='model.yaml path')parser.add_argument('--data', type=str, default=ROOT / 'data/mydata.yaml', help='dataset.yaml path')  #样本数据路径,进入到mydata.yaml文件里修改修改parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch.yaml', help='hyperparameters path') #超参数:动量、衰减率等。一般用不到# parser.add_argument('--epochs', type=int, default=300)parser.add_argument('--epochs', type=int, default=400)    #训练几轮,设定epoch数量parser.add_argument('--batch-size', type=int, default=32, help='total batch size for all GPUs, -1 for autobatch')  #每批次的数据量,default=-1时自动调节大小parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')#训练集和测试集图片的像素大小,640*640parser.add_argument('--rect', action='store_true', help='rectangular training')  #减去一些不必要信息,加速模型推理过程parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')  #在最近训练的一个模型基础上继续训练parser.add_argument('--nosave', action='store_true', help='only save final checkpoint') #生效后只保存最后一次 pt 文件parser.add_argument('--noval', action='store_true', help='only validate final epoch') #生效后只在最后一次测试parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')parser.add_argument('--evolve', type=int, nargs='?', const=300, help='evolve hyperparameters for x generations')  #对x代超参数进行优化parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')parser.add_argument('--cache', type=str, nargs='?', const='ram', help='--cache images in "ram" (default) or "disk"')  #将对图片进行缓存,以便更好地进行训练parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')   #对于那些训练不好的图片,会在下一轮中增加一些权重。parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')  #用于设置运行 pytorch 框架的使用设备,是用 GPU cuda,还是 cpuparser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')   #对图片尺度进行变换parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')  # 用于设定训练数据集是单类别还是多类别。默认为 false,意味着是多别。parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')   #优化器:填入到 Edit Configuration --> Parametersparser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')   #进行多 GPU 进行分布式训练。# parser.add_argument('--workers', type=int, default=8, help='max dataloader workers (per RANK in DDP mode)')parser.add_argument('--workers', type=int, default=0, help='max dataloader workers (per RANK in DDP mode)')  #多线程:这里建议 default 设置为 0。parser.add_argument('--project', default=ROOT / 'runs/train', help='save to project/name')  #用于指定训练好的模型的保存路径。parser.add_argument('--name', default='exp', help='save to project/name')   # 用于设定保存的模型文件名。parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')  #用于设定预测结果的保存存在位置情况。parser.add_argument('--quad', action='store_true', help='quad dataloader')  #quad 数据加载的相关设置parser.add_argument('--linear-lr', action='store_true', help='linear LR')  #学习率方式设置parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')  #平滑处理防止过拟合parser.add_argument('--patience', type=int, default=100, help='EarlyStopping patience (epochs without improvement)')  #若epoch没有提升则提前结束parser.add_argument('--freeze', type=int, default=24, help='Number of layers to freeze. backbone=10, all=24')  #冻结层数设置parser.add_argument('--save-period', type=int, default=-1, help='Save checkpoint every x epochs (disabled if < 1)')   #用于记录训练日志信息,int 型,默认为 -1。parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')  #DistributedDataParallel 单机多卡训练,一般不改动。# Weights & Biases arguments  #wandb可视化的一些设置parser.add_argument('--entity', default=None, help='W&B: Entity')parser.add_argument('--upload_dataset', action='store_true', help='W&B: Upload dataset as artifact table')parser.add_argument('--bbox_interval', type=int, default=-1, help='W&B: Set bounding-box image logging interval')parser.add_argument('--artifact_alias', type=str, default='latest', help='W&B: Version of dataset artifact to use')  #无意义,可注释掉opt = parser.parse_known_args()[0] if known else parser.parse_args()return opt

2.参数详解

2.1–weights

parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')

选择预训练权重模型,若default为空则用程序自带初始权重

2.2–cfg

parser.add_argument('--cfg', type=str, default='yolov5s.yaml', help='model.yaml path')

选择神经网络模型,default为’ '时使用程序自带模型

2.3–data

parser.add_argument('--data', type=str, default=ROOT / 'data/mydata.yaml', help='dataset.yaml path')

样本数据路径,进入到mydata.yaml文件里修改修改

2.4–hyp

parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch.yaml', help='hyperparameters path')

超参数:动量、衰减率、box设置等等,一般情况下用不到

2.5–epochs

parser.add_argument('--epochs', type=int, default=400)

训练的轮数:训练几轮,设定epoch数量。源码中 default 值为 300,训练轮次则显示为 0~299

2.6–batch-size

parser.add_argument('--batch-size', type=int, default=32, help='total batch size for all GPUs, -1 for autobatch')

每次网路输入的数据量:每批次的输入数据量,default=-1时自动调节大小

2.7–imgsz

parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')

图片大小:训练集和测试集图片的像素大小,输入默认640*640

2.8–rect

parser.add_argument('--rect', action='store_true', help='rectangular training')

设置矩阵的训练方式:作用是减去一些不必要信息,加速模型推理过程。

2.9–resume

parser.add_argument('--resume', nargs='?', const=True, default=False, help='resume most recent training')

是否在最近训练的一个模型基础上继续训练:default 值默认是 false,当想要 default 为 true 时必须指定在哪个模型上继续训练。指定的模型路径按字符串形式赋值给 default。

2.10–nosave

parser.add_argument('--nosave', action='store_true', help='only save final checkpoint')

只保存最后一次 pt 文件

2.11–notest

 parser.add_argument('--noval', action='store_true', help='only validate final epoch')

生效后只在最后一次进行测试。

此类参数被激活的条件是填入到 Edit Configuration --> Parameters 中,若有多个被激活参数,中间用空格隔开即可。

2.12–noautoanchor

    parser.add_argument('--noautoanchor', action='store_true', help='disable autoanchor check')

用于设置在目标检测任务中是否采用锚点 / 锚框。
遍历输入图像上所有可能的像素框,然后选出正确的目标框,并对位置和大小进行调整就可以完成目标检测任务。
默认开启,用这种方式来简化模型训练过程。

2.13–evolve

    parser.add_argument('--evolve', type=int, nargs='?', const=300, help='evolve hyperparameters for x generations')

对x代超参数进行优化。
作用是寻找最优超参数的方式,方法是利用遗传算法自动搜索超参数。
默人不开启

2.14–bucket

 parser.add_argument('--bucket', type=str, default='', help='gsutil bucket')

这个参数是 yolov5 作者将一些东西放在谷歌云盘,可以进行下载。

2.15–cache

 parser.add_argument('--cache', type=str, nargs='?', const='ram', help='--cache images in "ram" (default) or "disk"')

生效后将对图片进行缓存,以便更好地进行训练。

2.16–image-weights

 parser.add_argument('--image-weights', action='store_true', help='use weighted image selection for training')

生效后对于那些训练不好的图片,会在下一轮中增加一些权重。

2.17–device

 parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')

用于设置运行 pytorch 框架的使用设备,是用 GPU cuda,还是 cpu

2.18–multi-scale

parser.add_argument('--multi-scale', action='store_true', help='vary img-size +/- 50%%')

对图片尺度进行变换

2.19–single-cls

parser.add_argument('--single-cls', action='store_true', help='train multi-class data as single-class')

用于设定训练数据集是单类别还是多类别。
默认为 false,意味着是多类别。

2.20–adam

parser.add_argument('--adam', action='store_true', help='use torch.optim.Adam() optimizer')

优化器:填入到 Edit Configuration --> Parameters 中即为 true ,意味着要用此优化器;否则为 false,为 false 时用的是随机梯度下降(SGD)优化算法。

2.21–sync-bn

parser.add_argument('--sync-bn', action='store_true', help='use SyncBatchNorm, only available in DDP mode')

进行多 GPU 进行分布式训练。

2.22–workers

parser.add_argument('--workers', type=int, default=0, help='max dataloader workers (per RANK in DDP mode)')

多线程:这里建议 default 设置为 0。

2.23–project

parser.add_argument('--project', default=ROOT / 'runs/train', help='save to project/name')

用于指定训练好的模型的保存路径。

2.24–name

parser.add_argument('--name', default='exp', help='save to project/name')

用于设定保存的模型文件名。

2.25–exist-ok

parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')

用于设定预测结果的保存存在位置情况。
当激活时为 true,在 name 指定文件夹下保存,源码中保存在 exp 文件夹下
当不激活时为 false,在新命名的文件夹下保存。

2.26–quad

parser.add_argument('--quad', action='store_true', help='quad dataloader')

解释为 quad 数据加载的相关设置。
简单理解,生效后可以在比前面 “–img-size” 部分设置的训练测试数据集更大的数据集上训练。

  • 好处是在比默认 640 大的数据集上训练效果更好
  • 副作用是在 640 大小的数据集上训练效果可能会差一些

2.27–linear-lr

parser.add_argument('--linear-lr', action='store_true', help='linear LR')

用于对学习速率进行调整
默认为 false,含义是通过余弦函数来降低学习率。

注:当我们使用梯度下降算法来优化目标函数的时候,当越来越接近Loss值的全局最小值时,学习率应该变得更小来使得模型尽可能接近这一点,而余弦退火(Cosine
annealing)可以通过余弦函数来降低学习率。

2.28–label-smoothing

parser.add_argument('--label-smoothing', type=float, default=0.0, help='Label smoothing epsilon')

用于对标签进行平滑处理。
作用是防止在分类算法中过拟合情况的产生。

2.29–patience

parser.add_argument('--patience', type=int, default=100, help='EarlyStopping patience (epochs without improvement)')

提前结束:若epoch没有提升则提前结束

2.30–freeze

parser.add_argument('--freeze', type=int, default=24, help='Number of layers to freeze. backbone=10, all=24')

冻结层:可适当减少冻结层数

2.31–save-period

parser.add_argument('--save-period', type=int, default=-1, help='Save checkpoint every x epochs (disabled if < 1)')

用于记录训练日志信息,int 型,默认为 -1。

2.32–local_rank

parser.add_argument('--local_rank', type=int, default=-1, help='DDP parameter, do not modify')

DistributedDataParallel 单机多卡训练,一般不改动。

2.33–entity

parser.add_argument('--entity', default=None, help='W&B: Entity')

与 wandb 库相关的参数设置,作用不大,忽略。

2.34–upload_dataset

parser.add_argument('--upload_dataset', action='store_true', help='W&B: Upload dataset as artifact table')

wandb 库对应的东西,作用不大,不必考虑。

2.35–bbox_interval

parser.add_argument('--bbox_interval', type=int, default=-1, help='W&B: Set bounding-box image logging interval')

与 wandb 库相关的参数设置,作用不大,忽略。

2.36–artifact_alias

parser.add_argument('--artifact_alias', type=str, default='latest', help='W&B: Version of dataset artifact to use')

这一行参数表达的是想实现但还未实现的一个内容,忽略即可。亲测注释掉整个程序也可运行。

参考

https://blog.csdn.net/IT_charge/article/details/119177578

Yolo v5 训练自己的数据从训练到调参实战详解相关推荐

  1. 《数据修复技术与典型实例实战详解》——1.4 分区表的修复

    本节书摘来自异步社区<数据修复技术与典型实例实战详解>一书中的第1章,第1.4节,作者:叶润华著,更多章节内容可以访问云栖社区"异步社区"公众号查看 1.4 分区表的修 ...

  2. 3000门徒内部训练绝密视频(泄密版)第8课:彻底实战详解使用IDE开发Spark程序

    彻底实战详解使用IDE开发Spark程序 使用IDE开发Spark分析 使用IDE开发Spark实战 使用IDE开发Spark的Local和Cluster 开发两种选择:IDEA.Eclipse 下载 ...

  3. R语言tidyr包gather()函数实战详解:数据收缩、从宽表到窄表

    R语言tidyr包gather()函数实战详解:数据收缩.从宽表到窄表 目录 R语言tidyr包gather()函数实战详解:数据收缩.从宽表到窄表 收缩两列数据

  4. R语言tidyr包spread()函数实战详解:数据裂变、从窄表到宽表

    R语言tidyr包spread()函数实战详解:数据裂变.从窄表到宽表 目录 R语言tidyr包spread()函数实战详解:数据裂变.从窄表到宽表

  5. R语言tidyr包Unite()函数实战详解:多个数据列合并为一列

    R语言tidyr包Unite()函数实战详解:多个数据列合并为一列 目录 R语言tidyr包Unite()函数实战详解:多个数据列合并为一列

  6. 03 mysql数据查询_MySql学习day03:数据表之间的连接、查询详解

    主键: 关键字:primary key 特点:不能为null,并且唯一. 主键分类: 逻辑主键:例如ID,不代表实际的业务意义,只是用来唯一标识一条记录(推荐) 业务主键:例如username,参与实 ...

  7. Oracle数据泵备份与恢复 命令 expdp/impdp 用法详解

    Oracle数据泵备份与恢复 命令 expdp/impdp 用法详解 关于expdp和impdp     使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户 ...

  8. python动态图表变化_Python数据可视化 pyecharts实现各种统计图表过程详解

    Python数据可视化 pyecharts实现各种统计图表过程详解 发布时间:2020-09-10 04:53:26 来源:脚本之家 阅读:78 1.pyecharts介绍 Echarts是一款由百度 ...

  9. 火星遥感数据的获取与处理工具安装详解

    火星遥感数据的获取与处理工具安装详解 文章目录 火星遥感数据的获取与处理工具安装详解 前言 1.火星遥感影像数据下载网址 2.火星遥感影像数据处理工具 前言 不知道有没有和我一样想做点跟火星相关的小实 ...

最新文章

  1. yaml 文件格式简介
  2. MFC框架程序----实现十
  3. 设置了hover伪类中有cursor:hand但是没有效果
  4. python使用redis在实际场景使用_Python使用Redis实现作业调度系统(超简单)
  5. linux内存分析命令,Linux進程內存分析pmap命令
  6. PHP 实现二分查找
  7. 最大流自用模板(例题:HDU1532)
  8. nodejs+mongodb+vue前后台配置ueditor
  9. 如何弄ad装配图_[分享][BCW]上海西康路189弄——“世界最美购物中心”幕墙的诞生...
  10. 手机端局部滚动问题 overflow-y:auto
  11. 传说中的世界500强面试题-推理能力(2)
  12. 华硕路由器无线打印服务器怎么开启,华硕ASUS路由器无线中继模式设置教程
  13. 进程ld-linux-x86-64是什么,解决挖矿病毒占用cpu以及误删 ld-linux-x86-64.so.2 文件的问题...
  14. PS快速切换证件照背景颜色
  15. ipv4或ipv6没有访问权限的解决办法
  16. 马未都说收藏:陶瓷篇(2)三国两晋南北朝唐代时期的瓷器
  17. 2016年年度总结 金鸡纳福 岁月奔跑
  18. 某pdf转word v6.3.0.2算法分析
  19. noip2014 无线网路发射器选址 (模拟)
  20. IE浏览器主页被hao123等篡改的解决办法

热门文章

  1. 数据结构笔记7:排序
  2. Redis-shake 数据迁移工具
  3. 无人机巡检系统是什么?如何助力无人机巡检作业
  4. 数据清洗_第一篇 缺失值处理(2)_样条函数 Spline function
  5. 愚昧无知者,小人,君子
  6. 我的2015:行走篇
  7. 亚马逊产品listing被下架暂停销售怎么办?
  8. 前端学习必须掌握知识点
  9. Timer定时器和电脑播放音乐
  10. UTC和PST及北京时间怎样换算