【目标检测】YOLOv7算法实现(二):正样本匹配(SimOTA)与损失计算

  本系列文章记录本人硕士阶段YOLO系列目标检测算法自学及其代码实现的过程。其中算法具体实现借鉴于ultralytics YOLO源码Github,删减了源码中部分内容,满足个人科研需求。
  本篇文章在YOLOv5算法实现的基础上,进一步完成YOLOv7算法的实现。YOLOv7相比于YOLOv5,最主要的不同之处如下:

  • 模型结构:引进了更为高效的特征提取模块(ELAN)、下采样模块(MP),不同的空间池化层(SPPCSPC),重参数卷积(RepConv)
  • 正样本匹配:结合YOLOv5中和正样本匹配方法和YOLOX中的正样本筛选方法(SimOTA)

文章地址:
YOLOv7算法实现(一):模型搭建
YOLOv7算法实现(二):正样本匹配(SimOTA)与损失计算

0 引言

  YOLOv7中的正样本匹配在YOLOv5的正样本匹配基础上进一步通过SimOTA对正样本进行筛选,损失计算流程如图1所示。
在这里插入图片描述

图1 YOLOv7损失计算流程

1 正样本匹配

  YOLOv5的正样本匹配方法可见文章YOLOv5算法实现(四):损失计算。在YOLOv5正样本匹配方法中,在每一个feature_map上,根据目标中心点所在位置至多使用三个预测单元对目标进行匹配,在每一个预测单元中,根据宽高比至多使用三个Anchor对目标进行匹配,因此经过YOLOv5正样本匹配后,一个目标至多得到27个匹配样本。
  SimOTA正样本筛选流程如下:

  1. 计算实际目标nt与匹配样本nt_n的IoU损失:
    p a i r _ w i s e _ i o u _ l o s s = − log ⁡ ( i o u ) pair\_wise\_iou\_loss = - \log (iou) pair_wise_iou_loss=log(iou)
  2. 计算实际目标nt与匹配样本nt_n的类别交叉熵损失:
    p a i r _ w i s e _ c l s _ l o s s = − y log ⁡ ( σ ( y p r e d ) ) − ( 1 − y ) log ⁡ ( σ ( 1 − y p r e d ) ) pair\_wise\_cls\_loss = - y\log (\sigma ({y_{pred}})) - (1 - y)\log (\sigma (1 - {y_{pred}})) pair_wise_cls_loss=ylog(σ(ypred))(1y)log(σ(1ypred))
  3. 根据IoU损失总和确定每一个实际目标ntdynamic_k(每一个nt匹配的样本数量)
  4. 计算匹配样本总损失:
    p a i r _ w i s e _ l o s s = p a i r _ w i s e _ c l s _ l o s s + 3 p a i r _ w i s e _ i o u _ l o s s pair\_wise\_loss = pair\_wise\_cls\_loss + 3pair\_wise\_iou\_loss pair_wise_loss=pair_wise_cls_loss+3pair_wise_iou_loss
  5. 根据总损失和dynamic_k对匹配的正样本进行筛选
      假设某目标(类别为3)在某训练批次中得到了7个匹配结果,其SimOTA正样本筛选示例如图2所示。

在这里插入图片描述

图2 SimOTA计算示例

2 损失计算

  YOLOv7中损失计算方式与YOLOv5一致,包含以下三个部分:

  • 位置损失(仅计算正样本)
    I o u L o s s = 1 − C I o U IouLoss = 1 - CIoU IouLoss=1CIoU

在这里插入图片描述

图3 常见IoU计算方法
  • 类别损失(仅计算正样本):
    C l s L o s s = ∑ i = 0 n f { 1 n ∑ j = 0 n [ 1 n c ∑ k = 0 k = n c ( y log ⁡ ( σ ( p ) ) + ( 1 − y ) log ⁡ ( 1 − σ ( p ) ) ) ] } ClsLoss = \sum\limits_{i = 0}^{nf} {\{ {1 \over n}\sum\limits_{j = 0}^n {[{1 \over {nc}}\sum\limits_{k = 0}^{k = nc} {({y}} } } \log (\sigma ({p})) + (1 - {y})\log (1 - \sigma ({p})))]\} ClsLoss=i=0nf{ n1j=0n[nc1k=0k=nc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初初初夏_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值