目标检测之one stage :YOLO开山之作


在这里插入图片描述

网格化

即将图片分成 7 ∗ 7 7*7 77 的网格,网络输出张量为 b a t c h _ s i z e ∗ 7 ∗ 7 ∗ 30 batch\_size*7*7*30 batch_size7730

在Yolo中,如果一个物体的中心点,落在了某个格子中,那么这个格子将负责预测这个物体。以此取代滑窗
在这里插入图片描述

网络结构

在这里插入图片描述

输入图像大小为 448 ∗ 448 448*448 448448,经过若干个卷积层与池化层,变为 7 ∗ 7 ∗ 1024 7*7*1024 771024张量(图一中倒数第三个立方体),最后经过两层全连接层,输出张量维度为 7 ∗ 7 ∗ 30 7*7*30 7730

输出的含义

7 ∗ 7 7*7 77即网格,那 30 30 30呢?

每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置(x, y, w, h)之外,还要附带预测一个confidence值。 每个网格还要预测一个类别信息,记为C类。

则SxS个网格的输出就是S x S x (5*B+C)的一个tensor。
在PASCAL VOC中, 图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。

即 这30维中,8维是回归box的坐标,2维是box的confidence,还有20维是类别。

坐标(x, y, w, h)

其中中心坐标的x,y用对应网格的offset归一化到0-1之间,w,h用图像的width和height归一化到0-1之间。

不直接回归中心点坐标数值,而是回归相对于格点左上角坐标的位移值。例如,第一个格点中物体坐标为(2.3,3.6) ,另一个格点中的物体坐标为(5.4,6.3),这四个数值让神经网络暴力回归,有一定难度。所以这里的offset是指,既然格点已知,那么物体中心点的坐标一定在格点正方形里,相对于格点左上角的位移值一定在区间[0, 1)中。让神经网络去预测 (0.3,0.6) 与 (0.4,0.3) 会更加容易,在使用时,加上格点左上角坐标即可。

confidence

confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息 c o n f i d e n c e = P ( o b j e c t ) ∗ I O U p r e d t r u e confidence=P(object)*IOU^{true}_{pred} confidence=P(object)IOUpredtrue
如果有object落在一个grid cell里,第一项取1,否则取0。
第二项是预测的bounding box和实际的groundtruth之间的IoU值。

损失函数

在这里插入图片描述

https://blog.csdn.net/c20081052/article/details/80236015

Yolo面临的物体检测问题,是一个典型的类别数目不均衡的问题。其中49个格点,含有物体的格点往往只有3、4个,其余全是不含有物体的格点。此时如果不采取点措施,那么物体检测的mAP不会太高,因为模型更倾向于不含有物体的格点。因此让含有物体的格点,在损失函数中的权重更大,让模型更加“重视”含有物体的格点所造成的损失。

  1. 重视8维的坐标预测,给这些损失前面赋予更大的loss weight, 记为 λ c o o r d λ_{coord} λcoord, 在pascal VOC训练中取5。
  2. 有object的box的confidence loss和类别的loss的loss weight正常取1。
  3. 对没有object的box的confidence loss,赋予小的loss weight,记为 λ n o o b j λ_{noobj} λnoobj, 在pascal VOC训练中取0.5。
  4. 对不同大小的box预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。而sum-square error loss中对同样的偏移loss是一样。
    为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。这个参考下面的图很容易理解,小box的横轴值较小,发生偏移时,反应到y轴上相比大box要大。
    在这里插入图片描述

预测

置信度过滤

在推理时,使用物体的类别预测最大值 p 乘以 预测框的最大值 c ,作为输出预测物体的置信度class-specific confidence score。
设置阈值过滤掉一些得分低的矩形框。输出检测物体的置信度,
同时考虑了矩形框与类别,满足阈值的输出更加可信。
P r ( C l a s s i ∣ O b j e c t ) ∗ P r ( O b j e c t ) ∗ I O U p r e d t r u e = P r ( C l a s s i ) ∗ I O U p r e d t r u e Pr(Class_i|Object)*Pr(Object)*IOU^{true}_{pred}=Pr(Class_i)*IOU^{true}_{pred} Pr(ClassiObject)Pr(Object)IOUpredtrue=Pr(Classi)IOUpredtrue

使用NMS非极大抑制生成预测框

  1. 取置信度class-specific confidence score最大的框作为目标

  2. 遍历剩下的框,去掉和第一个框重合度IOU大于某阈值的框

  3. 剩下的框里找到置信度class-specific confidence score最大的框作为第二个目标,返回2,直到没有剩下框

性能与小结

性能

backbone同为VGG-16,Yolo比Faster R-CNN少了将近7点mAP,但是速度变为三倍,Fast Yolo和Yolo相比,少11点mAP,但是速度可以达到155张图片每秒。后续的Yolo v3中,准确率和速度综合再一次提升,所以v1的性能不再过多分析。

不足

  1. Yolo的Localization错误率更高,直接对位置进行回归,确实不如滑窗式的检测方式准确率高。

  2. 作者提到Yolo对于小物体检测效果欠佳,不过在v2与v3中都做了不少改进。

  3. YOLO的每一个网格只预测两个boxes,一种类别。这导致模型对相邻目标预测准确率下降。因此,YOLO对成队列的目标(如 一群鸟)识别准确率较低。

  4. YOLO是从数据中学习预测bounding boxes,因此,对新的或者不常见角度的目标无法识别。

优点

一,非常快。YOLO预测流程简单,速度很快。我们的基础版在Titan X GPU上可以达到45帧/s; 快速版可以达到150帧/s。因此,YOLO可以实现实时检测。

二,YOLO采用全图信息来进行预测。与滑动窗口方法和region proposal-based方法不同,YOLO在训练和预测过程中可以利用全图信息。Fast R-CNN检测方法会错误的将背景中的斑块检测为目标,原因在于Fast R-CNN在检测中无法看到全局图像。相对于Fast R-CNN,YOLO背景预测错误率低一半。

三,YOLO可以学习到目标的概括信息(generalizable representation),具有一定普适性。我们采用自然图片训练YOLO,然后采用艺术图像来预测。YOLO比其它目标检测方法(DPM和R-CNN)准确率高很多。

链接:https://zhuanlan.zhihu.com/p/70387154
https://zhuanlan.zhihu.com/p/25053311

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值