yolov6
论文:《A Single-Stage Object Detection Framework for Industrial Applications》
官方实现的各个配置
mmyolo实现的配置,精度比官方略低,但速度比官方更快,模型参数更少,计算量也较少
整体框架
下图是mmyolo给出的yolov6-s配置图,在本文也主要复现这个配置
yolov6主要的改进之处:
1.设计了更高效的backbone和Neck:基于 RepVGG style 设计了可重参数化、更高效的骨干网络 EfficientRep Backbone 和 Rep-PAN Neck。在v7中只是在特定部分引入RepConv,不想v6结合到了backbone以及neck
2.相比于 YOLOX 的 Decoupled Head,进一步优化设计了简洁有效的 Efficient Decoupled Head,在维持精度的同时,降低了一般解耦头带来的额外延时开销,在v7中用的是耦合头
3.在训练策略上,采用 Anchor-free 的策略,同时辅以 SimOTA 标签分配策略以及 SIoU 边界框回归损失来进一步提高检测精度。
- 标签匹配策略:0 <= epoch < 4,使用
BatchATSSAssigner,epoch >= 4,使用
BatchTaskAlignedAssigner
- v7是anchor-base网络,且也采用SimOTA标签分配策略,不过v7用的是CIOU边界框回归损失
4.yolov6的loss设计不同以往,只有类别和回归损失,去掉了置信损失
复现结果和细节
1 total param num 17.196M, 计算量:21.895 GFLOPS 2 backbone: EfficientRep Backbone 3 Neck: Rep-PAN Neck 4 优化器:SGD,momentum=0.937,初始学习率:2.5e-3 5 损失函数=Lcls+Lreg,Lcls与Lobj(BCELoss),Lreg(GIoULoss) 6 batch=8 7 加载官方完整预训练权重 yolov6_coco.pth 8 epoch = 30 9 总训练时间: 1h 30m 45s 10 训练集:PASCALVOC-2012train+val(0.7)(8078) 11 测试集:PASCALVOC-2012train+val(0.3)(3462) 12 GPU: 1 x RTX 3070ti 13 平均推理时间和FPS:26.3ms,38.1fps(RTX 3070ti)
模型的 Flops 和 Parameters
与最上面给的精度表对应,参数量:17.2M差不多,计算量:44.2G,不知道为什么自己打印出来的少很多
利用wandb记录训练过程
平均精度以及mAP_50
总损失,回归损失,类别损失,学习率记录曲线
效果展示
船识别成了飞机,虽然很多小目标的人都检测出来了,应该是轮数太少的原因,如果用50轮的感觉会好很多