commit
2cff6d20f6
|
|
@ -25,6 +25,7 @@
|
||||||
### 8.1.2选择性搜索
|
### 8.1.2选择性搜索
|
||||||
|
|
||||||
除了暴力检测方法之外,选择性搜索也是一种常见的目标检测方法。采用候选区域方法(region proposal method)创建目标检测的感兴趣区域(ROI)。在选择性搜索(selective search,SS)中,假设现在图像上有n个预分割的区域,表示为R={R1, R2, ..., Rn},计算每个region与它相邻region(注意是相邻的区域)的相似度,这样会得到一个n*n的相似度矩阵(同一个区域之间和一个区域与不相邻区域之间的相似度可设为NaN),从矩阵中找出最大相似度值对应的两个区域,将这两个区域合二为一,这时候图像上还剩下n-1个区域;重复上面的过程(只需要计算新的区域与它相邻区域的新相似度,其他的不用重复计算),重复一次,区域的总数目就少1,知道最后所有的区域都合并称为了同一个区域(即此过程进行了n-1次,区域总数目最后变成了1).算法的流程图如下图所示:
|
除了暴力检测方法之外,选择性搜索也是一种常见的目标检测方法。采用候选区域方法(region proposal method)创建目标检测的感兴趣区域(ROI)。在选择性搜索(selective search,SS)中,假设现在图像上有n个预分割的区域,表示为R={R1, R2, ..., Rn},计算每个region与它相邻region(注意是相邻的区域)的相似度,这样会得到一个n*n的相似度矩阵(同一个区域之间和一个区域与不相邻区域之间的相似度可设为NaN),从矩阵中找出最大相似度值对应的两个区域,将这两个区域合二为一,这时候图像上还剩下n-1个区域;重复上面的过程(只需要计算新的区域与它相邻区域的新相似度,其他的不用重复计算),重复一次,区域的总数目就少1,知道最后所有的区域都合并称为了同一个区域(即此过程进行了n-1次,区域总数目最后变成了1).算法的流程图如下图所示:
|
||||||
|
<center><img src="../img/al8.1.png"></center>
|
||||||
|
|
||||||
下图第一行展示了如何使区域增长,第二行中的蓝色矩形代表合并过程中所有可能的ROI。
|
下图第一行展示了如何使区域增长,第二行中的蓝色矩形代表合并过程中所有可能的ROI。
|
||||||
<center><img src="../img/8.1.4.png"></center>
|
<center><img src="../img/8.1.4.png"></center>
|
||||||
|
|
@ -205,11 +206,206 @@
|
||||||
|
|
||||||
图8.3.9 使用多尺度特征图用于检测
|
图8.3.9 使用多尺度特征图用于检测
|
||||||
|
|
||||||
|
## 7.4 YOLO系列
|
||||||
|
### 7.4.1 YOLOv1介绍
|
||||||
|
YOLO之前的物体检测系统使用分类器来完成物体检测任务。为了检测一个物体,这些物体检测系统要在一张测试图的不同位置和不同尺寸的bounding box上使用该物体的分类器去评估是否有该物体。如DPM系统,要使用一个滑窗(sliding window)在整张图像上均匀滑动,用分类器评估是否有物体。
|
||||||
|
在DPM之后提出的其他方法,如R-CNN方法使用region proposal来生成整张图像中可能包含待检测物体的potential bounding boxes,然后用分类器来评估这些boxes,接着通过post-processing来改善bounding boxes,消除重复的检测目标,并基于整个场景中的其他物体重新对boxes进行打分。整个流程执行下来很慢,而且因为这些环节都是分开训练的,检测性能很难进行优化。
|
||||||
|
作者设计了YOLO(You Only Look Once: Unified, Real-Time Object Detection),将物体检测任务当作回归问题(regression problem)来处理,直接通过整张图片的所有像素得到bounding box的坐标、box中包含物体的置信度和class probabilities。通过YOLO,每张图像只需要看一眼就能得出图像中都有哪些物体和这些物体的位置。
|
||||||
|
|
||||||
|
图7.4.1
|
||||||
|
如图所示,使用YOLO来检测物体,其流程是非常简单明了的:(1)将图像resize到448×448作为神经网络的输入;(2)运行神经网络,得到一些bounding box坐标、box中包含物体的置信度和class probabilities;(3)进行非极大值抑制,筛选Boxes。下图是各物体检测系统的检测流程对比:
|
||||||
|
|
||||||
|
图7.4.2
|
||||||
|
#### (1)Unified Detection
|
||||||
|
YOLO将输入图像划分为S×S的栅格,每个栅格负责检测中心落在该栅格中的物体,如下图所示:
|
||||||
|
|
||||||
|
图7.4.3
|
||||||
|
每一个栅格预测B个bounding boxes,以及这些bounding boxes的confidence scores。这个confidence scores反映了模型对于这个栅格的预测:该栅格是否含有物体,以及这个box的坐标预测的有多准。如果这个栅格中不存在一个object,则confidence score应该为0;否则的话,confidence score则为predicted bounding box与ground truth box之间的IOU(intersection over union)。YOLO对每个bounding box有5个predictions:x, y, w, h, and confidence。坐标x,y代表了预测的bounding box的中心与栅格边界的相对值。坐标w,h代表了预测的bounding box的width、height相对于整幅图像width,height的比例。confidence就是预测的bounding box和ground truth box的IOU值。
|
||||||
|
|
||||||
|
图7.4.4
|
||||||
|
|
||||||
|
图7.4.5
|
||||||
|
每一个栅格还要预测C个conditional class probability(条件类别概率):Pr(Classi|Object)。即在一个栅格包含一个Object的前提下,它属于某个类的概率。只为每个栅格预测一组(C个)类概率,而不考虑框B的数量。
|
||||||
|
|
||||||
|
图7.4.6
|
||||||
|
注意:conditional class probability信息是针对每个网格的。confidence信息是针对每个bounding box的。在测试阶段,将每个栅格的conditional class probabilities与每个bounding box的confidence相乘。这样既可得到每个bounding box的具体类别的confidence score。这乘积既包含了bounding box中预测的class的probability信息,也反映了bounding box是否含有Object和bounding box坐标的准确度。
|
||||||
|
|
||||||
|
图7.4.7
|
||||||
|
将YOLO用于PASCAL VOC数据集时:论文使用的S=7,即将一张图像分为7×7=49个栅格每一个栅格预测B=2个boxes(每个box有x, y, w, h, confidence,5个预测值),同时C=20(PASCAL数据集中有20个类别)。因此,最后的prediction是7×7×30{即S×S×(B×5+C)}的Tensor。
|
||||||
|
|
||||||
|
图7.4.8
|
||||||
|
|
||||||
|
图7.4.9
|
||||||
|
|
||||||
|
图7.4.10
|
||||||
|
|
||||||
|
#### (2)Network Design
|
||||||
|
YOLO检测网络包括24个卷积层和2个全连接层,如图所示:
|
||||||
|
|
||||||
|
图7.4.11
|
||||||
|
|
||||||
|
图7.4.12
|
||||||
|
其中,卷积层用来提取图像特征,全连接层用来预测图像位置和类别概率值。YOLO网络借鉴了GoogLeNet分类网络结构。不同的是,YOLO未使用inception module,而是使用1×1卷积层(此处1x1卷积层的存在是为了跨通道信息整合)3×3卷积层进行简单替代。
|
||||||
|
|
||||||
|
#### (3)Training
|
||||||
|
首先利用ImageNet 1000-class的分类任务数据集Pretrain卷积层。使用上述网络中的前20个卷积层,加上一个average-pooling layer,最后加一个全连接层,作为Pretrain的网络。训练大约一周的时间,使得在ImageNet 2012的验证数据集Top-5的精度达到88%,这个结果跟GoogleNet的效果相当。将Pretrain的结果的前20层卷积层应用到Detection中,并加入剩下的4个卷积层及2个全连接。同时为了获取更精细化的结果,将输入图像的分辨率由224×224提升到448×448。将所有的预测结果都归一化到0-1,使用Leaky RELU作为激活函数。为了防止过拟合,在第一个全连接层后面接了一个ratio=0.5的Dropout层。为了提高精度,对原始图像做数据提升。
|
||||||
|
|
||||||
|
#### (4)损失函数
|
||||||
|
损失函数的设计目标就是让坐标(x,y,w,h),confidence,classification这个三个方面达到很好的平衡。简单的全部采用了sum-squared error loss来做这件事会有以下不足:(1)8维的localization error和20维的classification error同等重要显然是不合理的;(2)如果一些栅格中没有object(一幅图中这种栅格很多),那么就会将这些栅格中的bounding box的confidence置为0,相比于较少的有object的栅格,这些不包含物体的栅格对梯度更新的贡献会远大于包含物体的栅格对梯度更新的贡献,这会导致网络不稳定甚至发散。
|
||||||
|
|
||||||
|
图7.4.13
|
||||||
|
解决方案如下:更重视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预测偏相同的尺寸对IOU的影响更大。而sum-square error loss中对同样的偏移loss是一样。为了缓和这个问题,作者用了一个巧妙的办法,就是将box的width和height取平方根代替原本的height和width。在YOLO中,每个栅格预测多个bounding box,但在网络模型的训练中,希望每一个物体最后由一个bounding box predictor来负责预测。因此,当前哪一个predictor预测的bounding box与ground truth box的IOU最大,这个predictor就负责predict object。这会使得每个predictor可以专门的负责特定的物体检测。随着训练的进行,每一个predictor对特定的物体尺寸、长宽比的物体的类别的预测会越来越好。
|
||||||
|
|
||||||
|
|
||||||
|
图7.4.14神经网络输出后的检测流程
|
||||||
|
|
||||||
|
图7.4.15
|
||||||
|
|
||||||
|
#### (5)非极大值抑制
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
图7.4.16
|
||||||
|
|
||||||
|
#### (6)获取Object Detect结果
|
||||||
|
|
||||||
|
图7.4.17
|
||||||
|
|
||||||
|
### 7.4.2 YOLOv1模型优缺点
|
||||||
|
#### (1)YOLO检测物体非常快。
|
||||||
|
因为没有复杂的检测流程,只需要将图像输入到神经网络就可以得到检测结果,YOLO可以非常快的完成物体检测任务。标准版本的YOLO在TitanX的GPU上能达到45FPS。更快的Fast YOLO检测速度可以达到155FPS。而且,YOLO的mAP是之前其他实时物体检测系统的两倍以上。
|
||||||
|
|
||||||
|
#### (2)YOLO可以很好的避免背景错误,产生false positives。
|
||||||
|
不像其他物体检测系统使用了滑窗或region proposal,分类器只能得到图像的局部信息。YOLO在训练和测试时都能够看到一整张图像的信息,因此YOLO在检测物体时能很好的利用上下文信息,从而不容易在背景上预测出错误的物体信息。和Fast-R-CNN相比,YOLO的背景错误不到Fast-R-CNN的一半。
|
||||||
|
#### (3)YOLO可以学到物体的泛化特征。
|
||||||
|
当YOLO在自然图像上做训练,在艺术作品上做测试时,YOLO表现的性能比DPM、R-CNN等之前的物体检测系统要好很多。因为YOLO可以学习到高度泛化的特征,从而迁移到其他领域。
|
||||||
|
尽管YOLO有这些优点,它也有一些缺点:(1)YOLO的物体检测精度低于其他state-of-the-art的物体检测系统;(2)YOLO容易产生物体的定位错误;(3)YOLO对小物体的检测效果不好(尤其是密集的小物体,因为一个栅格只能预测2个物体)。
|
||||||
|
下图是各物体检测系统的检测性能对比:
|
||||||
|
|
||||||
|
图7.4.18
|
||||||
|
### 7.4.3 YOLOv2
|
||||||
|
YOLOv2相比YOLOv1做了很多方面的改进,这也使得YOLOv2的mAP有显著的提升,并且YOLOv2的速度依然很快,保持着自己作为one-stage方法的优势,YOLOv2和Faster R-CNN,SSD等模型的对比如图7.4.19所示。
|
||||||
|
|
||||||
|
图7.4.19 YOLOv2与其它模型在VOC 2007数据集上的效果对比
|
||||||
|
YOLOv1虽然检测速度很快,但是在检测精度上却不如R-CNN系检测方法,YOLOv1在物体定位方面(localization)不够准确,并且召回率(recall)较低。YOLOv2共提出了几种改进策略来提升YOLO模型的定位准确度和召回率,从而提高mAP,YOLOv2在改进中遵循一个原则:保持检测速度,这也是YOLO模型的一大优势。YOLOv2的改进策略如图7.4.20所示,可以看出,大部分的改进方法都可以比较显著提升模型的mAP。
|
||||||
|
### 7.4.4 YOLOv2改进策略
|
||||||
|
|
||||||
|
图7.4.20 YOLOv2相比YOLOv1的改进策略
|
||||||
|
#### (1)Batch Normalization
|
||||||
|
Batch Normalization可以提升模型收敛速度,而且可以起到一定正则化效果,降低模型的过拟合。在YOLOv2中,每个卷积层后面都添加了Batch Normalization层,并且不再使用droput。使用Batch Normalization后,YOLOv2的mAP提升了2.4%。
|
||||||
|
|
||||||
|
#### (2)High Resolution Classifier
|
||||||
|
目前的目标检测方法中,基本上都会使用ImageNet预训练过的模型(classifier)来提取特征,如果用的是AlexNet网络,那么输入图片会被resize到不足256×256,导致分辨率不够高,给检测带来困难。为此,新的YOLO网络把分辨率直接提升到了448×448,这也意味之原有的网络模型必须进行某种调整以适应新的分辨率输入。
|
||||||
|
对于YOLOv2,作者首先对分类网络(自定义的darknet)进行了fine tune,分辨率改成448×448,在ImageNet数据集上训练10轮(10epochs),训练后的网络就可以适应高分辨率的输入了。然后,作者对检测网络部分(也就是后半部分)也进行fine tune。这样通过提升输入的分辨率,mAP获得了4%的提升。
|
||||||
|
|
||||||
|
#### (3)Convolutional With Anchor Boxes
|
||||||
|
之前的YOLO利用全连接层的数据完成边框的预测,导致丢失较多的空间信息,定位不准。作者在这一版本中借鉴了Faster R-CNN中的anchor思想,回顾一下,anchor是RNP网络中的一个关键步骤,说的是在卷积特征图上进行滑窗操作,每一个中心可以预测9种不同大小的建议框。
|
||||||
|
|
||||||
|
图7.4.21
|
||||||
|
为了引入anchor boxes来预测bounding boxes,作者在网络中果断去掉了全连接层。剩下的具体怎么操作呢?
|
||||||
|
首先,作者去掉了后面的一个池化层以确保输出的卷积特征图有更高的分辨率。然后,通过缩减网络,让图片输入分辨率为416×416,这一步的目的是为了让后面产生的卷积特征图宽高都为奇数,这样就可以产生一个center cell。作者观察到,大物体通常占据了图像的中间位置,就可以只用中心的一个cell来预测这些物体的位置,否则就要用中间的4个cell来进行预测,这个技巧可稍稍提升效率。最后,YOLOv2使用了卷积层降采样(factor为32),使得输入卷积网络的416×416图片最终得到13×13的卷积特征图(416/32=13)。加入了anchor boxes后,可以预料到的结果是召回率上升,准确率下降。我们来计算一下,假设每个cell预测9个建议框,那么总共会预测13×13×9=1521个boxes,而之前的网络仅仅预测7×7×2=98个boxes。具体数据为:没有anchor boxes,模型recall为81%,mAP为69.5%;加入anchor boxes,模型recall为88%,mAP为69.2%。这样看来,准确率只有小幅度的下降,而召回率则提升了7%,说明可以通过进一步的工作来加强准确率,的确有改进空间。
|
||||||
|
|
||||||
|
#### (4)Dimension Clusters(维度聚类)
|
||||||
|
作者在使用anchor的时候遇到了两个问题,第一个是anchor boxes的宽高维度往往是精选的先验框(hand-picked priors),虽说在训练过程中网络也会学习调整boxes的宽高维度,最终得到准确的bounding boxes。但是,如果一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就更容易学到准确的预测位置。和以前的精选boxes维度不同,作者使用了K-means聚类方法类训练bounding boxes,可以自动找到更好的boxes宽高维度。传统的K-means聚类方法使用的是欧氏距离函数,也就意味着较大的boxes会比较小的boxes产生更多的error,聚类结果可能会偏离。为此,作者采用的评判标准是IOU得分(也就是boxes之间的交集除以并集),这样的话,error就和box的尺度无关了,最终的距离函数为:
|
||||||
|
|
||||||
|
作者通过改进的K-means对训练集中的boxes进行了聚类,判别标准是平均IOU得分,聚类结果如下图:
|
||||||
|
|
||||||
|
图7.4.22数据集VOC和COCO上的边界框聚类分析结果
|
||||||
|
可以看到,平衡复杂度和IOU之后,最终得到k值为5,意味着作者选择了5种大小的box维度来进行定位预测,这与手动精选的box维度不同。结果中扁长的框较少,而瘦高的框更多(这符合行人的特征),这种结论如不通过聚类实验恐怕是发现不了的。当然,作者也做了实验来对比两种策略的优劣,如下图,使用聚类方法,仅仅5种boxes的召回率就和Faster R-CNN的9种相当。说明K-means方法的引入使得生成的boxes更具有代表性,为后面的检测任务提供了便利。
|
||||||
|
表7.4.1
|
||||||
|
|
||||||
|
|
||||||
|
#### (5)New Network:Darknet-19
|
||||||
|
YOLOv2采用了一个新的基础模型(特征提取器),称为Darknet-19,包括19个卷积层和5个maxpooling层,如图4所示。Darknet-19与VGG16模型设计原则是一致的,主要采用3*3卷积,采用2*2的maxpooling层之后,特征图维度降低2倍,而同时将特征图的channles增加两倍。与NIN(Network in Network)类似,Darknet-19最终采用global avgpooling做预测,并且在3*3卷积之间使用1*1卷积来压缩特征图channles以降低模型计算量和参数。Darknet-19每个卷积层后面同样使用了batch norm层以加快收敛速度,降低模型过拟合。在ImageNet分类数据集上,Darknet-19的top-1准确度为72.9%,top-5准确度为91.2%,但是模型参数相对小一些。使用Darknet-19之后,YOLOv2的mAP值没有显著提升,但是计算量却可以减少约33%。
|
||||||
|
表7.4.2
|
||||||
|
|
||||||
|
|
||||||
|
#### (6)Direct location prediction
|
||||||
|
前面讲到,YOLOv2借鉴RPN网络使用anchor boxes来预测边界框相对先验框的offsets。边界框的实际中心位置 ,需要根据预测的坐标偏移值 ,先验框的尺度 以及中心坐标 (特征图每个位置的中心点)来计算:
|
||||||
|
|
||||||
|
但是上面的公式是无约束的,预测的边界框很容易向任何方向偏移,如当 时边界框将向右偏移先验框的一个宽度大小,而当 时边界框将向左偏移先验框的一个宽度大小,因此每个位置预测的边界框可以落在图片任何位置,这导致模型的不稳定性,在训练时需要很长时间来预测出正确的offsets。所以,YOLOv2弃用了这种预测方式,而是沿用YOLOv1的方法,就是预测边界框中心点相对于对应cell左上角位置的相对偏移值,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,这样预测的偏移值在(0,1)范围内(每个cell的尺度看做1)。总结来看,根据边界框预测的4个offsets: ,可以按如下公式计算出边界框实际位置和大小:
|
||||||
|
|
||||||
|
其中为 为cell的左上角坐标,如图5所示,在计算时每个cell的尺度为1,所以当前cell的左上角坐标为(1,1)。由于sigmoid函数的处理,边界框的中心位置会约束在当前cell内部,防止偏移过多。而 和 是先验框的宽度与长度,前面说过它们的值也是相对于特征图大小的,在特征图中每个cell的长和宽均为1。这里记特征图的大小为 (在文中是(13,13)),这样我们可以将边界框相对于整张图片的位置和大小计算出来(4个值均在0和1之间):
|
||||||
|
|
||||||
|
如果再将上面的4个值分别乘以图片的宽度和长度(像素点值)就可以得到边界框的最终位置和大小了。这就是YOLOv2边界框的整个解码过程。约束了边界框的位置预测值使得模型更容易稳定训练,结合聚类分析得到先验框与这种预测方法,YOLOv2的mAP值提升了约5%。
|
||||||
|
|
||||||
|
图7.4.23边界框位置与大小的计算示例图
|
||||||
|
|
||||||
|
#### (7)Fine-Grained Features
|
||||||
|
YOLOv2的输入图片大小为416*416,经过5次maxpooling之后得到13*13大小的特征图,并以此特征图采用卷积做预测。13*13大小的特征图对检测大物体是足够了,但是对于小物体还需要更精细的特征图(Fine-Grained Features)。因此SSD使用了多尺度的特征图来分别检测不同大小的物体,前面更精细的特征图可以用来预测小物体。YOLOv2提出了一种passthrough层来利用更精细的特征图。YOLOv2所利用的Fine-Grained Features是26*26大小的特征图(最后一个maxpooling层的输入),对于Darknet-19模型来说就是大小为26*26*512的特征图。passthrough层与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的2倍,passthrough层抽取前面层的每个2*2的局部区域,然后将其转化为channel维度,对于26*26*512的特征图,经passthrough层处理之后就变成了13*13*2048的新特征图(特征图大小降低4倍,而channles增加4倍,图6为一个实例),这样就可以与后面的13*13*1024特征图连接在一起形成13*13*3072的特征图,然后在此特征图基础上卷积做预测。在YOLO的C源码中,passthrough层称为reorg layer。
|
||||||
|
另外,作者在后期的实现中借鉴了ResNet网络,不是直接对高分辨特征图处理,而是增加了一个中间卷积层,先采用64个1*1卷积核进行卷积,然后再进行passthrough处理,这样26*26*512的特征图得到13*13*256的特征图。这算是实现上的一个小细节。使用Fine-Grained Features之后YOLOv2的性能有1%的提升。
|
||||||
|
|
||||||
|
#### (8)Multi-Scale Training
|
||||||
|
由于YOLOv2模型中只有卷积层和池化层,所以YOLOv2的输入可以不限于416*416大小的图片。为了增强模型的鲁棒性,YOLOv2采用了多尺度输入训练策略,具体来说就是在训练过程中每间隔一定的iterations之后改变模型的输入图片大小。由于YOLOv2的下采样总步长为32,输入图片大小选择一系列为32倍数的值:输入图片最小为320*320,此时对应的特征图大小为10*10(不是奇数了,确实有点尴尬),而输入图片最大为608*608,对应的特征图大小为19*19,在训练过程,每隔10个iterations随机选择一种输入图片大小,然后只需要修改对最后检测层的处理就可以重新训练。
|
||||||
|
|
||||||
|
图7.4.24 Multi-Scale Training
|
||||||
|
采用Multi-Scale Training策略,YOLOv2可以适应不同大小的图片,并且预测出很好的结果。在测试时,YOLOv2可以采用不同大小的图片作为输入,在VOC 2007数据集上的效果如下图所示。可以看到采用较小分辨率时,YOLOv2的mAP值略低,但是速度更快,而采用高分辨输入时,mAP值更高,但是速度略有下降,对于544*544,mAP高达78.6%。注意,这只是测试时输入图片大小不同,而实际上用的是同一个模型(采用Multi-Scale Training训练)。
|
||||||
|
|
||||||
|
图7.4.25 YOLOv2在VOC 2007数据集上的性能对比
|
||||||
|
|
||||||
|
总结来看,虽然YOLOv2做了很多改进,但是大部分都是借鉴其它论文的一些技巧,如Faster R-CNN的anchor boxes,YOLOv2采用anchor boxes和卷积做预测,这基本上与SSD模型(单尺度特征图的SSD)非常类似了,而且SSD也是借鉴了Faster R-CNN的RPN网络。从某种意义上来说,YOLOv2和SSD这两个one-stage模型与RPN网络本质上无异,只不过RPN不做类别的预测,只是简单地区分物体与背景。在two-stage方法中,RPN起到的作用是给出region proposals,其实就是作出粗糙的检测,所以另外增加了一个stage,即采用R-CNN网络来进一步提升检测的准确度(包括给出类别预测)。而对于one-stage方法,它们想要一步到位,直接采用“RPN”网络作出精确的预测,要因此要在网络设计上做很多的tricks。YOLOv2的一大创新是采用Multi-Scale Training策略,这样同一个模型其实就可以适应多种大小的图片了。
|
||||||
|
|
||||||
|
### 7.4.5 YOLOv2的训练
|
||||||
|
YOLOv2的训练主要包括三个阶段。
|
||||||
|
第一阶段:先在ImageNet分类数据集上预训练Darknet-19,此时模型输入为224*224,共训练160个epochs。
|
||||||
|
第二阶段:将网络的输入调整为448*448,继续在ImageNet数据集上finetune分类模型,训练10个epochs,此时分类模型的top-1准确度为76.5%,而top-5准确度为93.3%。
|
||||||
|
第三个阶段:修改Darknet-19分类模型为检测模型,并在检测数据集上继续finetune网络。
|
||||||
|
网络修改包括(网路结构可视化):移除最后一个卷积层、global avgpooling层以及softmax层,并且新增了三个3*3*2014卷积层,同时增加了一个passthrough层,最后使用1*1卷积层输出预测结果。
|
||||||
|
|
||||||
|
### 7.4.6 YOLO9000
|
||||||
|
YOLO9000是在YOLOv2的基础上提出的一种可以检测超过9000个类别的模型,其主要贡献点在于提出了一种分类和检测的联合训练策略。众多周知,检测数据集的标注要比分类数据集打标签繁琐的多,所以ImageNet分类数据集比VOC等检测数据集高出几个数量级。在YOLO中,边界框的预测其实并不依赖于物体的标签,所以YOLO可以实现在分类和检测数据集上的联合训练。对于检测数据集,可以用来学习预测物体的边界框、置信度以及为物体分类,而对于分类数据集可以仅用来学习分类,但是其可以大大扩充模型所能检测的物体种类。 作者选择在COCO和ImageNet数据集上进行联合训练,但是遇到的第一问题是两者的类别并不是完全互斥的,比如"Norfolk terrier"明显属于"dog",所以作者提出了一种层级分类方法(Hierarchical classification),主要思路是根据各个类别之间的从属关系(根据WordNet)建立一种树结构WordTree,结合COCO和ImageNet建立的WordTree如下图所示:
|
||||||
|
|
||||||
|
图7.4.26 基于COCO和ImageNet数据集建立的WordTree
|
||||||
|
WordTree中的根节点为"physical object",每个节点的子节点都属于同一子类,可以对它们进行softmax处理。在给出某个类别的预测概率时,需要找到其所在的位置,遍历这个path,然后计算path上各个节点的概率之积。
|
||||||
|
|
||||||
|
图7.4.27 ImageNet与WordTree预测的对比
|
||||||
|
在训练时,如果是检测样本,按照YOLOv2的loss计算误差,而对于分类样本,只计算分类误差。在预测时,YOLOv2给出的置信度就是Pr(physicalobject),同时会给出边界框位置以及一个树状概率图。在这个概率图中找到概率最高的路径,当达到某一个阈值时停止,就用当前节点表示预测的类别。通过联合训练策略,YOLO9000可以快速检测出超过9000个类别的物体,总体mAP值为19,7%。我觉得这是作者在这篇论文作出的最大的贡献,因为YOLOv2的改进策略亮点并不是很突出,但是YOLO9000算是开创之举。
|
||||||
|
|
||||||
|
### 7.4.7 YOLOv3
|
||||||
|
YOLOv3在Pascal TitanX上处理608x608图像速度达到20FPS,在COCO test-dev上mAP@0.5达到57.9%,与RetinaNet(FocalLoss论文所提出的单阶段网络)的结果相近,并且速度快4倍。YOLOv3的模型比之前的模型复杂了不少,可以通过改变模型结构的大小来权衡速度与精度。速度对比如下:
|
||||||
|
|
||||||
|
图7.4.28 性能对比图
|
||||||
|
YOLOv3在实现相同准确度下要显著地比其它检测方法快。时间都是在采用M40或TitanX等相同GPU下测量的。
|
||||||
|
简而言之,YOLOv3的先验检测(Prior detection)系统将分类器或定位器重新用于执行检测任务。他们将模型应用于图像的多个位置和尺度。而那些评分较高的区域就可以视为检测结果。此外,相对于其它目标检测方法,我们使用了完全不同的方法。我们将一个单神经网络应用于整张图像,该网络将图像划分为不同的区域,因而预测每一块区域的边界框和概率,这些边界框会通过预测的概率加权。我们的模型相比于基于分类器的系统有一些优势。它在测试时会查看整个图像,所以它的预测利用了图像中的全局信息。与需要数千张单一目标图像的R-CNN不同,它通过单一网络评估进行预测。这令YOLOv3非常快,一般它比R-CNN快1000倍、比Fast R-CNN快100倍。
|
||||||
|
|
||||||
|
### 7.4.8 YOLOv3改进
|
||||||
|
#### (1)多尺度预测(类FPN)
|
||||||
|
每种尺度预测3个box, anchor的设计方式仍然使用聚类,得到9个聚类中心,将其按照大小均分给3中尺度。
|
||||||
|
尺度1:在基础网络之后添加一些卷积层再输出box信息。
|
||||||
|
尺度2:从尺度1中的倒数第二层的卷积层上采样(x2)再与最后一个16x16大小的特征图相加,再次通过多个卷积后输出box信息.相比尺度1变大两倍。
|
||||||
|
尺度3:与尺度2类似,使用了32x32大小的特征图。
|
||||||
|
|
||||||
|
#### (2)更好的基础分类网络(类ResNet)和分类器darknet-53,见下图。
|
||||||
|
|
||||||
|
图7.4.29 基础网络Darknet-53
|
||||||
|
|
||||||
|
#### (3)分类器-类别预测:
|
||||||
|
YOLOv3不使用Softmax对每个框进行分类,主要考虑因素有两个:(1)Softmax使得每个框分配一个类别(score最大的一个),而对于Open Images这种数据集,目标可能有重叠的类别标签,因此Softmax不适用于多标签分类。(2)Softmax可被独立的多个logistic分类器替代,且准确率不会下降。分类损失采用binary cross-entropy loss。仿ResNet, 与ResNet-101或ResNet-152准确率接近,但速度更快.对比如下(准确率(top-1 误差、top-5 误差)、运算次数(/十亿)、每秒浮点数运算次数(/十亿),以及 FPS 值。):
|
||||||
|
表7.4.3主干架构的性能对比
|
||||||
|
|
||||||
|
检测结构如下:
|
||||||
|
|
||||||
|
图7.4.30
|
||||||
|
|
||||||
|
图7.4.31
|
||||||
|
从中看出,YOLOv3表现得不错。RetinaNet需要大约3.8倍的时间来处理一张图像,YOLOv3相比SSD变体要好得多,并在AP_50指标上和当前最佳模型有得一拼。YOLOv3在mAP@0.5及小目标APs上具有不错的结果,但随着IOU的增大,性能下降,说明YOLOv3不能很好地与ground truth切合。
|
||||||
|
边框预测:
|
||||||
|
|
||||||
|
图7.4.32带有维度先验和定位预测的边界框。我们边界框的宽和高以作为离聚类中心的位移,并使用Sigmoid函数预测边界框相对于滤波器应用位置的中心坐标。仍采用之前的logis其中cx,cy是网格的坐标偏移量,pw,ph是预设的anchor box的边长.最终得到的边框坐标值是b*,而网络学习目标是t*,用sigmod函数、指数转换。
|
||||||
|
|
||||||
|
### 7.4.9 YOLOv3模型优缺点
|
||||||
|
#### (1)优点
|
||||||
|
a) 快速,pipline简单;
|
||||||
|
b) 背景误检率低;
|
||||||
|
c) 通用性强。
|
||||||
|
YOLO对于艺术类作品中的物体检测同样适用。它对非自然图像物体的检测率远远高于DPM和RCNN系列检测方法。
|
||||||
|
|
||||||
|
#### (2)缺点
|
||||||
|
但相比RCNN系列物体检测方法,YOLO具有以下缺点:
|
||||||
|
a) 识别物体位置精准性差。
|
||||||
|
b) 召回率低。
|
||||||
|
在每个网格中预测两个box这种约束方式减少了对同一目标的多次检测(R-CNN使用的region proposal方式重叠较多),相比R-CNN使用Selective Search产生2000个proposal(RCNN测试时每张超过40秒),yolo仅使用7x7x2个。
|
||||||
|
|
||||||
|
|
||||||
md版本未编辑完
|
md版本未编辑完
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue