YOLOv10核心改进点解读
原文:https://arxiv.org/pdf/2405.14458
源码:https://github.com/THU-MIG/yolov10
先上图
Abstract
主要贡献点:
- dual assignments for NMS-free
- the holistic efficiency-accuracy driven model design strategy
Methodology
Consistent Dual Assignments for NMS-free Training
yolo一簇通常利用TAL来为每个实例分配多个正样本,但也因此需要额外的后处理来处理冗余的检测结果
Task Alignment Learning(TAL),感觉就是所谓one-stage的概念,使用一组锚点去做定位和分类
TOOD: Task-aligned One-stage Object Detection
Dual label assignments
二重标签分配
yolo进化到v9,依然还是没有做完全的end-to-end,依然保留了NMS操作的原因之一就是one-stage本身就存在正负样本不平衡的问题。
简单来说v10采用了两组检测头,在原有的一组one-to-many的基础上,增加了一组one-to-one的检测头,并使用这组one-to-one进行标签分配。在推理的时候,只保留one-to-one的头从而避免了NMS,采用top-k 在更短的训练时间消耗下,实现了和匈牙利匹配相同的性能。
Consistent matching metric
m ( α , β ) = s ⋅ p α ⋅ I o U ( b ^ , b ) β m(\alpha ,\beta )=s\cdot p^{\alpha} \cdot IoU(\hat{b},b)^{\beta } m(α,β)=s⋅pα⋅IoU(b^,b)β
计算cost时综合考虑score和iou,结合分类和定位两个分支的信息(好像v8已经在用了?:传送门)作者指出,推理时只使用one-to-one的检测头,所以训练过程中是尽可能让one-to-one向one-to-many检测头的方向优化,因此对两个检测头的监督差异进行分析。作者指出,两个检测头输出的score和box的位置是一致的,差异点在于不同的分类目标。简而言之,one-to-one代表了one-to-many中最优的结果(如听一席话)。
Holistic Efficiency-Accuracy Driven Model Design
整体性效率-精度驱动的模型设计
虽然YOLO系列已经做的很好了,但是还是有冗余和提升的空间
Efficiency driven model design.
更轻量化的分类头
YOLO系列的分类头和回归头共享特征权重,作者指出分类头参数更多但对结果的影响反而更小,因此使用深度可分离卷积进行轻量化。
特征空间解耦下采样
常规的下采样通常依然是使用stride为2的卷积操作,使用了深度可分离卷积,先进行pointwise convolution实现特征升维,再进行depthwise convolution实现尺寸下采样。
新的block设计 – Rank-guided block
YOLO系列通常全局范围内采用同一个bottleneck block,作者利用intrinsic rank计算每一个stage的参数冗余程度(计算每一个stage中最后一个block中最后一个卷积的数值秩,即大于阈值的奇异值的数量,阈值默认为最大奇异值的1/2),通过分析后发现,全局相同的block还存在改进的空间……
因此作者提出了由秩适应的block,包括由深度可分离卷积组成的compact inverted block(CIB),以及由秩引导的block分配策略,即自上而下逐层进行无损替换(有损就不替换……)
Efficiency driven model design
大尺寸卷积核
在网络深层阶段的depthwise convolution中使用7x7的卷积核,同时使用一个3x3卷积核的depthwise convolution作为辅助训练,并在推理时进行结构重参数化。
部分自注意力机制
只将特征的一部分输入到self-attention中,且只在深层特征中进行使用,再使用1x1卷积+BN进行融合处理。
Experiments
使用YOLOv8作为baseline模型,实验中均取得了不错的效果,消融实验看一下,总之就是指标都不错。
总结
感觉确实是在挤牙膏了,但是有针对性的优化并结合量化的分析结果,还是值得一篇论文的。