网络结构搜索 (NAS: Network Architecture Search)

NAS Definition

  1. 基于搜索策略,并结合约束条件 (如accuracy、latency),在搜索空间内 (set of candidate operations or blocks)探索最优网络结构、或组件结构 (如detector的backbone、FPN);
  2. 高效的NAS算法,通常是Trade-off between data-driven and experience-driven,data-driven实现高效率、自动化搜索,experience-driven减小搜索空间、降低过拟合;
  3. Proxy task: 评估搜索结果 (searched architecture);

 

NAS-FCOS: Fast Neural Architecture Search for Object Detection

  • GitHub (PyTorch): https://github.com/Lausannen/NAS-FCOS
  • Related work:
    • NAS-FPN: https://github.com/DetectionTeamUCAS/NAS_FPN_Tensorflow
    • FCOS: https://github.com/tianzhi0549/FCOS
      • Per-pixel prediction in bbox without prior anchors,类似于EAST OCR检测;
      • Multi-level prediction (FPN),消除bbox重叠区域内的ambiguity;
      • Center-ness for filtering out the low-quality bboxes;

网络结构搜索 (NAS: Network Architecture Search)_第1张图片

 

  • Motivation:
    • 为one-stage anchor-free detector (well known FCOS)搜索FPN与detection head:
      • 如何从backbone选取特征,并如何构造FPN、输出multi-level features;
      • 当FPN features共享同一个head时,如何确定head的结构;
  • Search Space:
    • 将FCOS视作encoder-decoder架构,backbone表示encoder,FPN与head表示decoder;
    • FPN由一系列basic block (bbt)构成,对backbone提取特征C={C2, C3, C4, C5}、以及bbt输出特征执行merge操作:
      • basic block (bbt)基本结构:

        网络结构搜索 (NAS: Network Architecture Search)_第2张图片

      • candidate ops(搜索空间):

        网络结构搜索 (NAS: Network Architecture Search)_第3张图片

      • aggregation包括element-wise sum与concat+conv(搜索空间);
      • high-level low resolution feature通过bilinear interpolation完成上采样;
      • 连续实施7次bbt,最后三个bbt输出的features,作为FPN的P3、P4与P5;对于没有被使用的融合特征,累加到P3、P4与P5;P5再通过后续两次降采样获得P6与P7;
    • Head由连续6个Convolution构成,candidate ops除包含FPN ops之外,也包括基本的1x1与3x3 conv(搜索空间);用Group Norm替换Batch Norm;

网络结构搜索 (NAS: Network Architecture Search)_第4张图片

  • Search Strategy:
    • 将train-set划分为meta-train与meta-val,分别训练与评估搜索的architecture;
    • 采用渐进式策略,先搜索FPN,再搜索head,减轻搜索负担;
    • 搜索、训练时,固定backbone,并预先缓存backbone输出特征C,提高搜索效率;
    • 以LSTM-based controller作为predictor,以当前配置序列与reward作为输入,优化训练predictor;predictor输出下一时刻的架构配置;具体参考:
      • Fast Neural Architecture Search of Compact Semantic Segmentation Models via Auxiliary Cells;
      • GitHub (PyTorch): https://github.com/DrSleep/nas-segm-pytorch
    • Evaluation metric:采用negative loss sum替代AP,作为reward,节省AP计算时间:

网络结构搜索 (NAS: Network Architecture Search)_第5张图片

  • 搜索结果:
    • 结构示例:

      网络结构搜索 (NAS: Network Architecture Search)_第6张图片

    • AP on COCO:

      网络结构搜索 (NAS: Network Architecture Search)_第7张图片

    • Search time:~4 days using 8 V100 GPUs;

 

