目标检测:YOLO理论部分

目标检测流程 

  1. 生成bounding box(边界框)
  2. 对物体进行分类

YOLOyou only look once就是one-stage算法系列的代表。它将目标检测任务当做回归问题(regression problem)来处理,直接通过整张图片的所有像素得到bounding box的坐标、box中包含物体的置信度和class probabilities。顾名思义,通过YOLO,每张图像只需要看一眼就能得出图像中都有哪些物体和这些物体的位置。

YOLOv1网络结构:24个卷积层和2个全连接层

算法流程

  1. YOLO将图片分为S×S个网格,这里规定了物体的中心落在哪个格子,就由哪个格子负责预测这个物体,YOLO取S=7。比如上图中,假定左下角坐标为(0,0),狗的中心落在了(1,2)这个格子,那么(1,2)这个格子就负责预测这只狗。
  2. 其次,每个网格预测B个bounding boxes以及对应的confidence scores(置信度分数)。B=2。
  3. 每个预测出的bounding box有5个预测值(x,y,w,h,confidence)。x和y是bounding box的中心坐标。w和h则是物体长宽相对于整幅图像的比例confidence就是预测的bounding box和ground truth box的IOU值。
  4. 每个网格还预测C个类别物体的条件概率。注意这里是每个网格,而不是每个bounding box

也就是说最后会得到C×(S×S×B)的score矩阵。接下来的操作都是C个类别轮流进行:在某个类别中(即矩阵的某一行),将得分少于阈值(0.2)的设置为0,然后再按得分从高到低排序。最后再用NMS算法去掉重复率较大的bounding box。最后每个bounding box的C个score取最大的score,如果这个score大于0,那么这个bounding box就是这个socre对应的类别(矩阵的行),如果小于0,说明这个bounding box里面没有物体,跳过即可。

NMS:针对某一类别,选择得分最大的bounding box,然后计算它和其它bounding box的IOU值,如果IOU大于0.5,说明重复率较大,该得分设为0,如果不大于0.5,则不改;这样一轮后,再选择剩下的score里面最大的那个bounding box,然后计算该bounding box和其它bounding box的IOU,重复以上过程直到最后。

因此,网络最后全连接的输出层是(S×S×(B×5+C))。每个网格最后只会预测出一个物体,预测的bounding box的数量只能提高预测的精度,但最终也只能预测出一个物体,这也就可以理解前面说的YOLO的缺点之一——对小物体的检测效果不好,因为一个图片S*S个网格只能预测出S*S个物体。

​YOLOv2网络结构改进:

1.Batch Normalization(批度归一化)

  • 批度归一化有助于解决反向传播过程中出现的梯度消失梯度爆炸问题,降低对一些超参数的敏感性,并且起到一定的正则化效果(YOLO2不再使用dropout),从而能够获得更好的收敛速度和收敛效果,加了BN层后mAP提高了2%

2.High Resolution Classifier(使用高分辨率图像微调分类模型)

  • 目前先进的目标检测方法中,基本上都会先在ImageNet上进行预训练,而ImageNet的输入采用的是224×224,导致分辨率不够高,给检测带来困难。YOLO v1网络把分辨率直接提升到了448×448 ,但是直接切换分辨率,检测模型可能难以快速适应高分辨率,这也意味之原有的网络模型必须进行某种调整以适应新的分辨率输入。
  • 所以YOLO v2增加了在ImageNet数据集上使用448×448输入来finetune分类网络这一中间过程(10 epochs),这可以使得模型在检测数据集(eg:COCO)上finetune之前已经适应高分辨率输入。使用高分辨率分类器后,YOLOv2的mAP提升了约4%

