【论文阅读笔记】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通常使用从低分辨率图像到高分辨率图像的迁移学习,而语义分割的最佳框架必须在高分辨率图像运行。因此我们需要:-
更relaxed和general的search space
我们需要设计一个更弹性和通用的搜索空间,用来捕捉更高的分辨率带来的结构变化(architectural variations) -
更有效的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
- 我们是首次将NAS从图像分类扩展到密集图像预测的尝试之一
- 我们提出了一个网络级的架构搜索空间,它可以增强和补充已经得到深入研究的单元级架构搜索,并对网络级和单元级架构进行更具挑战性的联合搜索。
- 我们开发出一个可微的连续公式,它可以在两级分层架构上进行有效搜索,在单个GPU上只需3天。
- 在Cityscapes上,未经ImageNet预训练的情况下,我们的模型显著优于FRRN-B和GridNet,经过ImageNet预训练的情况下,我们和其他最先进模型的表现相当。在PASCAL VOC 2012 和ADE20K上,我们最好的模型也优于几个当前最先进的模型。

2.related work
3.Architecture Search Space 架构搜索空间
本节介绍我们的两级分层结构搜索空间(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讲的外部网络级,我们基于对许多流行设计的观察和总结提出了一种新颖的搜索空间。
3.1 Cell Level Search Space 单元级搜索空间
我们将一个单元(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。
3.2. Network Level Search Space 网络级搜索空间
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。
语义分割网络的共同点
-
The spatial resolution of the next layer is either twice as large, or twice as small, or remains the same.
下一层的空间分辨率要不然是这层的2倍,或者二分之一,或者不变 -
The smallest spatial resolution is downsampled by 32.
最小的空间分辨率被下采样到32
我们的Network level search space
基于上面总结出来的语义分割网络的共同点,我们提出了下图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_i和I^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。(设置不相交集合是为了防止过拟合)优化在以下二者之间交替进行:
- Update network weights w by∇_wL_{trainA} (w,α,β)
- 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算法可以有效地解码该路径,如我们的实现一样。
