边策 鱼羊 发自 凹非寺
量子位 报道 | 公众号 QbitAI

现如今,GAN的效果已经越来越出神入化。

比如英伟达的GauGAN,就如神笔马良,能够凭空造物:

不过,从无化有背后,计算量也相当惊人。

以GauGAN为例,与MobileNet-v3这样的识别CNN相比,参数只相差1个数量级(4.2 : 93)计算强度却高出了2个数量级(0.5 : 281)。

如此一来,交互式部署就变得很困难。

更直白来说,想要把模型部署到手机、平板这样的终端,换装变脸转性别,这些边缘设备——吃不太消。

为了解决这一问题,来自MIT、Adobe研究院和上海交通大学的团队琢磨出了一个通用压缩框架。

有多强?

一举将CycleGAN的计算量减少了20倍以上,将GauGAN的计算量减少了9倍,简笔画到实物图的pix2pix也能驾驭,效果却未差分毫。

值得一提的是。论文已入选CVPR 2020,代码也已开源。

作者团队也星光璀璨,一作是来自上海交通大学ACM班的本科生李沐阳,CycleGAN的作者朱俊彦则亲身参与、指导。

GAN压缩算法

压缩GAN,并不像压缩其他CNN模型那样容易。

主要原因:GAN的训练动力学高度不稳定,生成器与鉴别器之间存在巨大的结构差异,让我们很难使用现有的CNN压缩算法。

为了解决这个问题,作者提出了针对有效生成模型量身定制的训练方案,并通过神经架构搜索(NAS)进一步提高压缩率。

GAN压缩的框架如下图所示,主要分为3个部分:

1、给定一个预训练的teacher生成器G’,通过蒸馏的方法获取一个较小的“once-for-all”的student生成器G,其中包括通过权重共享的所有可能通道数。在每个训练步骤中选择不同的通道数ck

2、从“once-for-all”生成器中提取许多子生成器,并评估其性能,无需重新训练,这也是被叫做once-for-all(一劳永逸)的原因。

3、最后,根据给定的压缩率目标和性能目标,选择最佳子生成器,进行微调,并获得最终的压缩模型。

构造合适的损失函数

因为GAN压缩算法要面对CycleGAN、pix2pix还有GauGAN,这些模型的损失函数都不尽相同,所以需要构造一个新的损失函数。

统一未配对和配对学习

有些GAN是通过配对数据集学习的,有些则是非配对数据集。因此要在损失函数中加入第二项,统一非配对和配对学习的损失:

继承teacher鉴别器

尽管目标是压缩生成器,但是鉴别器会存储学习到GAN知识,因为它会发现当前生成器的缺点。

因此,我们采用相同的鉴别器架构,使用teacher预训练的权重,并与我们的压缩生成器一起对鉴别器进行微调。预训练的鉴别器可以指导student生成器的训练。

初始化的student鉴别器D使用来自teacher鉴别器D’的权重。

中间特征蒸馏

蒸馏是CNN中广泛使用的模型压缩方法。

CNN模型压缩的一种广泛使用的方法是知识蒸馏。通过匹配输出层的logits,可以将知识从teacher模型转移到student模型,从而提高后者的表现。

最后完整的损失函数为:

其中超参数λrecon和λdistill控制后两项的权重。

高效的生成器设计空间

选择设计良好的student体系结构对于最终进行知识蒸馏至关重要。

简单地缩小teacher模型的通道数并不能产生紧凑的student模型,一旦计算量的压缩比超过4倍,性能就会开始显著下降。

预测可能的原因之一是,现有的生成器采用的图像识别模型,可能不是图像合成任务的最佳选择。

下面,作者展示了如何从现有的cGAN生成器中获得更好的架构设计空间,并在该空间内执行神经架构搜索(NAS)。

卷积分解和层敏感性

近来高效的CNN设计,广泛采用了卷积分解的方法,证明了在性能与计算之间的权衡取舍。作者发现使用分解的卷积,也有利于cGAN中的生成器设计。

然而实验表明,将分解直接应用于所有卷积层,将大大降低图像质量。但是可以只有某些层分解会降低性能,而某些层则更鲁棒。

在ResNet生成器中,resBlock层消耗了大部分模型参数和计算成本,而几乎不受分解的影响。相反,上采样层的参数要少得多,但是对模型压缩相当敏感,适度的压缩也会导致FID大幅下降。

NAS自动裁剪通道

现在的生成器在所有层上都使用手动设计,因此通道数会有冗余。为了进一步压缩模型,作者使用通道修剪自动选择生成器的通道宽度减少冗余,可以二次减少计算量。

对于每个卷积层,可以从8的倍数中选择通道数,可以平衡MAC和硬件并行性。

解耦训练和结构搜索

为了解决该问题,作者遵循one-shot神经体系结构搜索方法的最新工作,将模型训练与体系结构搜索分离 。

