yolov8的整体结构如上,分为三部分,第一部分是提取图像细节信息的骨干网络backbone,涉及到模型的不同大小,里面模块的设置也会有相应改变,例如改变卷积的层数,改变特征拼接的个数,然后就到下一层neck,融合不同尺度下的信息,提高模型的多尺度检测能力,最后到head,将三个不同尺度的特征解耦
分别对预测框坐标和预测类别进行解耦,首先对于预测框坐标来说,c=4*reg_max,也就是8400*64,reg_max是默认长度为16的向量,而后需要进行积分求和,转成8400*4(以640大小输入为例:80*80+40*40+20*20个预测框),转换后的单个向量的值的范围在[0,15]之中,表示的是以该预测框为中心,上下左右四个方向与中心点的距离,损失函数用的是回归损失
对于预测框类别,得到8400*80(假设有80个类别),表示每个预测框对每种类别的预测概率
但若要计算损失,还需要确定正负样本,因为图像中大部分其实是没有我们事先标注好的检测对象的,也就是没有object,对于它们来说,去计算预测框损失是没用的,对于负样本来说,应该保证的是预测框的80个类别概率都应该非常非常低,甚至是没有,这才是好的结果,所以对于负样本,有他适合的损失函数,也就是纯粹的分类损失,因为负样本没有必要去算预测框坐标损失。而正样本呢,我们则采用常规的Bce计算分类损失。
那么怎么确定正负样本呢,这就需要使用tal,根据分类与回归的分数加权的分数选择正样本。
s
是标注类别对应的预测分值,u
是预测框和 gt 框的 iou,两者相乘就可以衡量对齐程度
训练完成后,拿去预测,会出现很多的预测框,因为一个object可能在多个预测框里都出现了,这时候就需要找到最好的那个预测框,把其他的都丢掉,就需要使用nms,计算CIou