目标检测之YOLOv1

一、目标检测之YOLOv1

You Only Look Once:Unified, Real-Time Object Detection(YOLO: 一体化的,实时的物体检测)

二、YOLOv1算法

1、YOLOv1框架
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
步骤:

(1) Resize成448×448,图片分割得到7×7网格(cell)
在这里插入图片描述
(2)CNN提取特征和预测:卷积层负责提取特征。全连接层负责预测;
在这里插入图片描述

  • 最后一层输出为 (7×7)×30的维度。每个 1×1×30的维度对应原图7×7个cell中的一个,1×1×30中含有类别预测bbox坐标预测。总得来讲就是让网格负责类别信息,bounding box主要负责坐标信息(部分负责类别信息:confidence也算类别信息)。具体如下:
  • 每个网格(1×1×30维度对应原图中的cell)要预测2个bounding box (上图中黄色实线框)的坐标**(x,y,w,h) ,**其中:bbox中心坐标的(x,y) 相对于对应的网格归一化到0-1之间,w,h用图像的width和height归一化到0-1之间。 每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。 这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息:confidence= 在这里插入图片描述。其中如果有ground true box(人工标记的物体)落在一个grid cell里,第一项取1,否则取0。 第二项是预测的bounding box和实际的ground truth box之间的IOU值。即:每个bounding box要预测 x,y,w,h,confidence,共5个值 ,2个bounding box共10个值,对应 1×1×30维度特征中的前10个。

在这里插入图片描述

  • 每个网格还要预测类别信息,论文中有20类。7x7的网格,每个网格要预测2个 bounding box 和 20个类别概率,输出就是 7x7x(5x2 + 20) 。 (通用公式: SxS个网格,每个网格要预测B个bounding box还要预测C个categories,输出就是 S x S x (5*B+C) 的一个tensor。 注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的)
    在这里插入图片描述

(3)损失函数设计
在这里插入图片描述
损失函数的设计目标就是让坐标(x,y,w,h),confidence,classification 这个三个方面达到很好的平衡。简单的全部采用了sum-squared error loss来做这件事会有以下不足: a) 8维的localization error和20维的classification error同等重要显然是不合理的; b) 如果一个网格中没有object(一幅图中这种网格很多),那么就会将这些网格中的box的confidence push到0,相比于较少的有object的网格,这种做法是overpowering的,这会导致网络不稳定甚至发散。 解决方案如下:

  • 更重视8维的坐标预测,给这些损失前面赋予更大的loss weight, 记为 λcoord ,在pascal VOC训练中取5(上图蓝色框);
  • 对没有object的bbox的confidence loss,赋予小的loss weight,记为 λnoobj ,在pascal VOC训练中取0.5(上图橙色框);
  • 有object的bbox的confidence loss (上图红色框) 和类别的loss (上图紫色框)的loss weight正常取1;
  • 对不同大小的bbox预测中,相比于大bbox预测偏一点,小box预测偏一点更不能忍受。而sum-square error loss中对同样的偏移loss是一样。 为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。 如下图:small bbox的横轴值较小,发生偏移时,反应到y轴上的loss(下图绿色)比big box(下图红色)要大。
    在这里插入图片描述
  • 一个网格预测多个bounding box,在训练时我们希望每个object(ground true box)只有一个bounding box专门负责(一个object 一个bbox)。具体做法是与ground true box(object)的IOU最大的bounding box 负责该ground true box(object)的预测。这种做法称作bounding box predictor的specialization(专职化)。每个预测器会对特定(sizes,aspect ratio or classed of object)的ground true box预测的越来越好。(个人理解:IOU最大者偏移会更少一些,可以更快速的学习到正确位置)

2、测试

Test的时候,每个网格预测的class信息( Pr(Class_i | Object) )和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score
在这里插入图片描述

  • 等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。
    在这里插入图片描述
    在这里插入图片描述
  • 对每一个网格的每一个bbox执行同样操作: 7x7x2 = 98 bbox (每个bbox既有对应的class信息又有坐标信息)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 得到每个bbox的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/thisiszdy/article/details/89438817
今日推荐