3.Convolutional With Anchor Boxes(使用先验框Anchor Box替换全连接层)

  • 在之前的YOLO v1中,直接采用全连接层来预测边界框,效果不好。作者借鉴了Faster R-CNN中使用RPN预测偏移量offsets置信度confidences的思想,预测bounding boxAnchor框的偏移(offset)而不是直接预测bounding box的坐标。
  1. 首先作者去除了一个池化层,来使得输出的卷积特征图有更高的分辨率
  2. 其次作者缩减了网络,把原本网络的输入  缩减成  。因为YOLO v2模型下采样的总步长为32,对于  大小的图片,最终得到的特征图大小为  ,维度是数,这样特征图恰好只有一个中心位置。作者发现对于一些大物体,它们中心点往往落入图片中心位置,此时使用特征图的一个中心点而不是四个中心点去预测这些物体的边界框相对容易些。所以在YOLOv2设计中要保证输入对应的最终的特征图有奇数个位置(Multi-Scale Training部分有点打脸==)
  • 使用anchor boxes之后,mAP下降了0.3,但召回率提高了7%。这是因为YOLOv1只能预测98个边界框(  ),而YOLO v2使用anchor boxes之后可以预测上千个边界框(×num_anchor),这使得模型拥有进一步的改进空间。

4.Dimension Clusters(使用聚类算法提取anchor boxes的宽高)

  • 之前anchor boxes都是手工设定的,网络微调anchor boxes到实际位置的难度不小。而YOLO v2的做法是对训练集中标注的边框进行聚类分析,以自动找到更好的尺寸。
  • 聚类算法最重要的是选择如何计算两个边框之间的“距离”,对于常用的欧式距离,大边框会产生更大的误差,但我们关心的是anchor boxesground truthIOU。所以,YOLO2在聚类时巧妙地采用以下公式来计算两个边框之间的距离:
  • centroid是聚类时被选作中心的边框,box就是其它anchor boxes。IOU越大,距离越近。YOLO2给出的聚类分析结果如下图所示:

  • 随着聚类中心数目的增加,我们可以看到平均IOU值是增加的,但是综合考虑模型复杂度和召回率,作者最终选取5个聚类中心作为先验框,其相对于图片的大小如右边图所示。

5.Direct location prediction(直接位置预测)

  • 作者发现使用anchor boxes的时候模型不稳定,尤其是在早期迭代的时候。而大部分的不稳定现象出现在预测box的  坐标上了,而以往计算的公式如下(图中的两个减号应是加号,作者写错):

  • 这个公式没有任何限制,使得无论在什么位置进行预测,任何anchor boxes可以在图像中任意一点结束(这是因为偏移量  没有大小限制,可能会导致出现anchor偏离ground truth很远的情况。正确做法应该是每一个anchor只负责检测周围正负一个单位以内的目标box)。YOLO v2调整了预测公式,将预测边框的中心约束在网格内:

  • 其中,  是预测边框的中心和宽高。  是预测边框的置信度YOLO v1是直接预测置信度的值,这里对预测参数  进行σ变换后作为置信度的值。  是当前网格左上角到图像左上角的距离,要先将网格大小归一化,即令一个网格的宽=1,高=1。  是先验框的宽和高。 σ是sigmoid函数。  是要学习的参数,分别用于预测边框的中心和宽高,以及置信度
  • 这里具体的原理包括  为什么要乘上一个指数,下面的这篇文章:

逍遥王可爱:史上最详细的Yolov3边框预测分析509 赞同 · 76 评论文章正在上传…重新上传取消

  • 作者使用Dimension Clusters和Direct location prediction这两项anchor boxes改进方法,mAP获得了5%的提升。

6.Fine-Grained Features(细粒度特征)

  • 作者发现YOLO使用  的特征图进行预测大物体拥有很好的效果,而相对比较小的物体则效果一般。YOLO v2引入一种称为passthrough层的方法在特征图中保留一些细节信息。
  • YOLO v2所利用的Fine-Grained Features是  大小的特征图(最后一个maxpooling层的输入)。passthrough层与ResNet网络的identity mappings类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的2倍,passthrough层抽取前面层的每个  ,然后将其转化为channel的维度,对于  的特征图,经passthrough层处理之后就变成了  的新特征图(特征图大小降低4倍,而channles增加4倍),这样就可以与后面的  特征图连接在一起形成  大小的特征图。

