NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection

论文:
NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection
代码:
(1)非官方:https://github.com/DetectionTeamUCAS/NAS_FPN_Tensorflow
(2)论文中:https://github.com/tensorflow/tpu/tree/master/models/official/retinanet https://github.com/tensorflflow/models/tree/master/research/object detectio(页面找不到)
摘要:
在这项工作中,我们的目标是学习更好的目标检测特征金字塔网络架构。我们采用了神经架构搜索,在一个包含所有跨尺度连接的新的可扩展搜索空间中发现了一个新的特征金字塔架构。
背景:
FPN是用于目标检测的生成金字塔特征的典型模型结构,虽然FPN简单有效,但是可能不是最佳的结构设计。设计特征金字塔结构最大的挑战是它巨大的设计空间,不同尺寸的特征的可能连接的数量随着层数的增加呈指数增加。最近,神经体系结构搜索算法[44]证明了在巨大的搜索空间中有效发现用于图像分类的性能最高的体系结构的有希望的结果。为了获得他们的结果,Zoph [45]提出了一种模块化的体系结构,该体系结构可以重复并堆叠成可变尺寸的体系结构。受[45]的启发,我们提出了生成金字塔形表示形式的可变尺寸体系结构的搜索空间

本文所做工作:
我们工作的关键贡献在于设计搜索空间,该空间将覆盖所有可能的跨尺度连接以生成多尺度特征表示。 在搜索过程中,我们旨在发现一种原子结构,该原子结构具有相同的输入和输出特征级别,并且可以重复应用。 模块化搜索空间使搜索金字塔体系结构变得可管理。 模块化金字塔式架构的另一个好处是随时随地的功能对象检测(或“提前退出”)。
这个搜索结构,命名为NAS-FPN,在建立目标检测网络结构上提供很大的灵活性。NAS-FPN 与各种骨干模型配合得很好,如 MobileNet、ResNet、AmoebaNet。它为移动端模型和高准确率模型在速度和准确率方面提供了更好的权衡。在相同的推理时间下,与 RetinaNet 框架中的 MobileNetV2 骨干模型相结合,它的性能超过当前最佳的移动检测模型(与 MobilenetV2 结合的 SSDLite)2 个 AP。与强大的 AmoebaNet-D 骨干模型结合,NAS-FPN 在单个测试规模中达到了 48.3 的 AP 单模型准确率。其检测准确率超过了 Mask RCNN,同时使用的推理时间更少。几种模型的具体结果如图 1 所示。
NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection
本文方法:
本文中的方法基于 RetinaNet 框架 [23],因为该框架简单、高效。RetinaNet 框架有两个主要的组成部分:一个骨架网络(通常是当前最优的图像分类网络)和一个特征金字塔网络(FPN)。本文算法的目标是为 RetinaNet 框架发现更好的 FPN 架构。图 2 所示为 RetinaNet 架构。
NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection
图 2:带有 NAS-FPN 的 RetinaNet。在本文中,特征金字塔网络将由神经架构搜索算法来搜索。骨干网络和用于类和框预测的子网络遵循 RetinaNet [23] 中的原始设计。FPN 的架构可以堆叠N次,以获得更高的准确率。
为了找到更好的 FPN,本文利用「Neural architecture search with reinforcement learning」中提出的神经架构搜索(NAS)框架。NAS 利用强化学习训练控制器在给定的搜索空间中选择最优的模型架构。控制器利用子模型在搜索空间中的准确度作为奖励信号来更新其参数。(NAS是一种自动调参的方法,调的不是训练超参数,是网络架构超参数:比如网络多少层、每层都是什么算子、卷积层里的过滤器大小等等。它可以在许多许多不同的架构里,快速找到性能最好的那一个。)因此,通过反复试验,控制器逐渐学会了如何生成更好的架构。
研究者还为 FPN 设计了一个搜索空间来生成特征金字塔表征。为了实现 FPN 的可扩展性,研究者强制 FPN 在搜索过程中重复 N 次,然后连接到一个大型架构中。他们将这一特征金字塔架构命名为 NAS-FPN。
(1)结构搜索空间:
在我们的搜索空间中,一个特征金字塔网络包含许多“融合单元”,是要把输入的不同尺度/分辨率的特征层,合并到RetinaNet的表征里去。
特征金字塔网络的设计:
一个特征金字塔网络把多个尺寸的特征层作为输入并且生成相同尺寸的输出特征层,如上图2所示。我们采用RetinaNet中的设计–使用每组特征图层中的最后一层作为第一个金字塔网络的输入,输出是特征金字塔网络的输入。使用作为输入特征的是5个尺寸–{C3, C4, C5, C6, C7},对应的特征步长是{8, 16, 32, 64, 128}个像素。C6和C7是使用C5进行最大池化(步长分别为2和4)上采样生成。输入特征然后被传递进一个由一系列融合单元(引入了跨尺寸连接)构成的金字塔网络中。这个金字塔网络然后输出增强的多尺寸的特征表征 {P3, P4, P5, P6, P7}。
融合单元:
在目标检测以前的工作中一个重要的发现就是融合不同尺寸的特征是必要的,跨尺寸连接允许模型结合有强烈语义信息的高级别特征和高分辨率的低级别特征.
我们提出融合单元,是FPN的基础构建模块,把任意两个输入特征层融合为一个输出特征层.在我们的实现中,每个融合单元都采用两个输入特征层,应用处理操作,然后把这两个特征层结合到一起生成一个想要尺寸的输出特征层.一个FPN中包含N个不同的融合单元,在搜索时N会给定.在一个融合单元中,所有的特征层有相同的滤波器数量.构建一个融合单元的过程如下图3所示.
NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection
如何构建融合单元由一个控制RNN做出决定.这个RNN控制器选择任意两个特征层和一个二元操作去把它们结合为一个新的特征层,其中所有特征层可能有不同的分辨率.每个合并单元具有4个由不同的softmax分类器进行的预测步骤:
1、 从所有feature随机选择一层特征 hi
2、 从所有feature随机另外选择一层特征 hj
3、 选择输出的特征分辨率
4、 选择一个二元操作去结合hi和hj并且生成步骤3中要求的特征尺寸
在步骤4中,我们设计了两个二元操作–求和和全局池化,如图4所示.这两个操作被选择的原因是由于它们的方便和有效性,它们没有引入任何额外的训练参数.如果需要的话,在应用二元操作之前,输入特征层会用最近邻上采样或者最大池化调整为输出分辨率.融合特征层之后会跟着RELU,一个3*3卷积和一个BN层.
NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection
金字塔网络的输入特征层构成一个融合单元的初始列表.在步骤5中,新生成的特征层被添加到已经存在的输入候选的特征层中并且成为下一个融合单元的新的候选者.在结构搜索过程中会有许多有相同分辨率的候选特征层.为了减少搜索结构时的计算量,我们在步骤3中避免选择步长为8的特征.最后,最后5个融合单元被设计去输出特征金字塔{P 3 , P 4 , P 5 , P 6 , P 7 }.
(2)深度监督的任意时刻的目标检测
用堆叠金字塔网络的变尺度的NAS-FPN的优点之一是可以在任何给定金字塔网络的输出处获得特征金字塔表示。此属性启用随时检测,可以在提早退出时生成检测结果。我们可以在所有中间金字塔网络之后附加分类器和Box回归头,并在深度监督下对其进行训练.在推断过程中,模型不需要完成所有金字塔网络的前向传递。 相反,它可以停在任何金字塔网络的输出处并生成检测结果。当需要考虑计算资源或等待时间时,这可能是理想的属性,并提供了可以动态决定分配多少计算资源来生成检测的解决方案。
实验:
RNN控制器
使用Proximal Policy Optimization算法(Policy Gradient是一种基于策略迭代的强化学习算法,直接地通过采样状态、动作、奖励,然后期望直接最大化奖励的期望。)进行训练.控制器采样具有不同结构的子网络.
在学习过程中会产生需要子网络(child network),训练这些子网络会得到它们的精度值,用这些精度值来作为强化学习中的“奖励”(reward),然后计算Policy Gradient来更新控制器,这样的话,在下次迭代中,控制器有更大的概率产生一个精度更高的结构。
探索特征金字塔结构(使用100个tpu)
图7中我们绘制了在RL训练中带有逐渐增高的奖励的NAS-FPN结构.f是我们在实验中使用的结构.
NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection
图中每个点代表一个特征层.在相同排的特征层之间具有相同的分辨率.分辨率自底向上降低.箭头指示内部层之间的连接.输入层在左侧.金字塔网络的输入用绿色圆圈标记,输出用红色圆圈标记。

最后的网络结构(f):
NAS-FPN: Learning Scalable Feature Pyramid Architecture for Object Detection5个输入层(黄色)和5个输出层(蓝色)
GP代表全局池化
R-C-B代表ReLU-Conv-BatchNorm