编者按:环信开源国内首本免费深度学习理论和实战专著《深度学习理论与实战:提高篇 》,内容涵盖听觉,视觉,语言和强化学习,七百多页详尽的理论和代码分析。本文节选自《深度学习理论与实战:提高篇 》一书,原文链接http://fancyerii.github.io/2019/03/14/dl-book/ 。作者李理,环信人工智能研发中心vp,有十多年自然语言处理和人工智能研发经验,主持研发过多款智能硬件的问答和对话系统,负责环信中文语义分析开放平台和环信智能机器人的设计与研发。

深度学习.jpg

本文介绍目标检测的常见算法之一:Fast R-CNN。

Fast R-CNN

R-CNN虽然效果不错,但是它有如下缺点:

  • 训练需要很多步骤,从卷积网络到SVM再到Bounding box回归,整个Pipeline过于复杂

  • 训练需要大量时间和空间 我们需要为每个类别都训练一个二分类的SVM,而且由于SVM的特征来自于卷积网络的全连接层,这是两个模型不好集成,因此需要把卷积网络的特征写到磁盘上,这要占用大量磁盘空间和IO时间

  • 预测的速度慢,对于每个候选区域,我们都要用卷积网络提取特征(基本相对于一次forward计算),即使有一个GPU,预测一个图片平均都需要47s的时间

R-CNN慢的最主要原因就是每个候选的区域都要用CNN提取特征,而事实上它们都是这张图片的一部分,很多计算都是重复的。此外训练慢的原因在于有多个模型——卷积网络、SVM和Bouding box回归。下面我们介绍Fast R-CNN的模型结构以及它是怎么来解决上述的问题的。

潮科技行业入门指南 | 深度学习理论与实战:提高篇(8)——目标检测算法Fast R-CNN

Fast R-CNN架构图

Fast R-CNN的架构如上图所示。它的输入是一张图片和一些候选区域,对于输入的图片,它会使用多层的卷积网络得到一些特征映射(Feature Map),然后对于每一个候选区域,一个RoI(Region of Interest)的pooling层会从这些特征映射中选取与之对应的区域,通过pooling得到固定大小的特征,再把这些特征输入全连接层。然后再从全连接层分出两个分支,一个用softmax进行分类,另一个分支直接输出4个数值,分别表示Bounding box的位置。

Fast R-CNN对于每个图片只用CNN提取一次特征,然后不同的候选区域会”共享“这个特征,只是使用RoI来选择空间位置上与之对应的部分,这样预测的时候速度会比R-CNN快很多。其次,Fast R-CNN完全抛弃了SVM和一个单独的Bouding box回归。而是使用统一的一个深度神经网络来同时输出分类和Bouding box的位置,因此是一个统一的训练过程,从而避免复杂的Pipeline和提高训练速度。

RoI pooling层

因为不同的候选区域的尺寸是不同的,所以对应的Feature map的尺寸也是不同,因此使用max pooling把它们变成固定大小(H=7 x W=7)的特征。每个RoI都对应原始Feature map的某个区域,比如某个RoI的大小是(h=21, w=21),那么我们就可以使用(h/H=3, w/W=3)的max pooling层把它变成(H, W)的特征。当然如果某个RoI的大小是(14, 14),那么我们就需要(2, 2)的max pooling,从而保证最终的输出是(7, 7)。这样通过不同大小的RoI,我们的模型就可以检查不同大小的目标对象。

预训练

和R-CNN类似,Fast R-CNN也可以使用图片分类(而不是目标检测)的数据来预训练。预训练完成后我们再fine-tuning,把最后一个pooling层换成RoI层,把1000类的softmax换成N(目标检测的类别数)+1(其它对象或者背景)。此外再加上4个预测Bounding Box的输出,这就有两个损失函数,这是典型的multi-task学习问题,后面我们会介绍它的损失函数。这样这个模型学习出来的特征既要考虑分类的准确率,也同时要考虑回归的准确率。而之前的R-CNN里的特征只考虑分类,而Bounding box回归是单独的一个模块,而且它的输入就是CNN的特征,这个是在分类训练完成后就固定了的,Bounding box回归是不能调整它的。

Multi-task Loss

对于每一个候选区域,它的真实类别是u(0代表不是任何目标物体),它的真实bounding box是t^u。而模型预测的分类是一个概率分布p=(p0,p1,…,pK)p=(p0,p1,…,pK),模型预测的bouding box是v。因为候选区域的大小不是固定的,因此这里的bounding box都是相对候选区域的位置,我们只要理解它是和候选区域大小无关的一种相对位置就行了,感兴趣的读者可以参考R-CNN论文的附录部分。最终的loss为:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(8)——目标检测算法Fast R-CNN

其中:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(8)——目标检测算法Fast R-CNN

潮科技行业入门指南 | 深度学习理论与实战:提高篇(8)——目标检测算法Fast R-CNN

这个损失是计算预测的x,y,w,h与真实的L1L1距离,只不过加了一点平滑:

潮科技行业入门指南 | 深度学习理论与实战:提高篇(8)——目标检测算法Fast R-CNN

改进效果

模型的效果对于指标mAP有6%的提高,而训练速度是原来的18倍,预测速度是原来的169倍,对于大的模型,预测也只需要0.3秒。

潮科技行业入门指南 | 深度学习理论与实战:提高篇(8)——目标检测算法Fast R-CNN

训练和预测速度对比