YOLO系列文章阅读--yolov1

Introduction

YOLO将目标检测重新定义为一个单一的回归问题,直接从图像像素出发进行边界框位置判定和类别的分类。您只需一次(YOLO)的图像,以预测什么对象出现和它们在哪里。
YOLO系列文章阅读--yolov1_第1张图片
YOLO只是单独的使用一个卷积网络,同时预测多个bounding boxes 和每个boxes类别可能性。

这里提一下和R-CNN等的不同

R-CNN方法,首先在图像中生成潜在的边界框,然后在这些潜在的框上运行分类器。分类后进行后处理,细化边界框,消除重复检测(类似于IOU什么的),并根据场景中的其他对象重新打分。这些复杂的方法速度很慢,很难优化,因为每个单独的组件必须单独训练。

算法思想

YOLO系列文章阅读--yolov1_第2张图片

YOLO将输入图像划分为S × S网格。如果对象的中心落在网格单元格中,该网格单元格负责检测该对象。每个网格会预测 B 个bounding boxes,和这些网格的置信度。这些置信度分数反映了模型对boxes是否含有对象的分数,以及它认为boxes预测的准确性。
这里置信度打分公式为:
在这里插入图片描述
没有物体在这个cell 里面的话,分数应该是0。
每一个bounding box 需要预测5个值:x,y,w,h,confidence。其中,(x, y)坐标表示相对于网格单元格边界的方框中心。xywh都是相对大小(0~1)。

在测试的时候将类可能性的条件概率和box的置信度相乘。
在这里插入图片描述

网络结构

YOLO系列文章阅读--yolov1_第3张图片
网络结构以GoogLeNet为基础,24个卷积层接着是2个全连接层,使用3x3卷积后跟1x1卷积(这里1x1 卷积层减少了前一层的特征参数量)

LOSS函数

YOLO系列文章阅读--yolov1_第4张图片
在这里插入图片描述
表示obj这个物体在cell i 中;
在这里插入图片描述
表示在cell i 中的第j个bounding boxes预测器来做这个预测;
损失函数仅在网格单元格中存在对象时才起作用(因此前面讨论了条件类概率)。

YOLO系列文章阅读--yolov1_第5张图片
大概就是,在原有的模型中,在yolo里不把框的位置和类别的置信度等同的考虑计算。

  1. 增加边界框坐标预测的损失;
  2. 减少了不包含物体的预测框的置信度损失;(此外,在每张图像中,许多网格单元格不包含任何对象。将这些单元格的置信度推至零,通常压倒了包含对象的单元格的渐变。这可能导致模型不稳定,导致训练在早期偏离。)

长宽的根号的原因是:大box里的小偏差应该比小box的影响小
YOLO系列文章阅读--yolov1_第6张图片

YOLO的优点

  • 快。因为直接把检测问题视为回归问题。在某版本上甚至可以达到150fps;
  • 在预测时会对整张图片进行预测。不同于滑动窗口和预选区域的方法,YOLO在训练和测试期间直接覆盖整个窗口。它隐式地获取关于类别及其外观的上下文信息;
  • YOLO可用于多种对象的检测。

YOLO的缺点

  • 因为YOLO中每个cell只预测两个bbox和一个类别,这就限制了能预测重叠或邻近物体的数量,比如说两个物体的中心点都落在这个cell中,但是这个cell只能预测一个类别
  • 此外,不像Faster R-CNN一样预测offset,YOLO是直接预测bbox的位置的,这就增加了训练的难度。
  • YOLO是根据训练数据来预测bbox的,但是当测试数据中的物体出现了训练数据中的物体没有的长宽比时,YOLO的泛化能力低
  • 同时经过多次下采样,使得最终得到的feature的分辨率比较低,就是得到coarse feature,这可能会影响到物体的定位。
  • 损失函数的设计存在缺陷,使得物体的定位误差有点儿大,尤其在不同尺寸大小的物体的处理上还有待加强。(那个开根号也不过是一种工程做法,开根号的做法不一定是最优的)

参考:https://blog.csdn.net/weixin_52185313/article/details/124389180
https://zhuanlan.zhihu.com/p/364367221

你可能感兴趣的:(深度学习,计算机视觉,目标检测)