如何去训练yolov5 神经网络

本文详细地讲解了如何去训练yolov5 模型的神经网络,首先讲解了如何在本地训练神经网络,接着又讲解了如何利用云端的GPU训练神经网络。


文章目录

一、在本地上训练yolov5

1 打开train.py文件

2 参数设置

3  锚点和锚框是什么

二、利用云端GPU 训练yolov5

1 登录google calab 网站

2 上传模型

3 环境配置

4 添加tensorboard插件

5 查看训练数据

6 运行python程序

7 查看训练的模型效果


一、在本地上训练yolov5

1 打开train.py文件

可以先点击运行看看

 parser.add_argument('--workers', type=int, default=8, help='maximum number of dataloader workers')


这里在运行前可以修改一个参数,将main函数底下worker参数的default=8改为default=0, 这样可以节省时间,
如果运行电脑没有报错的话,我们可以将这个default值增加。

2 参数设置

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

模型初始化参数,default可以给它一个我们训练好的模型,作为参数初始化,也可以为空,
我们在训练的过程中,一般都是从头开始训练,所以经常设置default = ' ' ,

除此之外,‘ ’经常也会填yolov5s.pt,yolov5m.pt,yolov5l.pt,yolov5x.pt,这些训练好的模型。
我们一般采用程序自己根据权重进行初始化,不采用训练好的模型来进行参数初始化

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

采用的模型结构,模型的配置,default='', ‘ ’里可以把模型的路径放进去,像yolov5s.yaml , yolov5l.yaml, yolov5m.yaml yolov5x.yaml

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

指定数据训练集,default= 'data/coco128.yaml' ,‘ ’里放的就是数据集的地址

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

hyp是超参数的意思,default=ROOT / 'data/hyps/hyp.scratch-low.yaml',它这里面写入就是一个超参数的地址,
hyp.scratch-low.yaml,它其实就是Hyperparameters for low-augmentation COCO training from scratch,

意思是:它是一个从头开始增强coco 训练的超参数

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

训练多少轮,默认default=300, 会训练300轮

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

数量,将多少数据打包成一个batch,然后送入网络当中进行运算

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

分别设定训练集和测试集图片的一个大小

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

矩阵的一个训练方式,我们训练的图片如果不是一个正方形,它训练完成后会是一个正方形,对其他空白的地方进行填充,
rect参数的作用就是将填充的地方减少,比如说一个长方形的图片,处理后是一个正方形,这个正方形中除了图片本身,还自动填充了很多空白部分
使用rect后,我们就会得到一个长方形图片。

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

恢复最近的训练,我们如果使用这个参数,需要将 default=False,设置成 default=“上次模型训练的地址”
设置好后,它会接着你上次程序运行的结果接着运行下去。

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

一个模型通常在一个数据上会训练很多次,每次训练的结果都会保存,nosave如果设置为true,那么运行程序,它最后保留最后一个模型训练的一些权重,数据

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

我们通常会在每轮训练结束都进行测试,如果noval=true,那么它只会在最后一轮训练结束进行测试

 

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

如果noautoanchor设置为true的话,它就会禁用自动锚点,正常情况我们都是开启的,锚点也很重要,我们会在3中进行简单阐述。

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

超参数的x代进行进化,说简单点,就是优化超参数,选择最优参数的一种方式。

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

在ram或者disk中对图片进行缓存,默认default是在ram中保存

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

对上一轮的训练中,对于哪些图片的训练效果不太好,在下一轮的训练中,对这些图片加一下相关的权重。这个效果并不理想,我们一般不使用。

    parser.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('--optimizer', type=str, choices=['SGD', 'Adam', 'AdamW'], default='SGD', help='optimizer')

这是一个优化器选项,我们可以选择指定的优化器,

如果为不设置,则模型就会默认使用SGD(stochastic gradient descent)随机梯度下降模型

   

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

如果电脑又多个cpu那就可以使用这,就可与采用ddp的模型进行多步数训练

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

最大数据加载的线程,默认default=8, 我们在训练时一般改为0, 可以按照需要增加

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

数据加载,理解的并不是很好。
 

3  锚点和锚框是什么

这里科普一下什么是锚点,锚框?
先说说什么是锚框,锚框是用于对于目标检测任务中,

对目标检测我们以前是:遍历输入图像上所有可能的像素框,然后选出正确的目标框

并对位置和大小进行调整就可以完成目标检测任务这些进行预测的像素框就叫锚框。这些锚框通常都是方形的。

也可以这样理解
锚框,就是目标检测算法中,以锚点为中心,由算法预定义的多个不同长宽比的先验框。
为了增加任务成功的几率,通常会在同一位置设置不同宽高比的锚框(本文的方式在改变宽高比的同时维持面积不变)。

二、利用云端GPU 训练yolov5

1 登录google calab 网站

首先登录google calab 的网站,创建一个项目

2 上传模型

因为google calab这个网站,只能上传一个一个的文件夹,所以我们需要将整个模型进行打包,然后在网站上上传打包好的模型

3 环境配置

上传打包好的模型后,然后输入代码:
解压我们上传的文件夹,并指定保存路径
 ! unzip /content/yolov5-6.1.zip -d /content/yolov5

如何去训练yolov5 神经网络_第1张图片

进入解压后的文件,yolov5-6.1这个目录中
 %cd /content/yolov5/yolov5-6.1

安装程序运行需要的一些package
 !pip install -r requirements.txt
 如何去训练yolov5 神经网络_第2张图片
自此,环境已经配置好了

4 添加tensorboard插件

在命令行输入:

%load_ext tensorboard

其中,%load_ext 就是安装插件的意思,后面直接加你想安装的插件就行了

5 查看训练数据

打开tensorboard, 来查看我们的训练数据,输入代码:

%tensorboard --logdir=runs/train

要先打开这个,在运行程序

6 运行python程序

在命令行输入:

!python train.py --rect

注:程序运行默认的数据集就是coco128,也就是coco数据集的前128张图片,
如果我们要使用完整的coco数据集进行训练,也是可以的
在命令行输入   !python train.py --rect --data=data/coco.yaml   即可

如果要设置其他参数,方法类似

7 查看训练的模型效果

程序运行完成后,weights底下有两个文件,best.py, last.py, 一个是效果最好的模型,后一个是最后运行的模型


除此之外,我们也可以在别人训练的基础上进行训练

你可能感兴趣的:(python,开发语言,深度学习,神经网络,cnn)