最近有人问起在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 生成的,具体代码见:点击打开连接
优化
在分析分块输出以前,咱们得了解一下IOU(Intersection over Union,也被称为交并集之比:点击打开连接),这样就能理解为何分块输出中的参数是一些重要且必需要输出的参数了。.net
能够看到,IOU(交集比并集)是一个衡量咱们的模型检测特定的目标好坏的重要指标。100%表示咱们拥有了一个完美的检测,即咱们的矩形框跟目标完美重合。很明显,咱们须要优化这个参数。3d
回归正题,咱们来分析一下这些用来描述训练图集中的一个批次的训练结果的输出。那些想本身深刻源代码验证我所说的内容的同窗注意了,这段代码:点击打开连接 执行了如下的输出:对象
在这篇短文里,咱们回顾了一下YOLOv2在终端输出的不一样的参数的含义,这些参数也在告诉咱们YOLOv2的训练过程是怎样进行的。这个能在必定程度上解答你们关于YOLOv2的训练输出的大部分问题,但请记住,对YOLOv2的探索决不该该到此为止。blog
跟以往同样,欢迎你们在评论区留言,进一步讨论关于YOLOv2的相关问题,我也会不断优化改进这篇文章,因此,别忘了留言评论哦!
原英文地址: https://timebutt.github.io/static/understanding-yolov2-training-output/