当前位置: 代码迷 >> 综合 >> win10+anaconda+pychram+yolov5调参、训练经验慢慢更新
  详细解决方案

win10+anaconda+pychram+yolov5调参、训练经验慢慢更新

热度:12   发布时间:2023-12-14 03:01:13.0

(1)训练参数

    opt参数解析:
    cfg:模型配置文件,网络结构
    data:数据集配置文件,数据集路径,类名等
    hyp:超参数文件
    epochs:训练总轮次
    batch-size:批次大小
    img-size:输入图片分辨率大小
    rect:是否采用矩形训练,默认False
    resume:接着打断训练上次的结果接着训练
    nosave:不保存模型,默认False
    notest:不进行test,默认False
    noautoanchor:不自动调整anchor,默认False
    evolve:是否进行超参数进化,默认False
    bucket:谷歌云盘bucket,一般不会用到
    cache-images:是否提前缓存图片到内存,以加快训练速度,默认False
    weights:加载的权重文件
    name:数据集名字,如果设置:results.txt to results_name.txt,默认无
    device:训练的设备,cpu;0(表示一个gpu设备cuda:0);0,1,2,3(多个gpu设备)
    multi-scale:是否进行多尺度训练,默认False
    single-cls:数据集是否只有一个类别,默认False
    adam:是否使用adam优化器
    sync-bn:是否使用跨卡同步BN,在DDP模式使用
    local_rank:gpu编号
    logdir:存放日志的目录
    workers:dataloader的最大worker数量

举例使用方式:


原文链接:https://blog.csdn.net/Q1u1NG/article/details/107463417

2021/4/22更新

训练参数:

  • — img: 输入图像的大小,建议使用640,因为对于交通场景,输入图片尺寸过小时,会导致部分对象宽高小于3像素,可能会影响训练精度
  • — batch-size: 批次大小,对于2080Ti-11GB 或者P100-16GB,输入img-size 640,batch-size 32为上限
  • — epochs: 训练迭代数,作者建议训练300个epochs起
  • — data: 创建的 YAML 文件uc_data.yaml
  • — cfg: 模型文件Custom_yolov5s.yaml,需要自己至少修改类别数量及类别种类
  • — weights: 对于本项目不使用预训练权重,如果需要预训练权重,可以访问此地址
  • — cache-images: 将预处理后的训练数据全部存储在RAM中,能够加快训练速度
  • — hyp: 这个参数是自定义的hyp.yaml地址,对于小尺寸数据,可以更改hyp中optimizer为Adam,并修改配套参数为作者预设的Adam参数
  • — rect:输入这个参数,会关闭Mosaic数据增强
  • — resume: 从上次训练的结束last.pt继续训练
  • — nosave: 输入这个参数将存储最后的checkpoint,可以加快整体训练速度,但是建议关闭这个参数,这样能保留best.pt
  • — notest: 只测试最后一个epoch,能加快整体训练速度
  • — noautoanchor: 关闭自适应自适应锚定框,YOLO V5会自动分析当前锚定框的 Best Possible Recall (BPR) ,对于img-size 640,最佳BPR为0.9900,随着img-size降低,BPR也随之变差
  • — multi-scale: 输入图像多尺度训练,在训练过程中,输入图像会自动resize至 img-size +/- 50%,能一定程度上防止模型过拟合,但是对于GPU显存要求很高,对于640的img-size至少使用16GB显存,才能保证运行不出错
  • — single-cls: 模型的输出为单一类别,比如我只需要识别Trunk
  • — device: 选择使用CUDA或者CPU

YOLO V5的作者建议至少训练300个回合,每次训练完成后所有的结果及权重会储存在runs文件夹下。

参考:使用YOLO V5训练自动驾驶目标检测网络 - 知乎

(拓展)

1.超参数进化evolve

今天想试一下,使用的方法是:

--evolve

进化过程中有两个重要的参数:

第一个参数为

parent, 可选值为single或者weighted,这个参数的作用是:决定如何选择上一代。

如果选择single,代表只选择上一代中最好的那个。如果选择weighted,代表选择得分的前10个加权平均的结果作为下一代。

第二个参数为

method,可选值为1,2,3, 分别代表使用三种模式来进化。

2.对于Adam

YOLO V5的作者建议是,如果需要训练较小的自定义数据集,Adam是更合适的选择,尽管Adam的学习率通常比SGD低。但是如果训练大型数据集,对于YOLOV5来说SGD效果比Adam好。

实际上学术界上对于SGD和Adam哪个更好,一直没有统一的定论,取决于实际项目情况。

