AAAI 2020 | 华为诺亚最新提出SM-NAS搜索算法详解

2020-03-14  本文已影响0人  DevWeekly

微信关注公众号【平凡而诗意】,原创技术文章第一时间推送。

本文介绍一篇AAAI 2020上由华为诺亚方舟实验室与中山大学提出的一种用于神经网络架构搜索的一种算法Structural-to-Modular Neural Architecture Search for Object(SM-NAS),该算法是一种两阶段的网络架构搜索算法,它在速度和准确性方面均得到了明显的提升,下面就来详细介绍一下这个算法的详细内容。

摘要

一个先进的目标检测模型,往往由多个模块组成,

在这多个模块中会有不同的设计和结构,如何选择一个模块的结构并且将多个模块组合到一起使得模型的计算成本和准确性达到均衡,是一个非常关键的问题。

神经网络架构搜索(Neural architecture search, NAS)在寻找最优方案中具有很大的潜力。因此,也有很多研究者将NAS应用于网络架构的搜索中。

然而,目前存在的NAS主要将注意力集中在单个模块的搜索上,而而忽略了整个系统的均衡。

在这篇论文中,作者提出了一种两阶段的搜索策略,称之为 Structural-to-Modular NAS(SM-NAS),它既要考虑模块之间组合的最优,也要考虑单个模块级别的最优。换句话说,它不仅要考虑怎么把骨干、特征融合、RPN、RCNN head这些模块最优的组合到一起,还要考虑如何选择出一个最优的骨干架构、最优的特征融合结构。

SM-NAS包括两个阶段:Structural-level(结构级搜索)和Modular-level(模块级搜索)。

Structural-level:结构级搜索阶段的首要目标是找到不同模块的有效组合。

Modular-level:模块级搜索阶段优化每个特定的模块,从Pareto front中优化出更快的特定任务下的网络。

除此之外,SM-NAS在在搜索backbone网络时,选择没有与训练的模型,而是通过一种从头开始的快速训练方式。

通过上述改进,SM-NAS在准确性和推理时间方面都得到了一定的提升,与FPN、Mask R-CNN这些经典模型相比,在推理时间相同的条件下,mAP均得到了提升。

改进点:

1.采用结合结构级和模块级的两阶段搜索策略。2.训练backbone时不基于预训练模型。3.在模块级别搜索过程中采用了GN+WS的策略。

名词解释:

SM-NAS介绍

image.png

如上图所示,本文提出一种从粗略到细致的的搜索策略,它包含两个搜索阶段,

结构级搜索:图中上面部分•模块级搜索:图中下面部分

下面分别介绍一些这两个搜索阶段。

阶段一:结构级搜索

目前主流的目标检测系统可以分解为4个部分,

搜索算法在最优解的搜索过程中首先需要设定一个搜索空间,这样才能明确在具体哪个范围内进行搜索。

对于结构级的搜索,作者考虑将各种流行的、最新的模块放入搜索空间,这样就可以涵盖很多主流的架构设计。

Backbone

Backbone的搜索空间包含了常用的骨干网络,例如, ResNet18,ResNet34,ResNet50,ResNet101,ResNeXt50,ResNeXt101,MobileNet V2。

特征融合

在目标检测模型中,通常用来自不同层的特征预测不同大小的对象,特征融合的目的就是将这些不同层的特征进行融合,以达到更好的预测效果。

特征融合模块的搜索空间包括无FPN(原始的Faster RCNN)和具有不同输入和输出功能级别FPN。

Region proposal network (RPN)

RPN用于在每个特征图上生成一些前景建议区域,用于后面的预测过程,RPN的搜索空间包括无RPN、有RPN、有导向锚点的RPN。

RCNN head

RCNN head用于预测最终的分类结果,它的搜索空间包括常规的RCNN head、RetinaNet head、cascade RCNN。

Input Resolution

输入分辨率与精度和速度密切相关,因此,在分辨率的搜索空间加入不同的分辨率,旨在找出最优匹配的分辨率,包括512*512、800*600、1080*720、1333*800。

然后,计算每种模块组合使用的推理时间,结合在验证数据上的准确性,生成一个Pareto front(可以理解为解的结合)。

阶段二:模块级搜索

在阶段一,生成了一个解集合(Pareto front),可以从中选择几种具有不同模块组合结构,这一步属于粗搜索过程。在阶段二,就需要更加细致的搜索,需要搜索每个模块具体的结构。

如上图下半部分所示,阶段二backbone搜索空间包括5个阶段,每个阶段代表由相同特征分辨率组成的结构,第1 ~ 5阶段的空间大小以因子2逐渐进行下采样。

在细致的模块搜索过程中,将采用与第一阶段结果中相同的块设置,例如,如果阶段一的解集合中采用的是ResNet101,那么阶段二将采用residual块作为细致搜索的解空间。

训练阶段

经过二个阶段的搜索,已经选择出一个基础的架构,接下来要做的就是训练并评估架构的性能。

SM-NAS在训练阶段选择了没有预训练的骨干网络,这是由于如果采用预训练的骨干网络,那么评估骨干网络的性能就变得比较麻烦,因此,在本文中采用的是从头开始进行重新训练的方式。

由于归一化(normalization)在从零开始训练的过程中起着至关重要的作用,它能够有效的提升训练的速度。因此,受到这个启发,本文在归一化方面进行着手,做了两点改进:

Group Normalization

批处理时的批次大小越小,那么批量归一化越不准确。然而,在训练过程中由于GPU消耗较高,批次往往非常小,这样导致批处理评估非常不准确。为了解决这个问题,本文采用Group Normalization代替批量归一化,因为Group Normalization对批次的大小不敏感。

Weight Standardization

从头开始训练会带来一个问题,误差波动和梯度爆炸,批量归一化已经被证明是一种解决该问题的有效方案。但是,前面已经提到,批量归一化对批次大小较为敏感,因此,在本文中采用Weight Standardization对卷积层的权重进行标准化,用于平滑误差曲线。

从本文后续的实验可以看出,应用GN和WS两项技术之后,在训练过程可以采用更大的学习率,这样训练速度会得到显著的提升,进而就允许我们从头开始训练网络。

实验结果

image.png

文中在COCO数据集上对一些优秀的模型(state-of-the-art)进行了对比和验证,从上图中可以看出,经过SM-NAS搜索的架构在速度、准确性方面都具有一点的优势。

推荐阅读

上一篇下一篇

猜你喜欢

热点阅读