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好多了,不管是速度还是精度,看一张图的推理结果都很明显了

 

posted @ 2023-07-03 16:48  call-me-ZJ  阅读(359)  评论(0编辑  收藏  举报