Yolov8
论文:还没发布
ultralytics官方测试的精度,与v5,v6比较
从官方给的精度看v8比v6在相同型号的模型下,v8比v6精度更高高,参数更少,计算量更少,例如S型号
整体框架
其中bbox loss 分支的卷积
中的self.reg_max=16表示区间[0-16],l,r,t,b除以stride后一般会落到区间[0,k]的某个区间[i,i+1],网络预测的其实是落入这个区间的概率,最后用积分将这个区间的概率进行计算,得到期望,也就预测的y
可以回顾这篇博客,写的不错深入理解一下Generalized Focal Loss v1 & v2 - 知乎 (zhihu.com)
yolov8主要改进之处:
网络结构:
- 骨干网络和 Neck 部分可能参考了 YOLOv7 ELAN 设计思想,将 YOLOv5 的 C3 结构换成了梯度流更丰富的 C2f 结构,并对不同尺度模型调整了不同的通道数,属于对模型结构精心微调,不再是无脑一套参数应用所有模型,大幅提升了模型性能。不过这个 C2f 模块中存在 Split 等操作对特定硬件部署没有之前那么友好了
- Head 部分相比 YOLOv5 改动较大,换成了目前主流的解耦头结构,将分类和检测头分离,同时也从 Anchor-Based 换成了 Anchor-Free。检测头感觉跟v6一样,同样解耦,且只有类别和回归分支,obj分支去掉
训练策略:
- Loss 计算方面采用了 TaskAlignedAssigner 正样本分配策略,并引入了 Distribution Focal Loss
- 训练的数据增强部分和yolov5差不多,但引入了 YOLOX 中的最后 10 epoch 关闭 Mosiac 增强的操作,可以有效地提升精度
- YOLOv8 的训练策略和 YOLOv5 没有啥区别,最大区别就是模型的训练总 epoch 数从 300 提升到了 500,这也导致训练时间急剧增加,以yolov8-s为例,其训练策略汇总如下:
从上面可以看出,YOLOv8 主要参考了最近提出的诸如 YOLOX、YOLOv6、YOLOv7 和 PPYOLOE 等算法的相关设计,本身的创新点不多,偏向工程实践,主推的还是 ultralytics 这个框架本身。
复现细节和结果
1 total param num 11.143M, 计算量:14.292 GFLOPS 2 backbone: CSPDarknet 3 Neck: YOLOv8FAFPN 4 优化器:SGD,momentum=0.937,初始学习率:10e-3 5 损失函数=Lcls+Lreg,Lcls与Lobj(BCELoss),Lreg(CIoULoss + DFL) 6 batch=12 7 加载官方完整预训练权重 yolov8_coco.pth 8 epoch = 30 9 总训练时间: 1h 8m 2s 10 训练集:PASCALVOC-2012train+val(0.7)(8078) 11 测试集:PASCALVOC-2012train+val(0.3)(3462) 12 训练:GPU: 1 x V100 13 平均推理时间和FPS:8.4ms,119.7fps(RTX 3070ti)
推理速度结构显示:
模型参数和计算量
利用wandb记录训练过程:
平均精度以及mAP_50
总损失,类别损失,dFL损失,回归损失学习率记录曲线
注意:从精度和loss图看,模型在25轮后对训练集过拟合了,在验证集的精度下降,但训练集的loss还在下降
利用训练完的权重进行验证
效果展示
与yolov6对比,左v6,右v8
小结
感觉v8比v6好多了,不管是速度还是精度,看一张图的推理结果都很明显了