电脑基础 · 2023年4月19日

【YOLOv7训练】——预训练重使用

文章目录

  • 更新提醒:2023/04/01更新
  • YOLOv7简介
  • 预训练权重(用不用?用哪个?)
  • 总结

更新提醒:2023/04/01更新

YOLOv7简介

YOLOv7论文链接:YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors
官方github代码链接:https://github.com/WongKinYiu/yolov7

YOLOv7于2022.07发布,已被CVPR2023接收!

此贴记录自己使用YOLOv7训练自己数据集时权重使用问题

最后个人建议,能不用YOLOv7就别用!!!别用!!!别用!!!
训练真的太慢了!!!训练真的太慢了!!!训练真的太慢了!!!(OTA的锅,关了OTA会快好几倍,但性能会下降)
太吃显存了!!!太吃显存了!!!太吃显存了!!!
收敛曲线很魔鬼!!!收敛曲线很魔鬼!!!收敛曲线很魔鬼!!!
重要的事情说三遍!!!重要的事情说三遍!!!重要的事情说三遍!!!

我知道说三遍,你还是不会听的!!!

那就开始正文了,不罗嗦了!

预训练权重(用不用?用哪个?)

一般训练,我都会优先使用官方提供的权重进行训练,而且v7和v5代码架构相同,同样可以自动判断继承权重。(具体什么意思呢?简单概括就是,加载预训练权重时,会先对你真正使用主干网络跟预训练权重包含的主干网络参数进行比较,观察有多少层是相同的,然后就只会加载相同的层数训练。所以,后面即使更改了主干结构,依旧可以使用预训练权重。PS:如果存在以为,自己可以测试,亦或者不用预训练权重。

预训练权重的选择
yolov7官方提供了很多种权重,而且有的结构提供了多种结构?比如:yolov7.ptyolov7_training.pt

【YOLOv7训练】——预训练重使用
这两个权重到底用哪个?什么区别?
使用时,会发现两个权重都可以训练,而且都有预训练的效果,结果好像差不多,那设置两个权重的意义是?
yolov7_traing.pt结构是未重参数化的结构;而yolov7.pt是合并分支后的网络结构,也就是重参数化后的模型结构,为什么也可以训练?
yolov7_traing.pt训练的时候用的是training中的yolov7.yaml,yolov7.pt训练的时候用的是deploy中的yolov7.yaml

作者在代码里的解释:
【YOLOv7训练】——预训练重使用

总结

说了一堆,总结就是:
1、其实,不用权重一点关系没有!亲测,我训练时,用权重和不用权重数据一模一样(真奇了怪了,可能我都是300epoch训练,后面自己就收敛了,预训练权重也就是收敛快些,也不会提点吧好像)
2、用了权重,可能会掉点,还不如不用(这是可能的,原因我也不知道)
3、如果非要用,那训练时就用yolov7_training.pt作预训练权重(其实我建议要是时间够,两个都试试,哪个好用哪个呗。没时间的话,就一直挑一个用,也是行的,控制变量法)

本篇博文的感觉就是,说了等于没说!看官莫怪!