【问题记录】YOLOv5继续训练时精度损失问题解决

1. 会产生精度损失的训练过程

1.1 修改部分

  • 修改 train.py 中的超参数 epochsresume 的默认值为 default=True.
    在这里插入图片描述
  • utils/torch_utils.py 中的 smart_resume 函数中添加 ckpt['epoch'] = 299(此处的数值为训练完成的 epochs 数)
    在这里插入图片描述
  • exp/opt.yaml 中修改 epochs 数后训练。
    在这里插入图片描述

1.2 训练结果展示

  • 从下面展示的精确度和 lr 的曲线图可以看到,在恢复训练之后精度会出现大幅度降低的现象。
  • 精确度-曲线图
    在这里插入图片描述
  • lr-曲线图
    在这里插入图片描述

2. 减少精度损失的训练过程

  • 上面直接修改超参数 resume 恢复训练会出现精度损失,从现象上看是因为继续训练之后的 lr 比断点处的 lr 大很多导致的。针对这个想法,减少精度损失可以从 lr 下手,即在恢复训练时将 lr 修改为断点处的 lr 值。下面展示详细的修改过程。

2.1 修改部分

  • 修改 train.py 中的超参数 epochsresume 的默认值为 default=True.
    在这里插入图片描述
  • utils/torch_utils.py 中的 smart_resume 函数中添加 ckpt['epoch'] = 299(此处的数值为训练完成的 epochs 数)
    在这里插入图片描述
  • exp/opt.yaml 中除了修改 epochs 之外修改 lr0lrf 为断点处的值(断点处的 lr 值可在 results.csv 中查看)。
    在这里插入图片描述
  • 注:若后续需要正常训练,训练完成后及时恢复代码修改。

2.2 训练结果展示

  • 精确度-曲线图
    在这里插入图片描述

  • lr-曲线图
    在这里插入图片描述

  • 可以看到精确度和 lr 曲线图都衔接了之前的训练结果。

  • 此外,由于 yolov5-7.0 默认 lr 为线性下降,在 train.py 中可见代码如下。

    if opt.cos_lr:
    	lf = one_cycle(1, hyp['lrf'], epochs)  # cosine 1->hyp['lrf']
    else:
    	lf = lambda x: (1 - x / epochs) * (1.0 - hyp['lrf']) + hyp['lrf']  # linear
    scheduler = lr_scheduler.LambdaLR(optimizer, lr_lambda=lf)  # plot_lr_scheduler(optimizer, scheduler, epochs)
    
    • 为了保持尽可能一致的学习率,需将 hyp['lrf'] 替换为默认的初始 lrf 值。
    • 在计算线性下降的学习率时,由于完成训练后继续训练的 epochs 数只会比之前的大,且lf = (1 - x / epochs) * (1.0 - hyp['lrf']) + hyp['lrf'] = 0.1 - 0.09 * (x / epochs)hyp['lrf'] 的初始值为0.01),所以 300 epochs 的学习率斜率比 400 epochs 的大,导致 lr 斜率不一致,所以训练完成后接着训练需要根据具体情况进行学习率的调整。
  • 23
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 您好,要使用yolov5继续训练并增加epoch,您需要执行以下步骤: 1. 确保您已经安装了yolov5,并且已经准备好了训练数据集。 2. 打开终端,进入yolov5的根目录。 3. 执行以下命令,继续训练模型并增加epoch: python train.py --weights /path/to/weights --epochs 100 --data /path/to/data.yaml --cfg /path/to/yolov5s.yaml --batch-size 16 其中,/path/to/weights是之前训练好的模型权重文件路径,/path/to/data.yaml是您的数据集配置文件路径,/path/to/yolov5s.yaml是您选择的yolov5模型配置文件路径,--epochs 100表示增加100个epoch,--batch-size 16表示每个批次的图像数量为16。 4. 等待训练完成后,您可以使用以下命令测试您的模型: python detect.py --weights /path/to/weights --img 640 --conf .4 --source /path/to/images 其中,/path/to/images是您要测试的图像文件夹路径,--img 640表示输入图像的大小为640x640,--conf .4表示置信度阈值为.4。 希望这些信息对您有所帮助! ### 回答2: YOLOv5 是一种流行的目标检测算法,它基于深度学习进行训练,并且可以在较短的间内高效地检测出图像中的目标。当YOLOv5训练不足或者检测结果比较差,我们可以采取增加epoch的方式来继续进行训练。 首先,我们需要明确epoch的概念。一个epoch表示模型对整个训练数据集进行一次完整的迭代训练YOLOv5训练过程可以分为多个epoch,并且每个epoch都会更新模型的权重参数。当我们增加epoch,模型会对数据进行更多的训练,从而进一步优化模型。当然,过多的epoch也可能导致模型过拟合,需要谨慎选择。 具体来说,我们可以通过增加epoch的方式来继续训练YOLOv5模型,步骤如下: 1. 导入已经训练好的模型。如果我们之前已经进行了一些训练,可以直接导入之前模型的权重参数。 2. 根据需要,调整训练的参数。例如,可以设置学习率、批量大小等参数。这些设置的目的是让模型更好地适应当前的数据集。 3. 进行额外的训练。我们可以设置增加训练的epoch数,然后训练模型。在每个epoch完成后,模型的权重参数将会更新。 4. 评估模型的性能。通过训练数据集和测试数据集的误差,可以评估模型的性能,看看训练的效果是否改进。如果性能改进不大,可以考虑进行其他方式的优化。 需要注意的是,增加epoch并不能保证模型的效果一定会变好,这需要视具体情况而定。如果数据集比较小,训练次数过多也可能导致过拟合现象发生。因此,在进行epoch增加训练,应该根据具体情况进行判断和调整,以获得更好的效果。 ### 回答3: YOLOv5 是一种先进的物体检测模型,由于其深度学习算法的高精度和快速响应,越来越受到人们的青睐。在使用 YOLOv5 进行物体检测过程中,经常会需要增加 epoch 进行持续训练,这可以提高模型检测的准确率。 增加 epoch 的方法是比较简单的。首先,需要设定训练次数(iterations),然后将其转化为 epoch 值。例如,如果一个模型需要进行 20000 次训练,而每次训练的图像数量为 32 张,那么每个 epoch 中就需要进行 20000/(数据集大小32)= 624 次迭代训练。如果每秒训练 20 张图像,那么进行 624 次迭代训练所需的间为 31.2 秒。因此,将 epoch 设置为 100 可以让模型训练 100 个 epoch,进而增加模型的准确性。 另外,还需要在模型训练过程中控制学习率(learning rate),可以采用 step learning rate 或 cosine learning rate 等方法。在 step learning rate 方法中,可以设置一个初始学习率和一些 step 值,每个 step 值将学习率下降为其初始值的某个百分比。在 cosine learning rate 方法中,学习率将按照 cosine 曲线下降,直到达到最小值。这些方法都可以较好地控制学习率的变化,避免过早或过度地在训练过程中调整模型参数。 总之,将 YOLOv5 模型的 epoch 增加,是提高模型检测准确率的有效方法之一。同训练过程中,还需要针对具体情况进行学习率控制,以加快训练速度,并提高模型趋于稳定的程度,从而获得更好的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值