关于YOLOv5的个人理解
背景
虽然v5项目的作者还没有发正式的文章,但该项目早已被大家熟知。v5与之前的v4相比,我认为不同的地方主要分为以下几个方面:预测bounding box的宽高公式不同,正负样本的匹配方式。至于模型结构上大体上与v4是一样的(存在细微的差别,比如加入了SPPF模块),还有就是数据增强方面,但这并不是本文的重点,我不会对此作出详细介绍。
思想
与之前的版本相同,并不存在大的改动,核心思想不变(将图像分成多个grid,每个grid分别预测对应位置的bounding box)。
模型结构
从模型结构(从别处直接复制过来的,见谅,本人也只是作一些学习笔记)中我们可以看到模型的输入依然是整个图像,通过一系列的卷积、池化输出三个不同尺寸的预测特征图(与v4是相同的,以及输出的所有变量的含义也是相同的),模型结构的介绍不细讲。
训练阶段
与v4类似,训练模型采用的损失公式是不变的,公式上面不再作讲解。既然训练所采用的公式都是一样的,v5与v4不同的地方在哪呢。我热为可以分为两个方面:1、改变了预测bounding box的宽高计算方式,2、不一样的正负样本匹配规则。下面我会依次围绕这两个方面进行讲解。
- 宽高计算公式
在box中心点以及宽高预测方面,v5与v4不同的地方只有宽高(因为中心点的计算方式在v4中已经被改进了)。将原本预测的 t w t_w tw需要经过 e t w e^{t_w} etw函数换成了 2 ∗ s i g m o i d ( t w ) 2*sigmoid(t_w) 2∗sigmoid(tw),即将值域的范围由原本的【0,+∞】变成了【0 ,4】。这样做的一个好处,我认为是符合多尺度的思想。因为当初设计多尺度思想的时候就是计划大尺度预测特征图检测小目标,小尺度预测特征图检测大目标,而原本的宽高计算方式它并没有限制其所能够检测的最大目标的尺寸,致使模型在训练过程中是很难(难的地方在于 t w t_w tw所能取到的值被缩放在了一个较窄的范围内,无法很好的学习)。
以下是宽高计算公式:
- 正负样本匹配方式
与v4所采用的计算预测box与GT之间的IOU匹配正样本的方式不同,在v5中则是计算宽高比最大差值。首先假设预测的bounding box对应的anchor的宽高为 w a w_a wa、 h a h_a ha,GT的宽高 w g w_g wg、 h g h_g hg,随后先计算 r w r_w rw= w a w_a wa/ w g w_g wg、 r w ′ r_w^{'} rw′= w g w_g wg/ w a w_a wa和 r h r_h rh= h a h_a ha/ h g h_g hg、 r h ′ r_h^{'} rh′= h g h_g hg/ h a h_a ha。然后取这四个之中最大的那一个(记为max),如果该max的值处在预先设定好的阈值内(默认为【0.25,4】),则被标为正样本。随后与v4一样,允许一个GT匹配多个anchor,只要满足在相应的grid内部就行,这与v4是一样的,如果有不懂的可以查看v4的解读。
测试阶段
与之前版本一样。
总结
如理解存在纰漏,敬请指正,谢谢!