『量子位』GPU、CPU统统能加速,朱俊彦团队提出GAN压缩算法:计算量减20倍

边策鱼羊发自凹非寺
量子位报道|公众号QbitAI
现如今 , GAN的效果已经越来越出神入化 。
比如英伟达的GauGAN , 就如神笔马良 , 能够凭空造物:
『量子位』GPU、CPU统统能加速,朱俊彦团队提出GAN压缩算法:计算量减20倍
文章图片
不过 , 从无化有背后 , 计算量也相当惊人 。
『量子位』GPU、CPU统统能加速,朱俊彦团队提出GAN压缩算法:计算量减20倍
文章图片
以GauGAN为例 , 与MobileNet-v3这样的识别CNN相比 , 参数只相差1个数量级(4.2:93)计算强度却高出了2个数量级(0.5:281) 。
如此一来 , 交互式部署就变得很困难 。
更直白来说 , 想要把模型部署到手机、平板这样的终端 , 换装变脸转性别 , 这些边缘设备——吃不太消 。
为了解决这一问题 , 来自MIT、Adobe研究院和上海交通大学的团队琢磨出了一个通用压缩框架 。
有多强?
一举将CycleGAN的计算量减少了20倍以上 , 将GauGAN的计算量减少了9倍 , 简笔画到实物图的pix2pix也能驾驭 , 效果却未差分毫 。
『量子位』GPU、CPU统统能加速,朱俊彦团队提出GAN压缩算法:计算量减20倍
文章图片
值得一提的是 。 论文已入选CVPR2020 , 代码也已开源 。
作者团队也星光璀璨 , 一作是来自上海交通大学ACM班的本科生李沐阳 , CycleGAN的作者朱俊彦则亲身参与、指导 。
GAN压缩算法
压缩GAN , 并不像压缩其他CNN模型那样容易 。
主要原因:GAN的训练动力学高度不稳定 , 生成器与鉴别器之间存在巨大的结构差异 , 让我们很难使用现有的CNN压缩算法 。
为了解决这个问题 , 作者提出了针对有效生成模型量身定制的训练方案 , 并通过神经架构搜索(NAS)进一步提高压缩率 。
GAN压缩的框架如下图所示 , 主要分为3个部分:
『量子位』GPU、CPU统统能加速,朱俊彦团队提出GAN压缩算法:计算量减20倍
文章图片
1、给定一个预训练的teacher生成器G’ , 通过蒸馏的方法获取一个较小的“once-for-all”的student生成器G , 其中包括通过权重共享的所有可能通道数 。 在每个训练步骤中选择不同的通道数ck 。
2、从“once-for-all”生成器中提取许多子生成器 , 并评估其性能 , 无需重新训练 , 这也是被叫做once-for-all(一劳永逸)的原因 。
3、最后 , 根据给定的压缩率目标和性能目标 , 选择最佳子生成器 , 进行微调 , 并获得最终的压缩模型 。
构造合适的损失函数
因为GAN压缩算法要面对CycleGAN、pix2pix还有GauGAN , 这些模型的损失函数都不尽相同 , 所以需要构造一个新的损失函数 。
统一未配对和配对学习
有些GAN是通过配对数据集学习的 , 有些则是非配对数据集 。 因此要在损失函数中加入第二项 , 统一非配对和配/p>
『量子位』GPU、CPU统统能加速,朱俊彦团队提出GAN压缩算法:计算量减20倍
文章图片
继承teacher鉴别器
尽管目标是压缩生成器 , 但是鉴别器会存储学习到GAN知识 , 因为它会发现当前生成器的缺点 。
因此 , 我们采用相同的鉴别器架构 , 使用teacher预训练的权重 , 并与我们的压缩生成器一起对鉴别器进行微调 。 预训练的鉴别器可以指导student生成器的训练 。
『量子位』GPU、CPU统统能加速,朱俊彦团队提出GAN压缩算法:计算量减20倍
文章图片
初始化的student鉴别器D使用来自teacher鉴别器D’的权重 。
中间特征蒸馏
蒸馏是CNN中广泛使用的模型压缩方法 。
CNN模型压缩的一种广泛使用的方法是知识蒸馏 。 通过匹配输出层的logits , 可以将知识从teacher模型转移到student模型 , 从而提高后者的表现 。