优化函数如果训练比较小的自定义的数据集,adam是比较合适的选择,但是如果训练大型的数据集那么使用sgd优化函数的比较多。

刚刚试了下,adam优化和 cache-images确实会好一点,对了我的机子是 i9-10900k、128g、TRX6000,但是不爽的是bitch_size只能调到16.

(2)超参数文件hyp解析

lr0: 0.00447  # 学习率,,可以理解为模型的学习速度lrf: 0.114    # 余弦退火超参数momentum: 0.873 # 学习率动量,梯度下降法中一种常用的加速技术,加快收敛weight_decay: 0.00047 # 权重衰减系数,防止过拟合。在损失函数中,weight decay是放在正则项(regularization)前面的一个系数,正则项一般指示模型的复杂度,所以weight decay的作用是调节模型复杂度对损失函数的影响,若weight decay很大,则复杂的模型损失函数的值也就大。giou: 0.0306 # giou损失的系数cls: 0.211 # 分类损失的系数cls_pw: 0.546 # 分类BCELoss中正样本的权重obj: 0.421 # 有无物体损失的系数obj_pw: 0.972 # 有无物体BCELoss中正样本的权重iou_t: 0.2 # 标签与anchors的iou阈值iou training thresholdanchor_t: 2.26 # 标签的长h宽w/anchor的长h_a宽w_a阈值, 即h/h_a, w/w_a都要在(1/2.26, 2.26)之间anchor-multiple threshold
# anchors: 5.07fl_gamma: 0.0  # 设为0则表示不使用focal loss(efficientDet default is gamma=1.5)
# 下面是一些数据增强的系数, 包括颜色空间和图片空间hsv_h: 0.0154 # 色调
hsv_s: 0.9 # 饱和度
hsv_v: 0.619 # 明度
degrees: 0.404 #旋转角度
translate: 0.206  # 水平和垂直平移
scale: 0.86   # 缩放
shear: 0.795  # 剪切
perspective: 0.0  # 透视变换参数
flipud: 0.00756  # 上下翻转
fliplr: 0.5  # 左右翻转
mixup: 0.153  # mixup系数

参考:U版YOLOv5学习笔记之训练参数 | 码农家园

调参经验

  1. learning-rate 学习速率:学习速率越小,模型收敛花费的时间就越长,但是可以提高模型精确度。一般初始设置为0.1,然后每次除以0.2或者0.5来改进,得到最终值;

  2. batchsize 样本批次容量:影响模型的优化程度和收敛速度,需要参考你的数据集大小来设置,具体问题具体分析

  3. weightdecay 权重衰减:用来在反向传播中更新权重和偏置,一般设置为0.005;

  4. epoch-number 训练次数:包括所有训练样本的一个正向传递和一个反向传递,训练至模型收敛即可;(注:和迭代周期iteration不一样)

  5. 经过交叉验证,dropout率等于0.5的时候效果最好,原因是0.5的时候dropout随机生成的网络结构最多。

参考:YOLO经验总结 | spicyCV

2021/4/22更新

(3)test.py

(4)detect.py

检测参数:

  • — weights: 训练权重的路径
  • — source:推理目标的路径,可以是图片,视频,网络摄像头等
  • — source:推理结果的输出路径
  • — img-size:推理图片的大小
  • — conf-thres: 对象置信阈值,默认0.4
  • — iou-thres: NMS的IOU阈值,可以根据实际对象的重叠度调节,默认0.5
  • — device: 选择使用CUDA或者CPU
  • — view-img: 显示所有推理结果
  • — save-txt:将每一帧的推理结果及边界框的位置,存入*.txt文件
  • — classes:类别过滤,意思是只推理目标类别
  • — agnostic-nms: 使用agnostic-nms NMS

参考:使用YOLO V5训练自动驾驶目标检测网络 - 知乎

(4)可视化

可视化比较简单直接在环境中输入:

pip install wandb

安装完后,直接训练

Weights & Biases

在这个网站上注册一下

训练的时候他会叫你打开这个网站

复制上面的码

然后就可以看到

下面想讲一下这个参数

这个是标签和结果大家都明白

接下来是 precision、recall、mAP_0.5、mAP_0.5:0.95

(5)测试模型调用相机

python detect.py --source 0 --weights last.pt

(6)过拟合问题

关于过拟合问题最好的方式是增加样本量

下面是我自己的看法 

个人认为:

1.有可能是模型比较小

举例在yolov5里面,yolov5x是模型最小速度最快,模型的深度为0.33。如果经常过拟合的话可以尝试使用一下大一点的yolov5x的模型。

2.还有可能是我迭代次数太多了数据集比较小直接就学到头了。

  相关解决方案