Yolov5-v6.1-s
yolov5作者没有出论文,只放了代码,就根据代码简单看下。
yolov5整体框架图
yolov5总共有很多版本,看Pytorch官方给的不同类型模型的测试结果
在本文使用yolov5的v6.1版本,640分辨率,s模型,也就是上图正序的第二个
YOLOv5针对不同大小(n
, s
, m
, l
, x
)的网络整体架构都是一样的,只不过会在每个子模块中采用不同的深度和宽度,下面借鉴一位b站up的画的图(对应L的模型)
相比于yolov4改进之处
Backbone:New CSP-Darknet53
yolov5将v4上面的卷积块移除了,同时将MIsh激活函数换成SILU激活函数
Neck:SPPF,New CSP-PAN(将CSP结构融入PAN结构中)
Head:用的还是YOLOv3的
数据增强:Mosaic、Copy paste、Random affine、MixUp、Augment HSV、Random horizontal flip
训练策略:
- Multi-scale training(0.5~1.5x),多尺度训练,假设设置输入图片的大小为640 × 640,训练时采用尺寸是在0.5 × 640 ∼ 1.5 × 640 之间随机取值,注意取值时取得都是32的整数倍(因为网络会最大下采样32倍)。
- AutoAnchor(For training custom data),训练自己数据集时可以根据自己数据集里的目标进行重新聚类生成Anchors模板。
- Warmup and Cosine LR scheduler,训练前先进行Warmup热身,然后在采用Cosine学习率下降策略。
- EMA(Exponential Moving Average),可以理解为给训练的参数加了一个动量,让它更新过程更加平滑。
- Mixed precision,混合精度训练,能够减少显存的占用并且加快训练速度,前提是GPU硬件支持。
- Evolve hyper-parameters,超参数优化,没有炼丹经验的人勿碰,保持默认就好。
复现结果和细节
1 total param num 7,073,569,计算量:12.1 GFLOPS 2 backbone: CSPDarknet-53
3 优化器:adam,momentum=0.937,初始学习率:1e-34 学习率更新:呈cos函数形式 5 损失函数=置信损失(CIOU)+分类损失+定位损失(CIOU Loss),其中置信和分类损失用的都是BCE Loss 6 batch=8 7 加载官方完整预训练权重 yolov5_s_v6.1.pth 8 epoch = 30 9 总训练时间: 2h31m9s 10 训练集:PASCALVOC-2012train(5717) 11 测试集:PASCALVOC-2012val(5823) 12 GPU: 1 x Tesla V100 13 平均推理时间和FPS:0.00994s,100fps(RTX 3070ti)
利用tensorboard记录
在当前环境终端输入
tensorboard --logdir=存放文件夹路径
训练loss,map0.5,map_0.5:0.95记录
从训练的图来看模型在22轮左右对训练集过拟合了,导致精度变低
利用wandb记录
本地画图记录
最高接近75%的map0.5
获取验证结果以及coco指标
加载训练完的权重,在测试集上对模型进行验证,这里测试集=训练中的验证集
平均精度以及各类别精度
检测结果
看来用S模型的效果还是不太好,如果用大一点的模型应该效果会好很多,船没检测出来,把置信值调低后才能检测出
confidence=0.5和0.3
热力图
通过热力图使我们能够直观地理解哪些区域对于目标检测最为敏感,重要