YOLOv9理性解读 | 网络结构&损失函数&耗时评估

在这里插入图片描述

由台北中研院和台北科技大学等机构的研究团队推出的新的目标检测算法,一作Wang Chien-Yao也是Yolov4、Yolov7的作者之一,之前在Alexey Bochkvoskiy(Yolov4的第一作者)的团队中。

1 论文核心内容

YOLOv9是在YOLOv7的基础上进行的改进,指出现有方法存在如下的2个问题

  • 现有方法都是关注如何设计一个更好的损失函数,而一个好的网络结构可以获取更多的信息以提升预测效果;
  • 现有方案忽略了在一层一层的特征提取中会损失大量信息的问题;

针对以上两个问题,论文的解决方案(创新点)主要有以下2点:

  • 提出了一个轻量级的网络结构:Generalized Efficient Layer Aggregation Netwwork(GELAN)
  • 提出PGI(programmable gradient information):解决网络随着深度的增加,损失大量信息的问题。

1.1 GELAN

GELAN = RepCSPNet + ELAN

RepConv[1]^:通过结构参数化思想,让训练网络的多路结构在推理时转换为单路结构,以节省内存并提高前向处理速度。
在这里插入图片描述
source:Ding X et al.

将ELAN中的卷积组,替换成带有RepConv的CSPNet,相当于增加网络的宽度。这种增加网络宽度的方式看似可以增加梯度流,但是损失了卷积的连贯性,这对于板端部署来说是不友好的,会增加耗时。
在这里插入图片描述

1.2 PGI(programmable gradient information)

在这里插入图片描述
PGI:一种附属的监督框架(auxiliary supervision framework),用于在训练时提供更多的、更有效的监督信息,推理时该部分会被忽略。包含3个部分:

  • 主分支:main branch,推理过程只用主分支,因此不会增加额外的计算;
  • 附属可逆分支:auxiliary reversible branch,解决网络深度带来的信息丢失问题;
  • 多级附属信息:multi-level auxiliary information,解决深度监督带来的错误累积问题,尤其是这种多预测分支的网络结构;

1.2.1 Auxiliary Reversible Branch

其实就是YOLOv7[2]里面辅助头的变种,YOLOv7中复用原网络提取的特征图:
在这里插入图片描述
source:Wang C Y et al.

YOLOv9直接从输入开始,搭建了跟主干网络类似的网络结构,使用辅助分支自己提取的特征来预测目标,从而计算辅助loss。在训练时相当于增加了一倍的权重,因此训练时间也会随着增加。
在这里插入图片描述

1.2.2 Multi-level Auxiliary Information

YOLOv7在计算辅助头时,使用的特征图是独立的,而YOLOv9是融合了多种特征图之后再计算辅助头的输出,详细见下一章的网络结构图。

2 网络结构详解

在这里插入图片描述

  • GELAN就是中的RepNCSPELAN,将原始ELAN中的卷积组换成带有RepConv的CSPNet block;
  • CBFuse就是文中提到的Multi-level Auxiliary Information,将不同的层的特征图通过上采样到同一尺寸后再相加,再输出预测结果;
  • 网络的输出与YOLOv8[3]类似的解耦头,有类别和box分支,其中box不是直接进行边界框回归,而是将回归任务转化成分类任务。

解耦头解释:
在这里插入图片描述
source:Openmmlab

BBOX分支中,4表示anchor点到上下左右4个边界的距离,每个距离对应一个长度为reg_max的向量,reg_max一般设置为16。在网络预测完成后,将向量进行softmax,得到权重,这些权重再与[0,1,2,…, 15]进行加权,得到anchor点到4个边界的距离,从而得到预测框的信息。
在这里插入图片描述
source:Zhi Tian et al.

3 正负样本匹配策略与损失函数

3.1 正负样本匹配策略

样本匹配依旧使用的是TaskAlign样本匹配。和YOLOv8、YOLOv6等算法保持一致;TaskAlignedAssigner的匹配策略就是:根据分类与回归的分数加权的分数去选择正样本。
t = s a ∗ u b t = s^{a}*u^{b} t=saub
针对每一个gt,其中s是每个anchor点对应的gt类别的分类置信度,u是每个anchor点对应预测的目标框与gt的IoU,a,b表示外部配置的指数,两者相乘就可以衡量对齐程度alignment metrics。再直接基于对齐程度选取topk作为正样本。

3.2 损失函数

  • 分类损失:BCE Loss
  • 回归损失:DFL Loss + CIoU Loss

4 耗时评估与初步使用建议

4.1 AX650耗时

作者:圈圈虫

链接:https://www.zhihu.com/question/645376390/answer/3406848125

YOLOv9-c在ax650单帧平均耗时26ms。 YOLOv9-C是第三大的模型,稍微小一点的模型M,S相较于v8并没有显著的优势。
在这里插入图片描述

4.2 其他评价

作者:JerryFxckingWong

链接:https://www.zhihu.com/question/645376390/answer/3409418697

bilibili上一位up在vis drone做的实验结果:

在这里插入图片描述

  • 训练时间翻倍,论文中提到的监督方式基本上多了一倍的网络结构
  • 同规模下推理时间增加(由于split操作的引入)

用split的方式看似丰富了所谓的梯度流,减少了参数量,但是大大增加了推理的时间,尤其对于端设备来说,这会导致推理的各种不连续性。

4.3 总体评价

  • 相较于之前的YOLOv8,YOLOv9指标并没有显著的提升;
  • v9以牺牲耗时为代价,换来部分指标提升,整体网络结果对于板端部署并不友好,耗时可能会相较于项目中使用的模型会偏高;
  • 在耗时允许范围内,使用YOLOv9,相同量级参数下,指标可能会好一些,需要在实际业务上测试。

5 参考资料

[1] Ding X, Zhang X, Ma N, et al. Repvgg: Making vgg-style convnets great again[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2021: 13733-13742.

[2] Wang C Y, Bochkovskiy A, Liao H Y M. YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2023: 7464-7475.

[3] YOLOv8:https://github.com/ultralytics/ultralytics/tree/main

yolov8的损失函数主要由两部分组成:定位损失(Loss)和类别损失(Class Loss)。引用中提到,类别损失是通过计算网格向量的后20个数据之间的最小平方误差来构建的。这部分损失函数主要用于确定目标物体所属的类别。而定位损失则是通过计算预测框和真实框之间的差异来度量目标定位的准确性。 具体来说,定位损失是通过计算预测框与真实框之间的坐标差值的平方和来计算的。这样做可以衡量出预测框与真实框之间的距离,并用于评估目标物体的定位准确性。而类别损失则是通过计算预测框中每个类别的概率分布与真实标签之间的误差来计算的。这样做可以衡量出预测框中每个类别的准确性,并用于确定目标物体所属的类别。 综合来看,yolov8的损失函数的目标是最小化定位损失和类别损失,以提高目标检测的准确性。通过不断迭代优化损失函数,模型可以学习到更好的特征表示和目标定位能力,从而提高目标检测的性能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [基于行人检测的YOLOv8算法+全套代码+详细解析文档](https://download.csdn.net/download/weixin_40723264/88011324)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [YOLOv1损失函数代码详解](https://blog.csdn.net/qq_53029963/article/details/121481178)[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^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值