YOLO v1学习笔记

本专栏将从论文的角度解读一下CV方向的一些经典神经网络模型及其贡献与意义,以期加深自己的印象,后续可以随时翻看并且学习其中好的tricks。这一期仍然介绍目标检测的网络——YOLO v1,其也是one stage算法的起源网络。

论文相关信息

论文全名为《You Only Look Once: Unified, Real-Time Object Detection》(链接),从名字也可以看出YOLO系列最大的优点就是速度快。这篇论文于2016年发表在CVPR上,使用的是PASCAL VOC 2007、2012数据集,作者信息如下:

在这里插入图片描述

网络架构

论文中的流程图:

在这里插入图片描述
一目了然的三步骤。具体架构图:

在这里插入图片描述

YOLO 的backbone部分网络叫 DarkNet ,其借鉴了 GoogLeNet 网络的结构,但是没有使用 Inception 模块,而是使用 1x1 卷积层和 3x3 卷积层来替代,相当于将 Inception 的并行思想改为串行,最后输出了一个 7×7×30 的张量。除了最后一层的输出使用线性激活函数,其他层全部使用 Leaky Relu 激活函数(有关激活函数可看这里)。网络部分看起来确实没有什么特别的亮点。

tricks

在这里插入图片描述

先把流程的细节说清楚:首先将各种尺寸的输入图片暴力缩放成 448×448 的大小,然后划分成 S×S (论文中使用 7×7)的网格块,并进行坐标变换,比如一个 GT 的中心点坐标为 (350,100),350 / (448 / 7) = 5.468 、100 / (448 / 7) = 1.562 ,即变换后 GT 中心点坐标为(5.468,1.562)。其实也就是最后特征图(7×7)上一个像素点对应原图一个网格块的思路。

如果一个 GT 的中心落入某个网格块中,那么该网格块就负责检测该目标,对于上述例子,显然落入(5,1)的网格块内。对于这 49 个网格块,每个网格块都预测 B (论文中使用 B=2) 个 bounding boxes 框,但训练时最后只取与 GT 的 IoU 高的那个框作为最后的检测框。没错,就是一个网格块只输出一个预测框,若单个网格块包含多个 GT 的中心时,只能检测出其中一个,导致目标漏检,因此 YOLO v1 毫不意外地对小目标和重叠目标检测效果不好。

继续说,对于这 49 × 2 的每个框分别产生 5 个预测值(x , y , w , h ,c),分别代表什么意思下面叙述。并且每个网格块还需预测 C(论文中 C=20 )个类的条件概率,表示某个目标在这个网格块中且该目标分别属于各个类别的概率,这里的 20 类物体不包含背景类,且不管框的数量 B 是多少,每个网格块都只预测一组类别概率。因此,得到了我们最后的 7×7×(2×5 + 20)的张量。

接下来我们结合损失函数来理解框产生的5个预测输出值(x , y , w , h ,c):

在这里插入图片描述

1、预测框的中心坐标 (x,y)(相对于所属网格块左上角坐标的位移值)

例如,一个物体变换后坐标为(5.4,1.5),由于目标中心点的坐标一定在某个网格块正方形里,这里是(5,1),因此网格块相对于格点左上角的位移值一定在区间 [0, 1) 中,这里是(0.4,0.5)。这一部分对应损失函数:在这里插入图片描述
其中,在这里插入图片描述
用来判断第 i 个网格块中第 j 个预测框是否包含目标,包含目标则值为 1 ,否则值为 0。也就是只对那些真正包含了目标所属的网格块预测框进行损失计算,若该框不包含物体,那么预测数值不对损失函数造成影响。

2、预测框的宽高 (w, h)(预测框真实宽高相对于整幅图像的比例)

这个应该很好理解,因此 w,h 也在区间 [0, 1] 中。对应损失函数中:

在这里插入图片描述
但这一项与其他项平方和误差不同,先对预测的(w,h)取了平方根处理,目的是为了缓解相同大小的位置误差对大目标、小目标影响不同的弊端。例如,20个像素点的偏差,对于 200×100 像素的预测框几乎没有影响,但却对 20×10 的预测框影响就很大。取根号就是为了尽可能的消除大尺寸框与小尺寸框之间的差异,但是实际上几乎没起到什么作用。

3、预测框的置信度c

在这里插入图片描述

置信度 confidence 只有2种情况,若预测框中不含目标则为0,否则就为预测框与GT的IoU,因此同样也在区间 [0, 1] 中。

对于含目标的预测框的置信度预测损失:
在这里插入图片描述
对于不含目标的预测框的置信度预测损失:
在这里插入图片描述
4、20个类的条件概率p

对应损失函数最后剩的一项:
在这里插入图片描述
也不难理解。

此外,细心的人应该发现了,上述输出都变换到了 [0,1] 区间之中,这是因为对于神经网络来说,预测输出一个 0.3、0.4 显然会比输出 3、4 容易。

那有几项前面的系数又是什么意思呢?YOLO的49个网格块中含有目标的网格块往往只有3、4个,其余全是不含有目标的网格块。此时如果不采取平衡的措施,那么模型会倾向于调整不含有目标的网格块预测框。因此其作用就是让含有目标的网格块,在损失函数中的权重更大,让模型更加重视调整含有目标的网格块预测框:
在这里插入图片描述

总结

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
YOLO v1 与 Fast R-CNN相比,Localization类的错误率更高,直接对位置进行预测回归,确实不如滑动窗口的检测方式准确率高,但对于背景的误检率更低。
在这里插入图片描述

之前的 two stage 的目标检测方法先产生候选框再检测,虽然有相对较高的检测准确率,但运行速度较慢。YOLO v1 则是创造性地将目标检测任务直接当做回归问题来做,将产生候选框和检测两个阶段合二为一,直接让网络学习预测框的位置以及大小并分类,简单粗暴,大大提高了速度,但是从实验可以看出,也是牺牲了一部分精度为代价的,接下来看看YOLO系列是如何改进的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值