Yolov4.Pytorch 代码学习笔记

最近对yolov5进行了较为深入的理解,顺便将yolov4给啃一啃,之前只粗略读过论文,这边文章主要从代码进行学习,代码参照 pytorch版的yolov4, 虽然和DarkNet的会有出入,但学习起来更方便一些.

darknet 的yolov4共有四个版本,分别是yolov4x-mish, yolov4-csp, yolov4, yolov4-tiny。代码来源WongKinYiu/PyTorch_YOLOv4,此代码仓库参考于u版yolov5,除开网络部分,别的训练数据的制作、loss 计算、训练以及导出部署等和yolov5基本一致,都可以参照本人之前的关于使用yolov5的文章Yolo-v5从代码到服务部署实践. 同时本人也测试了Tianxiaomo/pytorch-YOLOv4版的yolov4,但是这个版本缺的东西比较多,且训练很慢,就放弃使用了。

网络结构

虽然网上有很多结构图了,自己学习更喜欢自己画一遍。DarkNet .cfg 形式,对于cfg 文件可以用 netron 可视化,但是太长了。

yolov4 的整体结构和之前画的yolov5整体结构一致,如下图:

主要由 backbone, FPN, PAN, 和 YOLO-head 构成。

目前仓库提供了9中配置模型:

  • YOLOv4: CSPDark+PAN+mish激活
  • YOLOv4pacsp: CSPDark+CSPPAN,无mish激活
  • YOLOv4pacsp-mish: + mish
  • YOLOv4pacsp-s: small version of YOLOv4pacsp
  • YOLOv4pacsp-s-mish: + mish
  • YOLOv4pacsp-x: large 版
  • YOLOv4pacsp-x-mish: + mish
  • YOLOv4paspp: 与 YOLOv4一样,除了激活没有mish
  • YOLOv4-tiny: 轻量版的 YOLOv4

使用注意事项

  • 代码默认使用cuda_mish, 安装太麻烦的话使用普通 Mish 激活替代即可,只是训练慢一点
  • 训练时如果开启验证,由于为了计算mAP, conf_thres 被设置为0.001,验证时打印的准确率基本会偏低
  • 此仓库代码和目前原yolov4论文还是有点出入,比如没有dropblock, 自对抗训练等,作者在逐步完善中

ref