深度学习计算机视觉实战
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 目标检测One-stage算法

使用Two-stage算法进行检测时会先进行候选框的提取,这个过程耗时很长,因此目标检测领域另外一条研究路线就是直接使用CNN提取特征预测目标的类别和位置,这就是One-stage算法,常见的有YOLO系列算法和SSD算法。

2.2.1 YOLO系列算法

YOLO系列算法是目标检测One-stage算法的代表,从YOLO-v1到YOLO-v3,算法在不断改进。本节将介绍YOLO系列算法。

1.YOLO-v1算法

YOLO-v1 提出将目标检测作为一个单一的回归问题,从图像中直接预测目标的类别和位置,运行速度较R-CNN系列算法提高了很多。YOLO-v1的流程如图2.8所示。

图2.8

由图2.8可以看到,YOLO-v1的流程分为三步:

(1)将输入图像的大小调整到448×448;

(2)在图像上运行卷积网络;

(3)通过模型的置信度使用非极大值抑制得到检测类别。

YOLO-v1所有的训练和测试代码论文作者都已经开源,一些预训练的模型也可以被下载。

YOLO-v1的模型结构如图2.9所示。

图2.9

如图2.9所示,YOLO-v1将输入图像划分为S×S网格,若被检测对象的中心落入某个网格单元,则该网格单元负责检测该对象。每个网格单元预测包围框和这些框的置信度分数。每个Bounding Box(包围框)预测5个值,xywh和confidence。(xy)坐标表示相对于网格单元的边界的包围框的中心,宽(w)和高(h)的预测是相对于整个图像的,置信度(confidence)的预测即预测框与标注框之间的IOU(交并比)。另外,每个网格还需要预测C个类别的概率(总共有C个类别,每个网格属于C个类别中的某一个的概率,因此是一个条件概率)。

网络架构采用类似于GoogLeNet模型的结构,将其中的Inception结构替换为1×1卷积,后接3×3卷积的形式,整个网络包含24个卷积层和2个全连接层,如图2.10所示。还有一个快速版本,使用9层卷积,其他的参数都是相同的。

图2.10

论文作者在PASCAL VOC数据集上评估YOLO,使用的网格数为7×7,每个网格预测2个包围框。PASCAL VOC有20个标签类,所以预测类别为20个,因此可以计算得到最后的预测输出张量是7×7×30。

提示:每个网格预测20个类别,每个包围框预测5个参数,有2个包围框,所以最终结果为20+5×2=30。

YOLO-v1 虽然运行速度较快,但是有局限性。因为每个网格单元只预测两个框,并且只预测一个类别,所以这种设计对于小物体(如鸟群)的检测会出现漏检情况。如果想深入了解YOLO-v1,可以参考论文You Only Look OnceUnifiedReal-Time Object Detection

2.YOLO-v2算法

在 YOLO-v1 之后,论文作者发表了 YOLO 系列算法的第二篇论文 YOLO9000BetterFasterStronger,文中提出了两种YOLO的升级模型:YOLO 9000和YOLO-v2。

YOLO-v2使用了一种新颖的、多尺度的训练方法,相同的YOLO-v2模型可以在不同大小的输入下运行,更容易在速度和精度之间做一个权衡,达到了state-of-the-art的效果。

针对YOLO-v1检测位置的误差较Faster R-CNN大,以及相较于Region Proposal方法召回低的问题,YOLO-v2做了较大的改进。YOLO-v2没有采用更大、更深的网络来提升性能,而是简化了网络,并且采取了一些策略。下面对几个重要的策略进行介绍。

(1)Batch Normalization(批归一化)。使用Batch Normalization之后,就不需要其他形式的正则化(如Dropout)了。在添加Batch Normalization后mAP至少提高了2%,这个操作是目前网络搭建中的常用操作,可以有效地减少过拟合,提高收敛速度。

(2)High Resolution Classifier(分类网络高分辨率预训练)。YOLO-v2在ImageNet上使用了10个epochs(轮次),以448×448的输入对分类网络进行微调,然后将该网络用于目标检测任务的微调,论文作者使用这种方法让mAP提高了近4%。

(3)Convolutional with Anchor Boxes(带矩形框的卷积)。论文作者使用该方法让准确率略有下降,但是召回率有了极大的提升,召回率的增加给模型提供了更大的提升空间。

(4)Dimension Clusters(使用聚类选择矩形框)。论文作者采用K-means聚类方法而非手动的方法来选择最佳的初始boxes。

(5)Direct Location Prediction(直接预测位置而非偏移量)。在YOLO中使用矩形框发现模型不稳定,主要体现在使用矩形框预测(xy)的位置。为了解决这个问题,在YOLO-v2中直接预测相对于网格单元位置的位置坐标。

(6)Fine-Grained Features(细粒度特征)。借鉴Faster R-CNN和SSD使用不同尺度特征图做预测的方法,YOLO-v2添加了一个passthrough层,从26×26的特征图上提取特征,这样就可以使用深层特征预测大的物体,使用浅层特征预测小的物体。

(7)Multi-Scale Training(多尺度训练)。YOLO-v2中没有使用全连接层,因此不用输入固定的尺寸。为了适应不同尺寸图像的预测,YOLO-v2采用了不同尺寸的训练图像,每10个epochs换一个训练尺寸,输入图像的尺寸范围为320~608,使用的采样大小是32。

采用策略的效果如图2.11所示。

图2.11

为了让模型运行得更快,YOLO-v2也做了一些改进,如分类网络的主干网络不使用VGG-16,而是使用新的网络Darknet-19,该网络包括19个卷积层和5个最大池化层。Darknet-19的网络设计细节如图2.12所示。

图2.12

