yolo算法理解

之前学习yolo觉得挺简单,不用记的,时过境迁,我终于向我的记忆力屈服了,这知识它不进我的脑子啊!

所以现在把影响我理解的地方记下来。

YOLO思想:

    yolo会输入图片分成SxS  的小格子,物体的中心点落到某个格子中,那么这个格子就负责检测出该物体。

    对于每个格子,都会检测出B个bounding box(bbox),而对于每个bbox,会预测出五个值。

    位置值(x, y, w, h):这里十分注意,因为已经限定在某个格子里了,所以预测的x,y值为相对于格子的位置。

在0,1之间。

    confidence值:bbox包含一个物体的置信度,P(object)*IOU,P(object)表示是否包含物体,IOU为交并比,表示bbox对于物体位置的准确率。

    YOLO还会为每个格子进行分类,一共有C类,为每个grid cell都预测一组条件概率: P(classi|object) ,grid cell中的B个bbox共享这个条件概率。

    最后得到SxSx(Bx5+C)的向量。

YOLO的损失函数:

这里写图片描述

这里几个需要注意的问题
1、坐标预测:

对于位置误差,主要是计算bbox的 (x, y, w, h) 和对应的ground truth box的 (x, y, w, h) 之间的sum-squared error,需要注意的是并不是所有的bbox都参与loss的计算,首先必须是cell i中存在object,并且cell i中的第j个bbox和ground truth box有最大的IoU值,那么这个bbox j才参与loss的计算,其他的不满足条件的bbox不参与。即,一个ground truth box只需要一个bbox来负责,而有最大IoU的bbox更接近ground truth所以学习起来更快。

此外,因为误差在小的box上体现的更明显,就是一点点小的位置上的偏差可能对大的box影响不是很大,但是对小的box的影响就比较明显了,所以为了给不同size的box的位置loss赋予不同的‘权重’,需要对w和h开方后才进行计算。因为根据 [公式] 的函数图像可知,当x较小时,x的一点小的变化都会导致y大的变化,而当x较大的时候,x的一点儿小的变化不会让y的变化太大。 但这个方法只能减弱这个问题,并不能彻底解决这个问题。

2、confidence预测

包括有object的和没有object的预测

作者设置两个超参数是因为input中的对象数量很少,所以会产生大量的无对象bbox,所以作者设置了10倍差距的λ\lambdaλ来抵消巨大的不平衡。

3、类别预测
在本文中将分类误差当作回归误差来计算,使用sum-squared error来计算分类误差,需要注意的是只有包含object的cell才参与分类loss的计算,即object中心点落入的cell才进行分类loss的计算,而这个cell的ground truth label就是该物体的label。

注意设置超参数的原因:

  • 首先在目标检测问题中,localization的误差比分类的误差更重要,所以给位置误差赋予更大的权重,。
  • 其次,因为一张图中大多数的bbox都是没有物体的,那么这些bbox的confidence的误差就会产生比较大的影响,甚至会影响到少量的含义object的bbox的误差优化,就是会产生一个overpowering,我猜测就是对于大部分的bbox来说优化loss是为了让这些bbox的confidence变为0,只有少量的是让confidence接近一个非零值,所以最后优化的结果可能是所有的bbox的confidence都变成0。为了避免这个问题,我们就需要赋予不含物体的bbox的confidence loss更小的权重 。

参考:https://zhuanlan.zhihu.com/p/63507794

发布了32 篇原创文章 · 获赞 6 · 访问量 9290

猜你喜欢

转载自blog.csdn.net/ningmengccccc/article/details/103816569