先训练一个支持所有通道的“once-for-all”网络,具有不同数量通道的每个子网络都经过同等训练,可以独立运行,子网络与“once-for-all”网络共享权重。

在训练了“once-for-all”网络后,通过直接在验证集上评估每个候选子网络的性能来找到最佳子网。由于“once-for-all”网络经过权重共享的全面训练,因此无需进行微调。

通过这种方式,我们可以将训练和搜索生成器体系结构分离开来:只需要训练一次,在无需进一步训练的情况下评估所有可能的通道配置,并选择最佳的作为搜索结果。

实验结果

最终实验结果如下:

GAN压缩将乘法累加运算(MAC)的数量减了9~21倍。

这种方法将CycleGAN的计算量减少了20倍以上,将pix2pix的计算量减少了9倍,将GauGAN的计算量减少了9倍。

而且不仅能在GPU上加速,在各种各种各样的CPU上也可以实现加速,而且加速效果在CPU上更明显。

代码开源

现在,这一GAN压缩框架已经开源,数据集和预训练模型均可下载。

如果想要上手亲测,需要的环境是:

  • Linux

  • Python 3

  • CPU or NVIDIA GPU  + CUDA CuDNN

同时,研究团队也准备了CycleGAN和pix2pix两个版本的PyTorch Colab,在线即可体验。

试试用CycleGAN把普通马变斑马的效果。

首先把GAN Compression这个项目克隆下来:

!git clone https://github.com/mit-han-lab/gan-compression.git

下载测试数据集:

!bash datasets/download_cyclegan_dataset.sh horse2zebra

下载预训练模型:

python scripts/download_model.py —model pix2pix —task edges2shoes-r —stage full
python scripts/download_model.py —model pix2pix —task edges2shoes-r —stage compressed

下面,就是见证换皮的时刻:

效果差距大不大,肉眼看了不算,还是要计算一下FID(用于评估GAN生成图像的质量,分数越低代表与真实图像越相似)。

该项目提供了几个数据集的真实统计信息:

bash ./datasets/download_real_stat.sh horse2zebra A
bash ./datasets/download_real_stat.sh horse2zebra B

测试的结果显示,原始CycleGAN的FID是65.687,压缩后,模型的FID是65.312,两者差距不大。

但在MAC、参数规模和延迟方面,压缩模型都要远远小于原始模型。

上海交大本科生一作,朱俊彦&韩松加持

论文一作,是上海交通大学ACM班大四本科生李沐阳。

2019年7月-今年1月,李沐阳师从MIT韩松教授和朱俊彦教授,在MIT Han Lab担任研究助理,这篇CVPR 2020论文就是在此期间产出。

目前,李沐阳的研究兴趣在于机器学习、系统以及计算机图形学等领域,他计划在今年毕业之后继续读博深造。

科研之余,李沐阳同学的一大爱好是唱歌。在他的个人主页上,他还分享了自己的唱吧链接,以及个人MV。

论文的另外几位作者,分别是:

Ji Lin,本科毕业于清华大学,现于MIT就读博士。

丁尧尧,同样是来自上海交大ACM班的本科生,和李沐阳同在MIT Han Lab担任研究助理,受韩松教授指导。

Zhijian Liu,本科毕业于上海交大,现于韩松教授门下就读博士。

朱俊彦,李沐阳的指导者之一。这位青年大牛无需多介绍,CycleGAN作者,国际顶会ACM SIGGRAPH 2018最佳博士论文奖获得者。现为Adobe研究科学家,今年秋天将回归母校CMU担任助理教授。

韩松,MIT EECS助理教授,同样是AI业界大牛。博士毕业于斯坦福大学,曾斩获ICLR 2016最佳论文、FPGA 2017最佳论文。

传送门

论文地址:
https://arxiv.org/abs/2003.08936

GitHub:
https://github.com/mit-han-lab/gan-compression

李沐阳个人主页:
https://lmxyy.me

Colab:
https://colab.research.google.com/github/mit-han-lab/gan-compression/blob/master/cycle_gan.ipynb
https://colab.research.google.com/github/mit-han-lab/gan-compression/blob/master/pix2pix.ipynb

作者系网易新闻·网易号“各有态度”签约作者

3月25日晚20:00,地平线BPU算法负责人罗恒,将分享地平线BPU的设计与演进、MLPerf基准测试的理想性与局限性、提出当面AI芯片面临的机遇与挑战

戳下方二维码即可报名、加交流群~

今晚直播 | 地平线BPU重新定义极致效能

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

喜欢就点「在看」吧 !

