当前位置:   article > 正文

〔Part1〕YOLOv5:原理+源码分析(配置文件、网络模块、损失函数、跨网格匹配策略)_yolov5网络模块

yolov5网络模块

1. 前置知识

1.1 YOLO 算法的基本思想

首先通过特征提取网络对输入图像提取特征,得到一定大小的特征图,比如 13x13(相当于416x416 图片大小),然后将输入图像分成 13x13 个 grid cells:

  • YOLOv3/v4:如果 GT 中某个目标的中心坐标落在哪个 grid cell 中,那么就由该 grid cell 来预测该目标。每个 grid cell 都会预测 3 个不同尺度的边界框。
  • YOLOv5:不同于 YOLOv3/v4,其 GT 可以跨层预测,即有些 bbox(anchors)在多个预测层都算正样本,匹配数的正样本范围可以是 3-9 个。

预测得到的输出特征图有两个维度是提取到的特征的维度,比如 13x13,还有一个维度(深度)是 Bx(5+C),其中:

  • B 表示每个 grid cell 预测的边界框的数量(YOLOv3/v4中是 3 个)
  • C 表示边界框的类别数(没有背景类,所以对于 VOC 数据集是 20)
  • 5 表示 4 个坐标信息和一个目标性得分(objectness score)

1.2 损失函数

  1. Classification Loss
    • 用于衡量模型对目标的分类准确性。
    • 计算方式通常使用交叉熵损失函数,该函数衡量模型的分类输出与实际类别之间的差异。
    • 对于 YOLOv5,每个目标都有一个对应的类别,分类损失量化了模型对每个目标类别的分类准确性。
  2. Localization Loss:定位损失(预测边界框与 GT 之间的误差)
    • 用于衡量模型对目标位置的预测准确性。
    • YOLOv5 中采用的是均方差(Mean Squared Error,MSE)损失函数,衡量模型对目标边界框坐标的回归预测与实际边界框之间的差异。
    • 定位损失关注模型对目标位置的精确度,希望模型能够准确地定位目标的边界框。
  3. Confidence Loss:置信度损失(框的目标性 <=> Objectness of the box)
    • 用于衡量模型对目标存在与否的预测准确性。
    • YOLOv5 中采用的是二元交叉熵损失函数,该函数衡量模型对目标存在概率的预测与实际目标存在的二元标签之间的差异。
    • 置信度损失考虑了模型对每个边界框的目标置信度以及是否包含目标的预测。该损失鼓励模型提高对包含目标的边界框的预测概率,同时减小对不包含目标的边界框的预测概率。

总的损失函数:

L o s s = α × C l a s s i f i c a t i o n L o s s + β × L o c a l i z a t i o n L o s s + γ × C o n f i d e n c e L o s s \rm Loss = \alpha \times Classification Loss + \beta \times Localization Loss + \gamma \times Confidence Loss Loss=α×ClassificationLoss+β×LocalizationLoss+γ×ConfidenceLoss

1.3 PyTorch2ONNX

Netron 对 .pt 格式的兼容性不好,直接打卡无法显示整个网络。因此我们可以使用 YOLOv5 中的 models/export.py 脚本将 .pt 权重转换为 .onnx 格式,再使用 Netron 打开就可以完整地查看 YOLOv5 的整体架构了。

python export.py \
    --weights weights/yolov5s.pt \
    --imgsz 640 \
    --batch-size 1 \
    --device cpu \
    --simplify \
    --include onnx
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/371452
推荐阅读
相关标签