DeepLearing—CV系列(八)——多类多目标物体的侦测——YOLO系列之YOLOV1

时间:2024-03-24 12:08:12

一、目标检测的做法

1.采用滑动窗口,对每个窗口分类和位置修正;
2.RPN的方式先提取候选区域,特征图对应候选区域范围经过roipooling得到所需特征;3.SSD继承RPN类似的anchor机制,设定预设框并对每个预设框赋予groundtruth,全卷积网络训练目标。

二、YOLO的核心思想

YOLO核心思想:YOLO的核心思想就是利用整张图作为网络的输入,直接在输出层回归bounding box的位置和bounding box所属的类别。

Faster R-CNN中也直接用整张图作为输入,但是Faster R-CNN整体还是采用了R-CNN那种
proposal+classifier的思想,只不过是将提取proposal的步骤放在CNN中实现了。

DeepLearing—CV系列(八)——多类多目标物体的侦测——YOLO系列之YOLOV1

三、YOLO的实现方法

  • ① yolo将输入图像划分为 S×S 的网格,物体的中心落在哪一个网格内,这个网格就负责预测该物体的置信度,类别以及位置。
  • ② 每个网格要预测B个bounding box,每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。 这个confidence代表了所预测的box中含有object的置信度和这个box预测的有多准两重信息,其值是这样计算的:
    DeepLearing—CV系列(八)——多类多目标物体的侦测——YOLO系列之YOLOV1
    其中如果有object落在一个grid cell里,第一项取1,否则取0。 第二项是预测的bounding box和实际的groundtruth之间的IoU值。
  • ③ 每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。则SxS个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是S x S x (5xB+C)的一个tensor。
    注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的。

四、网络模型

DeepLearing—CV系列(八)——多类多目标物体的侦测——YOLO系列之YOLOV1

  • 网络结构借鉴了 GoogLeNet 。24个卷积层,2个全链接层。(用1×1 reduction layers 紧跟 3×3 convolutional layers 取代Goolenet的 inception modules )
  • 在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:
    DeepLearing—CV系列(八)——多类多目标物体的侦测——YOLO系列之YOLOV1
    等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。
  • 得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。

五、损失函数

DeepLearing—CV系列(八)——多类多目标物体的侦测——YOLO系列之YOLOV1
① 每个网格有30维,这30维中,8维是回归框的坐标,2维是框的置信度,还有20维是类别。其中坐标的x,y用对应网格的偏移量归一化到0-1之间,w,h用图像的width和height归一化到0-1之间。
② 在实现中,最主要的就是怎么设计损失函数,让这个三个方面得到很好的平衡。作者简单粗暴的全部采用了差平方和误差(sum-squared error loss)来做这件事。
这种做法存在以下几个问题:
第一,8维的位置误差和20维的类别误差同等重要显然是不合理的;
第二,如果一个网格中没有object(一幅图中这种网格很多),那么就会将这些网格中的box的置信度设为0,相比于较少的有object的网格,这种做法是overpowering的,这会导致网络不稳定甚至发散。
解决办法:

  • 更重视8维的坐标预测,给这些损失前面赋予更大的loss weight, 记为λcoord,在pascal VOC训练中取5。
  • 对没有object的box的confidence loss,赋予小的loss weight,记为λnoobj,在pascal VOC训练中取0.5。
  • 有object的box的confidence loss和类别的loss的loss weight正常取1。
    ③ 对不同大小的box预测中,相比于大box预测偏一点,小box预测偏一点肯定更不能被忍受的。而sum-square error loss中对同样的偏移loss是一样。 为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。
    如下图:small bbox的横轴值较小,发生偏移时,反应到y轴上的loss(下图绿色)比big box(下图红色)要大。
  • DeepLearing—CV系列(八)——多类多目标物体的侦测——YOLO系列之YOLOV1
    ④ 一个网格预测多个box,希望的是每个框预测器专门负责预测某个object。具体做法就是看当前预测的box与ground truth box中哪个IoU大,就负责哪个。这种做法称作框预测器的专职化。

六、训练

在训练之前,先在ImageNet上进行了预训练,其预训练的分类模型采用图8中前20个卷积层,然后添加一个average-pool层和全连接层。预训练之后,在预训练得到的20层卷积层之上加上随机初始化的4个卷积层和2个全连接层。由于检测任务一般需要更高清的图片,所以将网络的输入从224x224增加到了448x448。整个网络的流程如下图所示:DeepLearing—CV系列(八)——多类多目标物体的侦测——YOLO系列之YOLOV1

七、YOLOV1的缺点

① YOLO对相互靠的很近的物体,还有很小的群体检测效果不好,这是因为一个网格中只预测了两个框,并且只属于一类。
② 一个格子只能预测一个物体。
DeepLearing—CV系列(八)——多类多目标物体的侦测——YOLO系列之YOLOV1