朱俊彦团队提出GAN压缩算法:计算量减少20倍,生成效果不变,GPU、CPU统统能加速...相关推荐

  1. GAN模型计算量减少至1/9!MIT韩松团队提出GAN压缩法,已开源

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :机器之心 AI博士笔记系列 ...

  2. 韩松、朱俊彦等人提出GAN压缩法:算力消耗不到1/9,现已开源

    本文转自机器之心. 选自arXiv 作者:Muyang Li等 机器之心编译 机器之心编辑部 GAN 也可以大幅压缩,MIT 韩松团队的最新研究让众多研究者们为之一振. 生成模型 GAN 是机器学习领 ...

  3. 朱俊彦团队推出首个基于内容的深度生成模型搜索算法!

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入-> CV 微信技术交流群 作者 | 李梅 转载自:AI科技评论  编辑 :陈彩娴 最近的生成 ...

  4. ICCV 2021 | CMU朱俊彦团队:用一张草图轻松创建GAN模型

    ©作者 | 杜伟.陈 来源 | 机器之心 CMU 助理教授朱俊彦团队的最新研究将 GAN 玩出了花,仅仅使用一个或数个手绘草图,即可以自定义一个现成的 GAN 模型,进而输出与草图匹配的图像.相关论文 ...

  5. GAN能生成3D图像啦!朱俊彦团队公布最新研究成果

    晓查 发自 凹非寺 量子位 出品 | 公众号 QbitAI GAN现在可以合成3D图像了! 最近,MIT计算机科学与AI实验室的朱俊彦团队,发表了一篇论文<Visual Object Netwo ...

  6. 3D图像生成和编辑研究成果大放送!朱俊彦团队放出两篇论文实现代码 | 资源...

    乾明 发自 凹非寺  量子位 报道 | 公众号 QbitAI 朱俊彦团队,一口气放出两篇论文的实现代码! 这两篇论文,都与3D图像有关,都被NeurIPS 2018大会收录了.朱俊彦在Twitter上 ...

  7. 朱俊彦团队最新论文:用GAN监督学习给左晃右晃的猫狗加表情,很丝滑很贴合...

    丰色 发自 凹非寺 量子位 报道 | 公众号 QbitAI GAN又被开发出一项"不正经"用途. 给猫狗加表情: 给马斯克加胡子: 不管视频中的脑袋怎么左晃右晃,这些表情都能始终如 ...

  8. 让你的代码量减少3倍!使用kotlin开发Android(四) kotlin bean背后的秘密

    上一篇我们介绍了缩短五倍的java bean,不知道你在看的时候有没有一种疑问捏? 本文同步自博主的私人博客wing的地方酒馆 再来回顾一下,两种代码的对比 public class User {pr ...

  9. ​多大分辨率图像做分类更适合?浙大华为国科大等提出Dynamic Resolution Network,降低计算量还提性能!...

    关注公众号,发现CV技术之美 ▊ 写在前面 为了获得更高的精度,深卷积神经网络(CNN)通常具有复杂的设计,具有许多卷积层和可学习的参数.为了减轻在移动设备上部署网络的成本,最近的工作开始研究在预定义 ...

最新文章

  1. 第一个python程序:定义,列表,元组,集合,求并集交集,键和值,运算符,缩进
  2. linux gstack pstack 进程运行堆栈查看工具
  3. 【iCore组合式双核心开发板教程】【快速使用手册】
  4. Spring中使用RedisTemplate操作Redis(spring-data-redis)
  5. STM32F10x之RCC
  6. 【机器视觉】 reset_fuzzy_measure算子
  7. 【多视图几何】TUM 课程 第2章 刚体运动
  8. php迭代器实例,PHP迭代器和生成器用法实例分析
  9. Coding the Matrix Week 0 作业
  10. 设置MYSQL数据库编码为UTF-8:
  11. c均值聚类matlab程序_聚类算法之kmeans算法
  12. dataframe 上下拼接_pandas DataFrame 的横向纵向拼接组合
  13. 159.majority element
  14. Go 原生插件使用问题全解析
  15. java求2到100内的素数_java学习日记-基础-列出2~100内的素数
  16. 人立方六度搜索的界面设计的来龙去脉
  17. 【现控理论】(一、状态空间表达式及建立)----学习笔记
  18. 对空间中6个点两两连线,用红黄两种颜色对这些边染色,则同色的三角形至少有几个?
  19. 云存储中不可不知的五个安全问题及应对措施
  20. 无法连接服务器中的redis

热门文章

  1. PostgreSQL学习手册(五) 函数和操作符
  2. python 统计2^2^2^2^2的各数字出现次数
  3. 修改mint-ui的主题色
  4. [原创]浅谈对华为34岁以上员工“退休”
  5. 初学 Python(十三)——匿名函数
  6. work1的code和问题
  7. 【RHCE学习笔记】基于安全的NFS认证(kerberos)
  8. monodroid发布的最新版本
  9. iOS10 UI教程视图的边界与视图的框架
  10. DHCP欺骗(DHCP Sproofing)