yolo v5 损失函数分析
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αboxi=0∑S2j=0∑BIkijobjLCIoU+αobji=0∑S2j=0∑BIkijobjLobj+αclsi=0∑S2j=0∑BIkijobjLcls⎦⎤
其中,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 损失函数分析相关推荐
- 【支线】输电杆塔识别-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 ...
- 【目标检测】YOLO v5 吸烟行为识别检测
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 YOLO v5 吸烟行为目标检测模型:计算机配置.制作数据集.训练.结果分析和使用 前言 相关连接(look评论) 一.计算机配置 p ...
- 【超级视客营】基于超算平台的MMYOLO实践过程记录(自定义数据集实现YOLO v5)
上一篇博文我们搭建好了超算平台对MMYOLO编译环境,并通过单张图片加载训练好的模型进行推理.本篇文章参考MMYOLO官方发布的自定义数据集 标注+训练+测试+部署 全流程文档,进一步在超算平台中实现 ...
- Ubutntu下使用realsense d435i(三):使用yolo v5测量目标物中心点三维坐标
01 参考 本文下述使用参考的的工程均来自于下面的两个github yolo v5参考的代码:https://github.com/ultralytics/yolov5 本文参考的代码(仅获得深度): ...
- realsense D455深度相机+YOLO V5结合实现目标检测(二)
realsense D455深度相机+YOLO V5结合实现目标检测(二) 1.代码来源 2.环境配置 3.代码分析: 3.1 主要展示在将detect.py转换为realsensedetect.py ...
- 如何使用 Yolo v5 对象检测算法进行自定义对象检测
介绍 在本文中,将向你解释如何使用 Yolo v5 算法检测和分类60+个不同类型的道路交通标志. 我们将从非常基础的开始,涵盖每个步骤,如准备数据集.训练和测试等.在本文中,我们将使用 Window ...
- YOLO v5算法详解
1.YOLO v5网络结构 2.输入端 3.Backone网络 4.Neck网络 5.Head网络 1.YOLO v5网络结构 图 1 YOLO v5网络结构图 由上图可知,YOLO v5主要由输入端 ...
- 【深度学习】用 YOLO v5+DeepSORT,打造实时多目标跟踪模型
内容概要:目标跟踪作为一个非常有前景的研究方向,常常因为场景复杂导致目标跟丢的情况发生.本文按照跟踪目标数量的差异,分别介绍了单目标跟踪及多目标跟踪. 关键词:目标跟踪 计算机视觉 教程 目 ...
- YOLO v5训练时报fitness错误,求解
在跑yolo v5训练时出现报错 Traceback (most recent call last): File "D:/3.7/yolov5-master/train.py" ...
最新文章
- android系统应用开发_利用ADB工具免root停用Android系统应用
- BIM机器人来袭、你害怕了吗
- 基于 abp vNext 和 .NET Core 开发博客项目 - 定时任务最佳实战(三)
- checkStyle结果分析
- Linux解决find /run/user/1000/gvfs
- C4C和Marketing Cloud的lead以及activity的replication
- 国产知名老牌 PDF 工具正式开源
- 实例40:python
- linux配置文件为yum,yum的配置文件说明
- warning: initialization from incompatible pointer type error, forbidden解决
- GIS和开源见解(摘录)
- 概率论与数理统计---陈希孺---书籍链接下载
- aix系统vi修改命令_AIX的VI命令
- DES、3DES、AES以及RSA加密介绍
- tcp/ip协议栈总结
- 8700k能装服务器系统吗6,i7 8700k能装win7吗?搭配b365主板装win7操作步骤
- php操作redis命令
- Java读取Yaml文件
- 客户要求降价,我如何通过涨价拿下订单
- 微信公众平台测试帐号申请最新地址