(转)理解YOLOv2训练过程当中输出参数含义

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

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



如下是训练过程当中终端输出的一个截图:c#

以上截图显示了全部训练图片的一个批次(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,也被称为交并集之比:点击打开连接),这样就能理解为何分块输出中的参数是一些重要且必需要输出的参数了。.net

 



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

回归正题,咱们来分析一下这些用来描述训练图集中的一个批次的训练结果的输出。那些想本身深刻源代码验证我所说的内容的同窗注意了,这段代码:点击打开连接  执行了如下的输出:对象

  • 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的探索决不该该到此为止。blog

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

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

转自:https://blog.csdn.net/dcrmg/article/details/78565440

相关文章
相关标签/搜索