(1)第一篇将NAS应用于语义分割的工作来自Google DeepLab团队,作者是Liang-Chieh Chen等一众大佬。DeepLabv3+的准确度已经达到一定高度,继而DeepLab团队将研究方向转移到了NAS上面。基于和DeepLab同样的encoder-decoder结构, 在【5】工作中,作者将encoder结构固定,试图搜索出一个更小的 ASPP,用到的搜索策略是random search。在Cityscapes达到82.7% mIoU,在PASCAL VOC 12上达到87.9%,结果尚可但搜索时间过慢,用370个GPU搜索一周才得到网络,这也限制了该方法的普及。
(2)同样来自DeepLab团队,Auto-DeepLab【6】相比之前的工作在搜索效率上有显著的提升。这都归功于它gradient-based的搜索策略DARTS【9】。与上一篇相反,Auto-DeepLab的目标是搜索encoder,而decoder则采用ASPP。从实验结果来看,Auto-DeepLab的准确度和DeepLabv3+相差不多,但是FLOPs和参数数量却是DeepLabv3+的一半。后文我们会具体介绍DARTS和Auto-DeepLab。
(3)Customizable Architecture Search (CAS)【4】是来自京东AI Lab的工作。在搜索空间定义了三种cell,分别是normal cell,reduction cell和新提出的multi-scale cell。其中multi-scale cell是ASPP 的功能类似,所以CAS的搜索区间是针对全部网络。在搜索策略上依然采用DARTS。值得一提的是,在搜索网络的时候,CAS不仅考虑accuracy,还考虑了每个模块的GPU time,CPU time,FLOPs和参数数量。这些属性对于实时任务至关重要。所以CAS在Cityscapes上的准确度是72.3%,虽然没有很高,但是在TitanXP GPU的速度fps达到108。
(4)来自Adeleide大学的Vladimir Nekrasov团队在light weight模型上面做了大量工作,而最近也将研究重心转到了NAS上面。在【7】中,作者采用RL的搜索策略搜索decoder。众所周知RL非常耗时,所以作者采用知识蒸馏策略和Polyak Averaging方法结合提升搜索速度,而这正是本文的major contribution。
(5)最后一篇来自商汤发布在Artix的文章,采用图神经网络GCN作为搜索策略,试图寻找cell之间最优的连接方式【8】。和CAS类似,在本文中每个模块的性能如latency也在搜索评估时考虑进去。在Cityscape上GAS达到73.3%mIoU,在TitanXP GPU的速度是102fps。
简单总结一下上述工作,我们可以发现NAS在语义分割上的应用还算成功,并且很多团队已经在NAS上进行研究探索。尤其在DARTS类似的高效搜索策略提出后,个人研究者和小团队也可以构建自己的NAS网络,而不受制于GPU资源。
DARTS: Differentiable Architecture Search通常来说搜索空间是一个离散的空间,在DARTS中【9】,作者将搜索空间定义成一个连续空间,这样一来搜索到的每一个cell都是可导的,可以用stochastic gradient descent来优化。所以DARTS相比RL并不需要大量GPU资源和搜索时间。在实验中,DARTS成功用在了CNN模型的图像分类和RNN模型的language modelling任务上。感恩作者提供了源代码 https://github.com/quark0/darts ,它可以为我们搭建自己NAS模型提供很好的基础。
正如前文中提到,多数的NAS网络会搜索不同类型的可重复的cell,然后将cell连接起来构成神经网络。这个cell通常用directed acyclic graph(DAG)表示。一个DAG cell包含N个有顺序的node,每一个node可以看成在它前面所有node的结合(就像feature map一样是一个latent representation)。从node i 到node j的连接是某一种operation记作o(i,j). 每一个cell都有两个input node和一个output node。下图中是一个DARTS展示的reduction cell。我们可以看到cell k 有两个input nodes 分别是c_{k-1}和c_{k-2} (来自cell k-1和cell k-2的output node),cell k包含了4个immediate nodes和一个output node c_{k} 。o(i,j)是边缘上的max_pool_3x3,max_pool等。理论上从一个node到相邻的node可以有很多种operation,所以搜索最优网络结构也可以看成是选择每一个边上最佳的operation。