DetNAS: Backbone Search for Object Detection

  • GitHub (PyTorch): https://github.com/megvii-model/DetNAS
  • GitHub (PyTorch): https://github.com/megvii-model/ShuffleNet-Series/tree/master/DetNAS
  • Related Work:
    • 目前的NAS主要针对ImageNet分类网络;基本方法包括RL-based (NASNet, MNASNet)、Gradient-based (DARTS)与Evolutionary-based等;
    • 目标检测网络的训练方法:
      • ImageNet预训练基础网络;然后迁移至目标检模型作为backbone,确保特征提取能力:
        • 预训练尺度与目标检测尺度最好能适配,具体可参考SNIP (An Analysis of Scale Invariance in Object Detection):https://arxiv.org/abs/1711.08189
      • 或者直接在目标检测数据集上train from scratch:
        • 通常需要在较大规模的dataset(如COCO)上训更多的epoches,小规模检测集无法确保特征提取能力(如VOC);
        • 训练图片较大的情况下,Batch size通常比较小,需要采用sync-BN或group-norm;
  • New Method for Backbone Search:
    • 避免了ImageNet上NAS、以及ImageNet预训练的costly过程,具体包括如下三个步骤(总体为one-shot NAS策略):

      网络结构搜索 (NAS: Network Architecture Search)_第8张图片

      网络结构搜索 (NAS: Network Architecture Search)_第9张图片

      • Step-1:首先在ImageNet上训练SuperNet(包含了所有可选的candidate subnet);采用path-wise方式,每次迭代只选中一个network path用于forward/backward;
      • Step-2:以SuperNet为backbone,在目标检测任务上fine-tuning;同样采用path-wise策略;且使用SyncBN,跨GPU完成BN,确保BN的精度;
      • Step-3:采用遗传算法完成best-backbone的搜索;需要从训练集采样500张图片,重新统计sub-net的BN层的running mean/variance;
    • SuperNet的架构(搜索空间):

      网络结构搜索 (NAS: Network Architecture Search)_第10张图片

      网络结构搜索 (NAS: Network Architecture Search)_第11张图片

      • 如表1所示,包括large与small两种搜索结构,都包含5个stage;
      • c1/c2、n1/n2表示每个stage的通道数与block数;
      • 除第0个stage外,large的第1、2、3、4个stage包含的building block数分别为8、8、16、8;small则是4、4、8、4;
      • 基本building block为shuffenet-v2 block;除第0个stage外,每个stage的第一个block负责降采样(stride=2);
      • 可搜索参数为kernel size(3、5、7或xception);在SuperNet预训练时,这四个参数对应的block并排放置,在每个train iteration随机选中其中一个block,用以构造特定的network path;
      • large与small的搜索空间大小分别为4^40与4^20;
    • Evolutionary Search:
      • 完成SuperNet的ImageNet预训练、与检测集上的fine-tuning之后,随机选定一组subnet集合(满足约束条件,FLOPS低于阈值);
      • 然后在验证集上评估每个subnet,以AP作为fitness(以COCO为例);
      • 选择Top-P个subnets用于mutation与crossover,且各占一半用于生成next generation:
        • crossover:每个block从两个parents中随机选择(相同block位置);
        • mutation:每个block随机替换为supernet中的一个(相同block位置);
      • 生成next generation subnets需要满足约束条件(FLOPS或inference speed);
      • 上述过程迭代指定步骤,最终获得best backbone;
      • 相比较而言,RL方法需要仔细设计reward,gradient方法需要精心设计loss function;
    • 实验结果:

      网络结构搜索 (NAS: Network Architecture Search)_第12张图片

      网络结构搜索 (NAS: Network Architecture Search)_第13张图片

 

XNAS: Neural Architecture Search with Expert Advice

  • DARTS:
    • GitHub (PyTorch):https://github.com/quark0/darts
    • GitHub (TensorFlow): https://github.com/NeroLoh/darts-tensorflow

      网络结构搜索 (NAS: Network Architecture Search)_第14张图片

  • XNAS:
    • GitHub (PyTorch): https://github.com/NivNayman/XNAS
    • 基于Prediction with Expert Advice (PEA),将NAS看成在线选择任务 (online selection task);
    • 将DARTS的搜索空间 (candidate operations),看成多个单独的expert子空间;
    • 结合指数化梯度 (Exponentiated Gradient)和Wipe-out机制,有效缓解Hard pruning,同时逐步减小搜索空间 (平滑过渡),可进一步简化问题复杂度、并降低过拟合;
    • 允许不同的expert group设置不同的learning rate (multi learning rates);
    • 有向无环图 (directed acyclic graph):

      网络结构搜索 (NAS: Network Architecture Search)_第15张图片

    • 实验结果:

      网络结构搜索 (NAS: Network Architecture Search)_第16张图片

你可能感兴趣的:(深度学习,模型压缩)