7.Multi-Scale Training(多尺寸训练)

  • 因为Yolo v2去掉了全连接层,只有卷积层与池化层,所以对于网络的输入大小,并没有限制,整个网络的降采样倍数为32,只要输入的特征图尺寸为32的倍数即可。所以Yolo v2可以使用不同尺寸的输入图片训练,来使模型适应不同分辨率的图片,让模型更鲁棒
  • 具体来说就是在训练过程中每间隔一定的iterations(论文中是10)之后改变模型的输入图片大小。由于YOLOv2的下采样总步长为32,输入图片大小选择一系列为32倍数的值:{ },输入图片最小为  ,此时对应的特征图大小为  (和Convolutional With Anchor Boxes中提到要是奇数相悖,但是问题也不是很大),而输入图片最大为  ,对应的特征图大小为  。在训练过程,每隔10个iterations随机选择一种输入图片大小,然后只需要修改对最后检测层的处理就可以重新训练。
  • 小尺寸图片检测中,YOLO v2效果很好,输入为  的时候,帧率达到91FPSmAP几乎和Faster R-CNN的水准相同。在大尺寸图片检测中,YOLO v2也达到了先进水平,在VOC2007数据集上mAP为78.6%,仍然高于平均水准,下图是YOLO v2和其他网络的效果对比:

8.Darknet-19

  • YOLOv2采用了一个新的网络,称为Darknet-19,包括19个卷积层和5个maxpooling层,在ImageNet数据集上,Darknet-19的top-1准确度为72.9%,top-5准确度为91.2%,但是模型参数相对小一些。使用Darknet-19之后,YOLOv2的mAP值没有显著提升,但是计算量却可以减少约33%

tips:YOLO v2具体的训练方式这里不多赘述,在YOLO v3的介绍中会重点侧重实现。

YOLO9000:Stronger

  • 众所周知,检测数据集的标注要比分类数据集打标签繁琐的多,所以ImageNet分类数据集比VOC等检测数据集高出几个数量级。在YOLO中,边界框的预测其实并不依赖于物体的种类标签,所以YOLO可以实现在分类数据集和检测数据集上的联合训练。对于检测数据集,可以用来学习预测物体的边界框、置信度以及为物体分类,而对于分类数据集可以仅用来学习分类,但是其可以大大扩充模型所能检测的物体种类。那具体是怎么做的呢?
  • 联合训练方法思路简单清晰,Yolo v2中物体矩形框生成,不依赖于物理类别预测,两个预测互相独立。当输入是检测的数据集时,标注信息既有位置信息也有类别信息,那么对整个loss函数计算loss;当输入是分类数据集时,标注信息只有类别信息,那么整个loss函数只计算分类loss,其余部分loss为零。
  • 作者先在检测数据集上训练一定的epoch,待预测框的loss基本稳定后,再联合分类数据集、检测数据集进行交替训练,同时由于ImageNet样本比COCO多得多,所以对COCO样本会多做一些采样,适当平衡一下样本数量。
  • 但是这个方法会遇到一个问题,传统的最后一层分类的各个种类之间都是互斥的,但是这里ImageNet和COCO数据集的类别之间并不一定是互斥关系,可能是包含(人与男人)、相交(运动员与男人)等的关系,作者这里提出了一种层级分类方法(Hierarchical classification),主要思路是根据各个类别之间的从属关系(根据WordNet)建立一种树结构WordTree,结合COCO和ImageNet建立的WordTree如下图所示:

  • WordTree中的根节点为”physical object”,每个节点的子节点都属于同一子类,可以对它们进行softmax处理(而不是对所有的种类进行softmax)。在给出某个类别的预测概率时,需要找到其所在的位置,遍历这个path,然后计算path上各个节点的概率之积。

  • 如图中所示,同一颜色的种类之间进行softmax操作,使得同一颜色中只有一个类别预测分值最大。在预测时,从树的根节点开始向下检索,每次选取预测分值最高的子节点,直到所有选择的节点预测概率连乘后小于某一阈值(论文中取0.6)时停止。eg: 

-通过联合训练策略,YOLO9000可以快速检测出超过9000个类别的物体,总体mAP值为19.7

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年5月22日
下一篇 2022年5月22日

相关推荐