yolo v5 损失函数分析

    与 yolo v1 类似,v5 损失函数由 3 个部分组成,分别为 bbox 回归损失目标置信度损失类别损失。网络每个将特征图分为若干个 cell,每个 cell 输出一个 [tx,ty,tw,th,po,c1,c2,...][t_x, t_y, t_w, t_h, p_o, c_1, c_2, ...][tx​,ty​,tw​,th​,po​,c1​,c2​,...] 的向量,其中 tx,tyt_x,t_ytx​,ty​ 用于计算预测框和对应 anchor box (也就是所在 cell) 两者中心的偏移量,tw,tht_w,t_htw​,th​ 用于计算预测框的宽高,pop_opo​ 是该 cell (预测框) 含有目标的概率,c1,c2,...c_1, c_2, ...c1​,c2​,... 为对应类别的预测值。

    三个部分的损失均是通过匹配到的正样本对来计算,每一个输出特征图相互独立,直接相加得到最终每一部分的损失值。先给出整体的计算公式:
Lv5(tp,tgt)=∑k=0K[αkbalanceαbox∑i=0S2∑j=0BIkijobjLCIoU+αobj∑i=0S2∑j=0BIkijobjLobj+αcls∑i=0S2∑j=0BIkijobjLcls]\mathcal{L}_{\text{v}5}\left( \boldsymbol{t}_{\text{p}},\boldsymbol{t}_{\text{gt}} \right) =\sum_{k=0}^K{\left[ \alpha _{k}^{\text{balance}}\alpha _{\text{box}}\sum_{i=0}^{S^2}{\sum_{j=0}^B{\mathbb{I}_{kij}^{\text{obj}}\mathcal{L}_{\text{CIoU}}}}+\alpha _{\text{obj}}\sum_{i=0}^{S^2}{\sum_{j=0}^B{\mathbb{I}_{kij}^{\text{obj}}\mathcal{L}_{\text{obj}}}}+\alpha _{\text{cls}}\sum_{i=0}^{S^2}{\sum_{j=0}^B{\mathbb{I}_{kij}^{\text{obj}}\mathcal{L}_{\text{cls}}}} \right]} Lv5​(tp​,tgt​)=k=0∑K​⎣⎡​αkbalance​αbox​i=0∑S2​j=0∑B​Ikijobj​LCIoU​+αobj​i=0∑S2​j=0∑B​Ikijobj​Lobj​+αcls​i=0∑S2​j=0∑B​Ikijobj​Lcls​⎦⎤​
其中,K,S2,BK,S^2,BK,S2,B 分别为输出特征图、cell 和 每个 cell 上 anchor 的数量;α⋆\alpha_\starα⋆​ 为对应项的权重,在 hyp.scratch-high.yaml 中默认取值为 αbox=0.05,αcls=0.3,αobj=0.7\alpha_\text{box}=0.05,\alpha_\text{cls}=0.3,\alpha_\text{obj}=0.7αbox​=0.05,αcls​=0.3,αobj​=0.7; Ikijobj\mathbb{I}_{kij}^{\text{obj}}Ikijobj​ 表示第 kkk 个输出特征图,第 iii 个 cell, 第 jjj 个 anchor box 是否是正样本,如果是正样本则为 1,反之为 0;tp,tp\boldsymbol{t}_{\text{p}},\boldsymbol{t}_{\text{p}}tp​,tp​ 是预测向量和 ground-truth 向量;αkbalance\alpha _{k}^{\text{balance}}αkbalance​ 用于平衡每个尺度的输出特征图的权重,默认取值为 [4.0,1.0,0.4][4.0, 1.0, 0.4][4.0,1.0,0.4], 依次对应 80×80,40×40,20×2080\times80,40\times40,20\times2080×80,40×40,20×20 的输出特征图。

1. bbox 回归损失

    v5 使用的是 CIoU Loss。
    yolo v5 中正样本匹配策略和 bbox 回归如下图所示。

具体 CIoU Loss 分析可以参考 基于IOU的损失函数合集。

iou_term = bbox_iou(pbox.T, tbox[i], x1y1x2y2=False, CIoU=True)
lbox += (1.0 - iou_term).mean()

2. 目标置信度损失

    目标置信度损失由正样本匹配得到的样本对计算,一是预测框中的目标置信度分数 pop_opo​;二是预测框和与之对应的目标框的 iou 值,其作为 ground-truth。两者计算二进制交叉熵得到最终的目标置信度损失。公式如下:
Lobj(po,piou)=BCEobjsig(po,piou;wobj)\mathcal{L}_{\text{obj}}\left( p_o,p_{\text{iou}} \right) =\text{BCE}_{\text{obj}}^\text{sig}\left( p_o,p_{\text{iou}};w_{\text{obj}} \right) Lobj​(po​,piou​)=BCEobjsig​(po​,piou​;wobj​)

BCEobj = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h['obj_pw']], device=device))
obji = self.BCEobj(pi[..., 4], tobj)

3. 类别损失

    类别损失与置信度损失类似,通过预测框的类别分数和目标框类别的 one-hot 表现来计算类别损失,公式如下:
