AutoGAN-Distiller: Searching to Compress Generative Adversarial Networks
综述
对生成式对抗网络GAN进行压缩的研究最近很热门,因为人们对于把GAN部署到移动设备上做图像翻译、增强或者编辑之类的需求日益旺盛。无论如何,其他深度学习模型的压缩效果都不差,但GAN的压缩——主要是生成器的压缩仍处在起步阶段。现存的GAN压缩算法一般只对有特殊Loss的GAN结构起作用(缺少泛化能力)。受到最近深度压缩领域AutoML的启发,我们把AutoML引入GAN压缩中,提出了AutoGAN-Distiller架构,简称AGD。始于对经过特殊设计的搜索空间的研究,AGD对多种生成器结构都有效果,只需给定计算资源的约束条件,想要多少算力的消耗。这一研究被原始的GAN模型所引导,通过知识蒸馏来实现,最终完成压缩。AGD是全自动的,单稳态的,普适性的。(单稳态意味着它不需要训练好的鉴别器)。我们在两种具有代表性的GAN任务中验证了AGD的价值:图像生成和图像超分辨率。AGD的效果比现在的其他方法都更有竞争力。代码已经开源了:https:// github.com/TAMU-VITA/AGD
1. 引言
在许多场景——像是图像风格转化或者图像编辑又或者图像增强,GAN的发展都令人瞩目。这些应用场景一般的工作流程是把训练好的生成器部署在一些计算能力不算强的平台上,比如在手机APP里做图像风格迁移或者超分辨率重构。然而,就像其他深度学习模型一样,GAN的生成器需要吃很大的内存,对算力要求很高,大部分移动设备一跑就嗝屁了,举个例子来说,大名鼎鼎的CycleGAN模型跑一张256*256像素的小图片,需要做54GFLOPs的运算,即使能跑完,也毫无用户体验可言。
为了消弭这一差距,一个自然而然的想法是借助于模型压缩技术。主流的模型压缩方法都把注意力放在深度的图像分类或者语义提取方面,很难拓展到GAN的压缩领域——这里专指压缩GAN生成器。这主要是因为它们学到的对应关系很脆弱,而且GAN训练的稳定性问题一直没有得到真正的解决。我们知道的,只有一种叫做at the time of submission的GAN压缩算法,它主要关注于对有循环一致性Loss的GAN进行压缩,具体一点,对双向的生成器都做了压缩。尽管结果不赖,但他们的研究成果想要拓展到其他GAN还是有难度的,而且,现有的压缩算法本质上是基于剪枝的,而很多像是量化、知识蒸馏或者AutoML还未得到足够的重视。另加一点,现有算法的压缩过程必须有训练好的判别器相配合,但在实际场景中,这压根儿不现实:几乎所有的应用场景都只用到了生成器,判别器一般都被delete掉了。
此篇论文想要做的是显著地推动GAN压缩方向研究的边界,我们寄希望于最先进的压缩算法,包括AutoML和知识蒸馏,并使用了一些通用技术,保证我们的方法对于各种各样的GAN生成器都是有效的。研究成果是一种架构,我们命名为AutoGAN-Distiller,AGD,它是首个将AutoML引入GAN压缩的架构。AGD建立在经过了专门设计的高效的生成器的搜索空间上,使用最先进的GAN的知识来完成不同的任务,而后,在目标压缩比(计算资源压缩约束)下执行有区分度的神经网络结构搜索,从而在知识蒸馏的指导下让GAN的生成质量不至于下降。AGD不对GAN的结构、Loss的形式、判别器的可用性做多余的假设,用在CycleGAN或者其他没有循环一致性损失的GAN上都是可行的。我们用AGD做了两个移动设备上常见的场景测试:非配对的图像翻译(用到了CycleGAN),和超分分辨率(用到了编解码GAN),在两项测试中,AGD的效果都是现在这些方法里最好的。
2. 相关工作
2.1 AutoML:神经网络结构搜索
作为一种AutoML里最出色的细分领域,神经网络结构搜索(NAS)从数据中总结出最佳的神经网络结构以代替人工。截至目前,NAS方法已经在多种任务中得到了应用。
把NAS引入GAN模型是很有挑战性的,因为训练稳定性上的不足,以及直观的效果衡量方式的缺失。2019年,Gong等人才第一次将NAS架构加入到GAN中,做的工作主要是从随机噪声中用无条件的方式(这里的无条件是无附加条件,unconditional)生成图像。他们用了一种多级的搜索策略,用RNN控制器+增强学习方法在生成器结构的搜索空间里搜索。然而,目前的NAS+GAN的架构并不完美,原因如下:
Gong等人的架构搜索顺序是从零开始,没有训练好的模型提供一些先验,而且,搜索中也没有加入对计算资源的限制。因此,他们的方法严格意义上不能算是一种“压缩”,也没有很强的从受过训练的高性能GAN里进行知识提取的能力。
Gong的方法之应用在从噪声中合成低分辨率,而且是小尺寸图像的GAN模型中,一般是六层生成器,跑32*32大小的CIFAT-10的图像。没考虑image-to-image的情况。但,我们真正想要的是一种高分辨率的,image-to-image的GAN压缩结果。
2.2 模型压缩
随着在算力不佳的平台上不是深度学习模型的需要,学界有很多压缩方法,用来降低模型复杂性,主要是三种思路:知识蒸馏、剪枝和量化。
知识蒸馏于2015年出现,通过模仿以模型生成的软标签,把知识转移到另一个模型上,因为相当于获得了一定的先验知识,因此,可以降低后一个模型的计算复杂度。
剪枝是通过一个阈值,删除不太重要的权重的操作,可以让模型权重更稀疏。一般而言,这种方法的操作过程都是类似的:把模型剪小,再重新训练以保证效果——并不断迭代这一过程。
量化则是改变权重和激活的浮点表示法,除了用标量代替浮点数外,还可以用向量来做参数共享,实现对模型结构的压缩。
最近,又有人指出,传统的以来专家设计搜索空间的方法结果好不了,因此AutoML的思想大行其道——虽然他们大都关注于对深度的分类器进行压缩。
2.3 GAN和GAN压缩
GAN的部分文章很多,我也做了一些,因此不再翻译,但总的来说,因为作者想研究的是非配对的图像转化,因此主要关注在CycleGAN和编解码器GAN。
尽管有了很多对GAN的改进办法,GAN固有的复杂性高的特点仍让它在移动平台的部署困难重重。现有的算法只能对有循环一致性损失的CycleGAN及其变体进行压缩,而且需要有判别器的参与。
和我们齐头并进的是Li等人的工作,他们也尝试将AutoML引入GAN压缩,主要关注在生成器的通道宽度,效果不错,相比之下,我们的AGD主要区别在于能够针对具有不同属性的任务对搜索空间进行自定义,不仅关注通道宽度,还将运算符类型纳入考虑范围,并能应用在超分辨率任务中。