2021SC@SDUSC YOLO5源码分析 (2) yolov1

2021SC@SDUSC

  • 2021/10/09第一次编辑

在阅读yolov5之前, 有必要先回顾下之前目标检测的相关算法, 尤其是yolo系列的, 本篇重点学习下yolov1的设计.

yolo论文原文

目标检测

目标检测算法常见的分为one-stage和two-stage.

经典的two-stage算法如RCNN使用selective search先选择2000个候选区域, 然后对每个候选区进行评估打分,最后非极大值抑制输出结果. 包括RCNN的后续改进版本fast RCNN和faster RCNN都需要先选择候选区域再评估.
这种方式有很多问题, 比如训练模型需要从选取, 评估两个角度设计. 由于选取的方式如selective search是人为设计的, 所以模型的迁移泛化能力不强. 其次, 只对候选区域进行判别, 导致模型不能对全局进行识别, 背景之类的容易误判.

one-stage顾名思义, 如yolo, you only look once, 它没有显式的候选区的选择. 因此模型有很强的迁移能力, 在保证正确率的同时速度很快.

YOLOv1的输入输出

源自yolo论文,yolov1网络结构
我们从上图可以看出, yolov1包含多个卷积层, 属于深度神经网络.

把中间复杂的网络结构看作黑箱, 只看网络的输入和输出.

网络的输入是 448 ∗ 448 ∗ 3 448*448*3 4484483 的张量, 也就是固定大小的三通道图片.

网络的输出是 7 ∗ 7 ∗ 30 7*7*30 7730 的张量, 包含网络的预测结果, 并通过一系列操作可以从这个张量中获得包含的目标及其位置信息.

输出的张量的含义

源自yolo论文, 预测结果
输出的 7 ∗ 7 ∗ 30 7*7*30 7730 的张量很抽象, 理解这个张量需要知道yolo网络做了什么.

yolov1是目标检测网络, 最后能标注出图像中各个物体的类型及位置, 如上右图, 这里能预测20种不同的类型.

首先如图, 网络将图片分为 S ∗ S S*S SS 个块, 这里的S取的是7, 和输出张量的前两维 7 ∗ 7 7*7 77 一一对应.

下面解释输出张量的第三个纬度.

网络对 7 ∗ 7 7*7 77 的每个块, 都会生成两个Bounding box. 每个bounding box有4个参数 ( x , y , w , h ) (x, y, w, h) (x,y,w,h) ,由这四个参数我们可以确定一个矩形框. 有49个块也就生成98个矩形框, 如上图一堆大小各异的黑框框. 每个bounding box有个额外参数confidence, 这个confidence(置信度)参数描述的是, 在这个bounding box包含 20 种预测类型的概率.

对于每个bounding box, 如果它包含20种预测类型的一种, 我们要预测这个bounding box包含是具体的哪一种类型, 于是需要额外的20个参数描述来描述包含20中预测类型的条件概率.
用公式表示就是 P ( C l a s s i ∣ O b j e c t ) P(Class_i | Object) P(ClassiObject), 我们知道 P ( O b j e c t ) P(Object) P(Object) 就是bounding box的confidence参数.

于是输出的 7 ∗ 7 ∗ 30 7*7*30 7730 的第三个纬度的含义就很清晰了, 总结下就是 前十个表示两个bounding box及其置信度参数, 最后20个参数表示要预测检测的20个参数的条件概率.

由输出张量生成目标检测的结果

使用非极大抑制生成检测结果.

yolo的损失函数

源自yolo论文, yolov1的损失函数
上图为论文中的损失函数, 可以逐行解读.

首先解释形如 1 i o b j 1_i^{obj} 1iobj 的函数.

在yolov1中, S ∗ S S*S SS 个块每个块都会生成多个(2个) bounding box. 在设计损失函数的时候, 没必要为所有的块都去调整所有的权重, 因为相对只有小部分块或者bounding box都包含待检测对象. 论文用了"responsible"这个词描述一些重要的块.

我们判断"responsible"的依据, 比如对一个 块 而言, 训练集中标注的检测框的中点落入的块, 这个块就是重要的. 对生成的 bounding box而言, 这个bounding box 形状大小位置和训练标注的框大小位置越相似, 它也就越重要, 我们描述这种相似程度使用的是 IOU.

于是这些重要的部分就"responsible"去更新预测框的大小形状, 获得高的置信度并且准确的条件概率值. 而那些不重要的, 就只需要让自己的置信度越小越好.

上述公式中描述这种 责任 的是函数 1 i j o b j 1_{ij}^{obj} 1ijobj 1 i j n o o b j 1_{ij}^{noobj} 1ijnoobj . 顾名思义 1 i j o b j 1_{ij}^{obj} 1ijobj 就是第 i 个块中出现了对象, 且这个块生成的第 j 个bounding box是重要的(高IOU)

接着就不难理解每个行的loss的含义了.

形如 λ s o m e t h i n g \lambda_{something} λsomething 是的超参数.

yolov1的限制

我们可以看到, yolo对 S ∗ S S*S SS划分网络, 至多生成 S ∗ S S*S SS 个结果, 这对密集的目标不友好.

其次与同期two-stage的fast rcnn比错误率更高(在背景的表现要好)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zzzlnb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值