Lcls(cp,cgt)=BCEclssig(cp,cgt;wcls)\mathcal{L}_{\text{cls}}\left( \boldsymbol{c}_{\text{p}},\boldsymbol{c}_{\text{gt}} \right) =\text{BCE}_{\text{cls}}^{\text{sig}}\left( \boldsymbol{c}_{\text{p}},\boldsymbol{c}_{\text{gt}};w_{\text{cls}} \right) Lcls​(cp​,cgt​)=BCEclssig​(cp​,cgt​;wcls​)

    这里目标置信度损失和类别损失使用的是带 sigmoid 的二进制交叉熵函数 BCEWithLogitsLoss。如果要使用 Focal Loss 在其基础上改动即可。

BCEcls = nn.BCEWithLogitsLoss(pos_weight=torch.tensor([h['cls_pw']], device=device))
lcls += self.BCEcls(pi[..., 5:], t_cls)

    源程序分析下次再说。

yolo v5 损失函数分析相关推荐

  1. 【支线】输电杆塔识别-YOLO v5在Aidlux的部署

    目录 0.前言 1.模型训练 1.1 任务描述 1.2 输电杆塔数据集采集 1.3 输电杆塔数据集标注 1.4 数据增强 1.5 折腾 1.6 训练 1.7 测试 2.NX部署 2.1 软硬件 2.2 ...

  2. 【目标检测】YOLO v5 吸烟行为识别检测

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 YOLO v5 吸烟行为目标检测模型:计算机配置.制作数据集.训练.结果分析和使用 前言 相关连接(look评论) 一.计算机配置 p ...

  3. 【超级视客营】基于超算平台的MMYOLO实践过程记录(自定义数据集实现YOLO v5)

    上一篇博文我们搭建好了超算平台对MMYOLO编译环境,并通过单张图片加载训练好的模型进行推理.本篇文章参考MMYOLO官方发布的自定义数据集 标注+训练+测试+部署 全流程文档,进一步在超算平台中实现 ...

  4. Ubutntu下使用realsense d435i(三):使用yolo v5测量目标物中心点三维坐标

    01 参考 本文下述使用参考的的工程均来自于下面的两个github yolo v5参考的代码:https://github.com/ultralytics/yolov5 本文参考的代码(仅获得深度): ...

  5. realsense D455深度相机+YOLO V5结合实现目标检测(二)

    realsense D455深度相机+YOLO V5结合实现目标检测(二) 1.代码来源 2.环境配置 3.代码分析: 3.1 主要展示在将detect.py转换为realsensedetect.py ...

  6. 如何使用 Yolo v5 对象检测算法进行自定义对象检测

    介绍 在本文中,将向你解释如何使用 Yolo v5 算法检测和分类60+个不同类型的道路交通标志. 我们将从非常基础的开始,涵盖每个步骤,如准备数据集.训练和测试等.在本文中,我们将使用 Window ...

  7. YOLO v5算法详解

    1.YOLO v5网络结构 2.输入端 3.Backone网络 4.Neck网络 5.Head网络 1.YOLO v5网络结构 图 1 YOLO v5网络结构图 由上图可知,YOLO v5主要由输入端 ...

  8. 【深度学习】用 YOLO v5+DeepSORT,打造实时多目标跟踪模型

    内容概要:目标跟踪作为一个非常有前景的研究方向,常常因为场景复杂导致目标跟丢的情况发生.本文按照跟踪目标数量的差异,分别介绍了单目标跟踪及多目标跟踪. 关键词:目标跟踪   计算机视觉    教程 目 ...

  9. YOLO v5训练时报fitness错误,求解

    在跑yolo v5训练时出现报错 Traceback (most recent call last):   File "D:/3.7/yolov5-master/train.py" ...

最新文章

  1. android系统应用开发_利用ADB工具免root停用Android系统应用
  2. BIM机器人来袭、你害怕了吗
  3. 基于 abp vNext 和 .NET Core 开发博客项目 - 定时任务最佳实战(三)
  4. checkStyle结果分析
  5. Linux解决find /run/user/1000/gvfs
  6. C4C和Marketing Cloud的lead以及activity的replication
  7. 国产知名老牌 PDF 工具正式开源
  8. 实例40:python
  9. linux配置文件为yum,yum的配置文件说明
  10. warning: initialization from incompatible pointer type error, forbidden解决
  11. GIS和开源见解(摘录)
  12. 概率论与数理统计---陈希孺---书籍链接下载
  13. aix系统vi修改命令_AIX的VI命令
  14. DES、3DES、AES以及RSA加密介绍
  15. tcp/ip协议栈总结
  16. 8700k能装服务器系统吗6,i7 8700k能装win7吗?搭配b365主板装win7操作步骤
  17. php操作redis命令
  18. Java读取Yaml文件
  19. 客户要求降价,我如何通过涨价拿下订单
  20. 微信公众平台测试帐号申请最新地址

热门文章

  1. 虚拟机封装为母盘,利用母盘批量创建虚拟机
  2. 什么是IOC 和 AOP?
  3. HTML中的对联代码,纯CSS(非JS)代码实现固定对联的方法 超短超实用!
  4. (转)Mysql哪些字段适合建立索引
  5. JQ中$.each()方法的使用
  6. 从视频中获取发丝都能看见的人体步态轮廓图
  7. windows10系统中如何用telnet命令Ping端口
  8. Java——判断输入时间数据是否有效
  9. visio2013下载有32位和64位
  10. 拔刀剑服务器r87修复版,拔刀剑模组教程5:修复以及刀之耀魂