Advertisement

【论文阅读笔记】Auto-DeepLab: Hierarchical Neural Architecture Search for Semantic Image Segmentation

阅读量:

abstract

本文首次将NAS(Neural Architecture Search 神经架构搜索)应用到语义分割领域。

NAS
在大规模图像分类问题上,NAS定义的神经网络框架的表现已经超过了人类设计的网络。在本篇论文中我们研究把NAS应用于语义分割上。

motivation
现有的研究通常注重搜索可重复的单元结构,而用人工设计外部网络结构来控制空间分辨率变化。这样做简化了搜索空间,但对于表现出有许多网络级架构变体(network level architectural variations)的密集图像预测(dense image prediction)而言,该方法越来越成问题。
【具体的在introduction中有介绍】

our work
因此我们除了搜索单元级结构(cell level structure)之外还要搜索网络级架构(network level structure),从而形成分层架构搜索空间(hierarchical architecture search space)。我们提出包含许多流行网络设计的网络级搜索空间,并且提出一个公式进行基于梯度的高效架构搜索( efficient gradient-based architecture search)。

1. introduction

  • NAS应用到语义分割的必要性
    在本文,我们研究了将神经架构搜索用于图像语义分割的方法,图像语义分割是计算机视觉中的重要任务,它将诸如“person”或“bicycle”等标签分配给输入图像的每个像素。

  • 简单将NAS应用到图像分类的idea是移植到语义分割是不可行的
    在图像分类中,NAS通常使用从低分辨率图像到高分辨率图像的迁移学习,而语义分割的最佳框架必须在高分辨率图像运行。因此我们需要:

    1. 更relaxed和general的search space
      我们需要设计一个更弹性和通用的搜索空间,用来捕捉更高的分辨率带来的结构变化(architectural variations)

    2. 更有效的architecture search technique
      我们需要用一个更有效的结构搜索技术,因为更高的分辨率需要更多的计算

  • 当前NAS都遵循CNN的两层分级设计,只在内部单元级别使用自动搜索,外部网络级别使用手动设计
    【这部分对应abstract的introduction】
    现有CNN设计通常遵循两层分级结构(two-level hierarchy):外部网络级(outer network level)和内部网络级(inner cell level)。outer network level控制空间分辨率变化,inner cell level控制特定的层级的计算(layer-wise computations)。
    当前NAS绝大部分工作都是遵循CNN的这两种分级设计,但是只在inner cell level使用自动搜索,outer network level还是手动设计。这种有限的搜索空间对dense image prediction而言是一个问题,因为dense image prediction对空间分辨率变化很敏感。

  • 我们的工作
    我们提出了类似网格的网络级搜索空间(trellis-like network level search space),它增强了[93]中首次提出的常用单元级搜索空间,从而形成分层架构搜索空间(hierarchical architecture search space)。
    [93]论文链接http://openaccess.thecvf.com/content_cvpr_2018/papers/Zoph_Learning_Transferable_Architectures_CVPR_2018_paper.pdf
    我们的目标是专门学习可重复单元结构和网络结构的良好组合,以进行语义图像分割。

我们从NAS的可微分公式汲取灵感,并开发出了与分层架构搜索空间完全匹配的连续松弛的离散架构。这个分级架构搜索通过随机梯度下降进行。**当搜索终止时,最好的单元架构会被贪婪解码,最好的网络架构会有效的通过Viterbi算法解码。**我们直接在裁剪得到的Cityscapes[13] 321×321图像上进行架构搜索。该搜索十分有效,在单个P100 GPU上只需要花费3天时间。

  • contribution
  1. 我们是首次将NAS从图像分类扩展到密集图像预测的尝试之一
  2. 我们提出了一个网络级的架构搜索空间,它可以增强和补充已经得到深入研究的单元级架构搜索,并对网络级和单元级架构进行更具挑战性的联合搜索。
  3. 我们开发出一个可微的连续公式,它可以在两级分层架构上进行有效搜索,在单个GPU上只需3天。
  4. 在Cityscapes上,未经ImageNet预训练的情况下,我们的模型显著优于FRRN-B和GridNet,经过ImageNet预训练的情况下,我们和其他最先进模型的表现相当。在PASCAL VOC 2012 和ADE20K上,我们最好的模型也优于几个当前最先进的模型。
    在这里插入图片描述

