理解YOLOv2训练过程中输出参数含义

原英文地址: https://timebutt.github.io/static/understanding-yolov2-training-output/


最近有人问起在YOLOv2训练过程中输出在终端的不同的参数分别代表什么含义,如何去理解这些参数?本篇文章中我将尝试着去回答这个有趣的问题。


刚好现在我正在训练一个YOLOv2模型,拿这个真实的例子来讨论再合适不过了,下边是我训练中使用的 .cfg 文件(你可以在cfg文件夹下找到它):





以下是训练过程中终端输出的一个截图:




以上截图显示了所有训练图片的一个批次(batch),批次大小的划分根据我们在 .cfg 文件中设置的subdivisions参数。在我使用的 .cfg 文件中 batch = 64 ,subdivision = 8,所以在训练输出中,训练迭代包含了8组,每组又包含了8张图片,跟设定的batch和subdivision的值一致。

(注: 也就是说每轮迭代会从所有训练集里随机抽取 batch = 64 个样本参与训练,所有这些 batch 个样本又被均分为 subdivision = 8 次送入网络参与训练,以减轻内存占用的压力)

批输出


针对上图中最后一行中的信息,我们来一步一步的分析。如下的输出是由 detector.c 生成的,具体代码见:点击打开链接



  • 9798: 指示当前训练的迭代次数
  • 0.370096: 是总体的Loss(损失)
  • 0.451929 avg: 是平均Loss,这个数值应该越低越好,一般来说,一旦这个数值低于0.060730 avg就可以终止训练了。
  • 0.001000 rate: 代表当前的学习率,是在.cfg文件中定义的。
  • 3.300000 seconds: 表示当前批次训练花费的总时间。
  • 627072 images: 这一行最后的这个数值是9798*64的大小,表示到目前为止,参与训练的图片的总量。

分块输出


在分析分块输出之前,我们得了解一下IOU(Intersection over Union,也被称为交并集之比:点击打开链接),这样就能理解为什么分块输出中的参数是一些重要且必须要输出的参数了。



可以看到,IOU(交集比并集)是一个衡量我们的模型检测特定的目标好坏的重要指标。100%表示我们拥有了一个完美的检测,即我们的矩形框跟目标完美重合。很明显,我们需要优化这个参数。


回归正题,我们来分析一下这些用来描述训练图集中的一个批次的训练结果的输出。那些想自己深入源代码验证我所说的内容的同学注意了,这段代码:点击打开链接  执行了以下的输出:




  • Region Avg IOU: 0.326577: 表示在当前subdivision内的图片的平均IOU,代表预测的矩形框和真实目标的交集与并集之比,这里是32.66%,这个模型需要进一步的训练。
  • Class: 0.742537: 标注物体分类的正确率,期望该值趋近于1。
  • Obj: 0.033966: 越接近1越好。
  • No Obj: 0.000793: 期望该值越来越小,但不为零。
  • Avg Recall: 0.12500: 是在recall/count中定义的,是当前模型在所有subdivision图片中检测出的正样本与实际的正样本的比值。在本例中,只有八分之一的正样本被正确的检测到。
  • count: 8:count后的值是所有的当前subdivision图片(本例中一共8张)中包含正样本的图片的数量。在输出log中的其他行中,可以看到其他subdivision也有的只含有6或7个正样本,说明在subdivision中含有不含检测对象的图片。

总结

在这篇短文里,我们回顾了一下YOLOv2在终端输出的不同的参数的含义,这些参数也在告诉我们YOLOv2的训练过程是怎样进行的。这个能在一定程度上解答大家关于YOLOv2的训练输出的大部分问题,但请记住,对YOLOv2的探索决不应该到此为止。

跟以往一样,欢迎大家在评论区留言,进一步讨论关于YOLOv2的相关问题,我也会不断优化改进这篇文章,所以,别忘了留言评论哦!


原英文地址: https://timebutt.github.io/static/understanding-yolov2-training-output/


  • 3
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
要调整YOLOv8的训练参数以改善训练结果,可以考虑以下几个方面: 1. 批次大小(batch size)和子分区(subdivisions):根据引用\[1\]和引用\[3\]的描述,批次大小和子分区的设置会影响训练过程每个迭代参与训练的样本数量。如果你的训练样本包含了很多小目标,可以尝试增大批次大小,以便更好地捕捉小目标的特征。同时,适当调整子分区的数量也可以减轻内存占用的压力。你可以根据实际情况尝试不同的批次大小和子分区的组合,找到最适合你的数据集的设置。 2. 学习率(learning rate):学习率是控制模型参数更新的速度的重要参数。如果训练结果变差,可以尝试调整学习率。一般来说,如果训练过程损失函数下降缓慢,可以尝试增大学习率;如果损失函数下降过快或出现震荡,可以尝试减小学习率。通过逐步调整学习率,可以找到一个合适的值来平衡训练速度和模型性能。 3. 数据增强(data augmentation):数据增强是一种通过对训练样本进行随机变换来扩充数据集的方法。通过引入更多的样本变化,可以提高模型的泛化能力。你可以尝试在训练过程使用不同的数据增强技术,如随机裁剪、旋转、缩放等,以增加数据的多样性。 4. 网络结构:YOLOv8的网络结构包含了多个卷积层和池化层,你可以尝试调整网络结构的深度、宽度或其他参数,以适应你的数据集和任务需求。例如,你可以增加网络的层数或通道数,以提高模型的表达能力。 综上所述,调整YOLOv8的训练参数需要综合考虑批次大小、子分区、学习率、数据增强和网络结构等因素。通过不断尝试和调整这些参数,你可以逐步改善YOLOv8的训练结果。 #### 引用[.reference_title] - *1* *2* *3* [YOLOv3训练过程重要参数理解输出参数含义](https://blog.csdn.net/martinkeith/article/details/103009177)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值