YOLOv3损失函数个人见解

博主分享了自己对YOLOv3损失函数的见解,包括边界框使用均方误差,置信度和类别应用交叉熵,并解析了源码中关于损失函数的部分,指出关键变量delta在反向传播中的作用。
摘要由CSDN通过智能技术生成

YOLOv3损失函数个人见解

网络上对YOLOv3的讲解各有不同,还有用YOLOv1损失函数来代表YOLOv3函数的,这里我发表一下个人对YOLOv3损失函数的见解。

损失函数

在这里本人认为损失函数就像YOLOv3原作者在论文所说的:

  • 边界框运用均方误差
  • 置信度运用交叉熵
  • 类别运用交叉熵

用公式表示如下:在这里插入图片描述
源码中边框坐标也有乘以scale(2-wh)。对于scale,我的理解是:wh越小,就表示面积越小,面积越小,在和anchor做比较的时候,iou也就会越小,scale便是用来弱化边界框尺寸对损失值的影响。而对于坐标,本人认为没这个必要,所以上述公式坐标那一块并没有乘以scale。

函数求导讲解

均方误差求导:
在这里插入图片描述
交叉熵函数求导:
在这里插入图片描述
logistic函数求导:
在这里插入图片描述

源码解释

本人认为项目源码中并没有直接给出损失函数的表达,而是直接跳过了这一步进行反向传播求梯度
源码中有一个很重要的变量delta,本人认为这便是存放梯度的
Delta =

  1. 类别:
 delta[index + stride*n] = ((n == class_id) ? 1 : 0) - output[index + stride*n]; 
 if (n == class_id && avg_cat) *avg_cat += output[index + stride*n]; 
  1. 置信度:
 int obj_index = entry_index(l, b, n*l.w*l.h + j*l.w + i, 4); 
 avg_anyobj += l.output[obj_index]; 
 l.delta[obj_index
  • 12
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值