2.related work

本节介绍我们的两级分层结构搜索空间(two-level hierarchical architecture search space)。

  • 3.1: inner cell level 内部单元级
    对于3.1讲的内部单元级,我们复用[93, 47, 62, 49]中采用的方法,从而和以前的工作保持一致。
    [93]Learning transferable architectures for scalable image recognition.
    [47] Progressive neural architecture search.
    http://openaccess.thecvf.com/content_ECCV_2018/papers/Chenxi_Liu_Progressive_Neural_Architecture_ECCV_2018_paper.pdf
    [62] Regularized evolution for image classifier architecture search
    [49]Darts: Differentiable architecture search.

  • 3.2:outer network level 外部网络级
    对于3.2讲的外部网络级,我们基于对许多流行设计的观察和总结提出了一种新颖的搜索空间。

我们将一个单元(cell)定义为一个小的全卷积模块,通常会重复多次去形成整个神经网络。具体来说,一个 cell 是 由B 个块 (blocks)组成的一个有向无环图(directed acyclic graph)。
每个块是双分支结构,将两个输入张量(tensor)映射到一个输出tensor。cell l中的block i可能会用一个5元组(I_1,I_2,O_1,O_2,C)定义,其中(I_1,I_2)∈I_i^l是input tensor的选择,(O_1,O_2)∈O是应用到相关input tensor的layer types的选择,C ∈ C是组合两个单独分支的outputs的方法,用于形成该block的output tensor H_i^l。cell 的output tensor H^l是所有block的output tensor{H_1^l,H_2^l,...,H_B^l}的简单级联concatenation。

  • input tensors I_i^l 的集合
    可能的input tensors I_i^l 的集合,包含前一个cell的输出H^{l-1},和前前cell的输出H^{l-2},和当前cell的前面的block的输出{H_1^l,H_2^l,...,H_i^l}因此我们在cell中加入的block越多,下一个block的潜在输入源就有更多的选择

  • layer types的集合 O
    可能的layer types的集合 O由以下8个操作operators组成,这些操作在现代CNN中都很普遍:
    • 3 × 3 depthwise-separable conv
    • 5 × 5 depthwise-separable conv
    • 3 × 3 atrous conv with rate 2
    • 5 × 5 atrous conv with rate 2
    • 3 × 3 average pooling
    • 3 × 3 max pooling
    • skip connection 跳跃连接
    • no connection (zero) 无连接

  • combination operators C 的集合
    对于可能的组合操作C的集合,我们只采用元素级的相加element-wise addition。