Darknet-19主要使用3×3卷积,在每个池化操作之后通道数都会加倍。在NIN网络之后使用全局平均池化,在3×3卷积之间使用1×1卷积压缩特征表示,还使用批归一化来稳定训练,加快收敛速度,对模型进行正则化。

论文作者的YOLO系列算法的第二篇论文中提出了一种目标检测与分类联合训练的方法,该作者使用该方法同时在COCO数据集和ImageNet数据集上训练YOLO9000。较之于YOLO-v1,YOLO9000检测的类别数量大大增加,可以检测超过9000个类别。

检测和分类模型的联合训练机制:若数据为检测数据,则计算位置损失和分类损失的总损失,将其进行反向传播;若数据为分类数据,则只反向传播分类损失。该作者使用WordTree解决不同数据集之间的类别问题,使用该方法训练 YOLO9000。其中,WordTree 是一个分层的树,父节点是高级别的类别,子节点是更加细化的类别。

3.YOLO-v3算法

在 YOLO-v2 之后,该作者继续做了一些改进,发表在论文 YOLOv3An Incremental Improvement中。在mAP相似的情况下,YOLO-v3的运行速度比其他目标检测算法的运行速度快很多,如图2.13所示。

图2.13

YOLO-v3在YOLO-v2的基础上加深了网络,网络结构使用Darknet-53(见图2.14),虽然速度慢了,但是精度提升了。

图2.14

YOLO-v3 使用均方差损失预测包围框的坐标、宽和高,使用 Logistic 回归预测每个包围框的得分。YOLO-v3 使用多标签分类预测包围框中可能包含的类,使用 Logistic(而非 softmax)进行分类,在训练中使用二进制交叉熵损失(Binary Cross-Entropy)进行类预测。

YOLO-v3中融合了很多目标检测的技巧,如预测3种尺度的包围框,采用特征金字塔,使用小尺寸特征图检测大的物体,大尺寸特征图检测小的物体。另外,如图2.14所示,Darknet-53还使用了残差网络的设计。

2.2.2 SSD算法

SSD(Single Shot MultiBox Detector)是One-stage算法的另一个代表,很多算法都是使用SSD作为主干网络。SSD创新地提出了多尺度特征图检测的思想,即使用大尺度的特征图检测小的物体,小尺度的特征图检测大的物体,这一思想在后来的目标检测网络设计中都有应用,极大地提高了检测精度。SSD还采用了不同尺度和长宽比的先验框,直接使用CNN做检测而非在全连接网络之后做检测,这些使SSD算法在PASCAL VOC和COCO数据集上达到了state-of-the-art的效果。

注意:先验框即Prior Boxes,在不同的算法或论文中其名称可能不同,表示相同含义的名称还有Anchors、Anchor Boxes。

SSD的网络框架如图2.15所示。

图2.15

由图2.15可以看出,SSD的网络训练只需要输入图像和对应的Ground Truth Boxes(GT Boxes,标注框),在不同的特征图上使用不同长宽比的检测框,每个检测框预测对象的类别和形状的偏移,模型的损失定义为位置损失与分类损失的加权和。

在SSD的预测类别中还考虑了背景,将背景作为一个单独的类别,若检测类别为c,则SSD会预测c+1个类别的置信度。SSD预测检测框位置是预测其中心坐标、宽和高,实际上这4个预测值是相对于先验框的偏移。因此,对于c个类别(含背景),使用k种长宽比、尺寸为m×n的特征图,最终会有(c+4)×k×m×n个输出。

图2.16所示为论文作者提出的SSD的网络结构及YOLO的网络结构。

图2.16

对比图2.16中的SSD与YOLO的网络结构可以看出,SSD采用了多尺度特征图做检测且直接使用卷积网络检测。在该作者的SSD算法的论文中SSD使用的主干网络是VGG-16,在VGG-16之后增加了几种尺度的特征图(38、19、10、5、3、1)用于检测,SSD的输入有300×300和512×512两种。

SSD的先验框匹配与YOLO不同,YOLO中的GT Boxes的中心在哪个单元格,其就选择该单元格中IOU最大的先验框用于预测,在SSD匹配时首先选择IOU最大的先验框作为正样本,然后在剩下的样本中选取IOU大于阈值的样本作为正样本。若一个先验框与多个GT Boxes的IOU大于阈值,则只匹配IOU最大的那个GT Boxes。

为了增强模型的鲁棒性,该作者采用了数据增强,如翻转图片、随机裁剪图片、随机采集图片区域等方法。图2.17所示为SSD与其他算法在PASCAL VOC 2007数据集上的对比效果。

图2.17

由图2.17可以看出,SSD300是唯一的能够实时检测且准确率超过70%的算法,SSD512也接近实时的速度,SSD较YOLO在准确率上提升较大,较Faster R-CNN在速度上提升极大。

该作者对使用数据增强等技巧对模型提升的效果做了一个对比,如图2.18所示。

图2.18

由图2.18可以看出,数据增强对提升模型效果有很大的作用,将mAP提高了8.8%,该技术在算法研发中非常常用,尤其是在数据集有限的情况下。

如果想深入研究SSD,可以参考论文SSDSingle Shot Multibox Detector

SSD系列还有一些算法,如FSSD、DSSD等。SSD使用不同层次的特征进行检测,但是这些特征很难融合,FSSD采用一个轻量的特征融合模块解决了这个问题,显著提升了SSD的性能,不过运行速度有轻微的减缓,细节可以参考论文FSSDFeature Fusion Single Shot Multibox Detector。DSSD解决了SSD的小物体检测效果不佳等问题,其主干网络使用Residual-101(SSD使用 VGG-16),可以提取更深层次的特征;DSSD 使用反卷积模块而非双线性插值进行上采样。DSSD的更多细节可以参考论文DSSDDeconvolutional Single Shot Detector