pre-defined pattern (以前的Network level

之前Network level不是architecture search的一部分,一旦cell的结构被找到,整个网络就用pre-defined pattern定义。这个pre-defined pattern就是通过把reduction cell插入到normal cells里,reduction cells 就是将空间分辨率除以2并将滤波器的数量乘以2的单元,normal cells就是保持feature tensor的空间分辨率的单元。
这种一直下采样的策略在图像分类中行得通,但是对dense image prediction时空间分辨率很重要因此不能用pre-defined pattern。

语义分割网络的共同点

  1. The spatial resolution of the next layer is either twice as large, or twice as small, or remains the same.
    下一层的空间分辨率要不然是这层的2倍,或者二分之一,或者不变

  2. The smallest spatial resolution is downsampled by 32.
    最小的空间分辨率被下采样到32

基于上面总结出来的语义分割网络的共同点,我们提出了下图1左的Network level search space:网络开始是两层stem结构,每个枝干将空间分辨率降为原来的两倍。然后有L层未知空间分辨率的单元,空间分辨率最大是被下采样3倍,最小被下采样到32。我们的目标是在这L层网格中找到一条好的路径。
在这里插入图片描述

我们的search space和前人的不同之处

除了cell level architecture,我们的工作还会搜索网络级架构。

4.Methods

4.1. Continuous Relaxation of Architectures

4.1.1 Cell Architecture

cell architecture 我们复用的是darts的。下图是darts那篇论文的图,我们首先来看下这张图再来继续auto deeplab 4.1.1部分。
darts的方法基于continuous relaxation,它实现的是一个cell内部的自动化搜索:
(a)这些灰色的小方块都是一个cell内的block,我们不知道通过哪些操作把这些block连起来。
(b)原本一个个操作都是离散的,我们为了实现可微分的搜索,也就是为了使搜索空间连续,我们将特定操作的确定的选择放宽到所有可能操作上的softmax,也就是我们给两个block之间的全部操作都赋予权重。假设我们有三个操作,我们把每个节点都通过上述方法和它所有的前驱节点相连,就得到了下图(b)
©然后我们就通过梯度下降对权重进行优化,最后对每个节点取argmax也就是哪个操作的α值最大,就选这个操作。
(d)选了最大的α后的操作后,我们就得到了(d)的路径
在这里插入图片描述
有了上面对darts cell level search的了解后,我们再看auto deeplab:
在这里插入图片描述
每个block的output tensorH^l_iI^l_i中的所有hidden states相连(也就是第i个block的所有前驱节点:前一层cell的输出、前前一层cell的输出和当前cell前面的block):
在这里插入图片描述
O_{j->i}就是连接两个block之间的操作,我们用它的continuous relaxation\overline{O}_{j->i}来估计O_{j->i}(也就是给每个操作赋予权重):
在这里插入图片描述
下式(5)为cell level update的式子:
在这里插入图片描述

4.1.2 Network Architecture

4.1.1的cell level 都是复用的darts的,Network level是我们自己提出的,简单的来说思想还是一样的也给网络间赋予权重,也就是对图一左的所有灰色箭头赋予权重,这样Network level update就是下式:
也就是黄色的输出都是由前面三个红色的得到的
在这里插入图片描述
可以看出\beta控制outer Network level,因此取决于spatial size 和layer index。
\beta控制\alpha的集合,但指向与\beta同一架构的\alpha既不依赖于空间大小也不依赖于层索引。
在这里插入图片描述
看图1我们可以发现,ASPP被添加到第L层的每个空间分辨率上(相应的调整孔洞率)。他们的输出会双线性上采样(bilinear upsample)到原始分辨率,然后求和以产生预测。
在这里插入图片描述

4.2 Optimization

因为我们在4.1已经做了continuous relaxation,现在不同的hidden states已经是可微分的了。我们就能用梯度下降。我们采用darts的first-order,把training data分成两个不相交的集合trainA和trainB。(设置不相交集合是为了防止过拟合)优化在以下二者之间交替进行:

  1. Update network weights w by∇_wL_{trainA} (w,α,β)
  2. Update architecture α, β by∇_{\alpha,\beta} L_{trainB} (w,α,β)

其中loss function L 是在语义分割小批量上计算的交叉熵(cross entropy)。

4.3 Decoding Discrete Architectures 解码离散结构

优化完也就是我们学到了\alpha, \beta的值,然后在这一部分就讲我们是怎么decode the discrete cell architecture的。

cell architecture

先说cell level怎么做,我们首先为每个块保留两个最强的前驱(隐藏状态j到i的强度是max_k,O^k \neq _{zero} \alpha^k_{j->i}),然后通过argmax选最可能的操作。

Network architecture

\beta**值可以被解释成跨越不同“时间步长”(层数)的不同“状态”(空间分辨率)之间的“迁移概率”。**很直观地说,我们的目标是从头到尾找到“最大概率”的路径。使用经典的Viterbi算法可以有效地解码该路径,如我们的实现一样。

全部评论 (0)

还没有任何评论哟~