通过NAS对GAN网络进行模型压缩的一篇文章,作者用图像翻译的CycleGAN和超分的ESRGAN来示例,这俩一个是17年一个是18年的模型。

原文章相关资料如下:

Paper:https://arxiv.org/abs/2006.08198

Github:https://github.com/TAMU-VITA/AGD

网络结构的总体设计

总体结构上,很多NAS模型都采用了有向无环图(DAG)型搜索空间,但是这种结构会带来大量不规则的密集连接,计算量大,而且文章提到这种结构对硬件的利用不够友好——因为会阻碍数据的并行处理,带来latency。

因此作者没选DAG,而是选择顺序的搜索空间,这样每个单独的搜索模块(也叫节点)只包含一个运算操作,这些节点顺序连接,没有分支。

NAS搜索由搜索空间和代理任务两部分构成,分别对应平常任务中的网络结构设计和损失函数设计与优化两部分。

搜索空间

搜索对象:操作类型(如1*1卷积)与channel宽度。

上面两幅图分别是图像翻译和超分的改进网络结构示意图,其实就是固定住Stem和Header(特征提取与复原部分),去搜索虚线框中的结构(特征处理部分)。

主要看超分这边,为了提高效率,作者将多数计算都放在了在低分辨率的特征空间中。对于虚线框中的模块,本来是ESRGAN在SRGAN的基础上将残差与DenseNet结合得到的RRDB,特点是连接紧密、更容易训练,但是计算量大、影响数据并行,于是就在对这部分搜索操作类型和channel宽度,进行替换。另外作者也没用BN层,是为了避免产生伪影。

操作类型方面,其搜索范围是以下几个,都是较流行的模块:

Conv 1*1、Conv 3*3

Residual Block-ResBlock:Conv 3*3带有skip connection

Depthwise Block-DwsBlock:Conv1*1 + Depth-wiseConv 3*3 + Conv 1*1带有skip connection

代理任务

代理任务对应平常训练中的损失函数及优化部分,本文的损失函数如(1)式,G0为预训练模型(teacher),G为要训练的生成器,d指两者输出的距离,F指的是计算cost,α、γ是控制网络结构的参数,通过softmax确定每一层的操作类型和信道宽度。

loss很自然地体现两个思想:

(1)压缩后的模型输出和原来相差无几

(2)减少计算负担。

具体来说,前一项损失d(G,G0) 包括了content loss(为了避免color shifting)、perceptual loss(保证视觉效果)以及total variation loss(保证元素级相似性)三项,不算新鲜;而后一项loss衡量computional budget则直接用的FLOPs(浮点数计算量)。

可以发现压缩过程与判别器无关,作者通过实验证明了就算优化时带上判别器效果也没有提升,反倒让训练过程不稳定了,这个经验可以吸取。个人也是认为在增强任务中GAN训练的目的就是在G与D的博弈下得到生成器,判别器只是配角。

训练过程

文章的伪代码(图比较长,放在下面)对训练过程讲的比较清楚,分为三步:

(1)预训练:用一半训练集预训练网络参数。

(2)搜索:交替更新网络参数和结构参数(α、γ),搜索网络结构。

(3)重新训练:选定每层的操作类型与channel宽度,重新初始化网络参数后再训练一次。

压缩模型的效果

在最终效果方面,(1)评估计算负担是用256*256的图像进行4倍上采样实验,可见AGD压缩后的模型所需算力及内存都显著减少,(2)同时能保证PSNR下降不多,(3)视觉效果基本看不出差别。

PSNR评价质量时用的是超分任务常用的四个数据集,略去了manga109,因为五个数据集中只有它是手绘漫画数据集,其他四个都是照片、自然图像,gap比较大且应用性没那么强,略去它是可以理解的。

最后放一下文章中的视觉效果对比图,压缩后的模型视觉效果基本和原来一致。

AutoGAN-Distiller: Searching to Compress Generative Adversarial Networks, ICML2020相关推荐

  1. 机器学习会议论文(一)AutoGAN-Distiller:Searching to Compress Generative Adversarial Networks

    一. The address of paper AutoGAN-Distiller:Searching to Compress Generative Adversarial Networks 这篇论文 ...

  2. Generative Adversarial Networks in Computer Vision: A Survey and Taxonomy(计算机视觉中的GANs:综述与分类)

    Abstract: 生成对抗网络(GANs)在过去几年得到了广泛的研究.可以说,他们最重要的影响是在计算机视觉领域,在挑战方面取得了巨大的进步,如可信的图像生成,图像之间的翻译,面部属性操纵和类似领域 ...

  3. Generative Adversarial Networks 生成对抗网络的简单理解

    1. 引言 在对抗网络中,生成模型与判别相竞争,判别模型通过学习确定样本是来自生成模型分布还是原始数据分布.生成模型可以被认为是类似于一组伪造者,试图产生假币并在没有检测的情况下使用它,而判别模型类似 ...

  4. 生成式对抗网络Generative Adversarial Networks(GANs)

    1. 前言 2. 参考资料 3. 研究背景 4. GAN的框架 4.1 对抗框架(Adeversarial Nets) *关于"无监督学习"的说明 4.2 Minimax two- ...

  5. 深度学习之生成式对抗网络 GAN(Generative Adversarial Networks)

    一.GAN介绍 生成式对抗网络GAN(Generative Adversarial Networks)是一种深度学习模型,是近年来复杂分布上无监督学习最具前景的方法之一.它源于2014年发表的论文:& ...

  6. 【文献阅读】Perceptual Generative Adversarial Networks for Small Object Detection –CVPR-2017

    Perceptual Generative Adversarial Networks for Small Object Detection 2017CVPR 新鲜出炉的paper,这是针对small ...

  7. Self-Attention Generative Adversarial Networks(SAGAN)理解

    介绍 Self-Attention Generative Adversarial Networks(SAGAN)是Han Zhang, Ian Goodfellow等人在去年提出的一种新的GAN结构, ...

  8. SAGAN——Self-Attention Generative Adversarial Networks

    原论文下载地址:Self-Attention Generative Adversarial Networks 该文章作者为:Han Zhang GitHub代码实现:pytorch实现 摘要部分: 本 ...

  9. [论文笔记]Self-Attention Generative Adversarial Networks

    1.文献综述 文章链接:链接 文章题目:<Self-Attention Generative Adversarial Networks> 项目地址:1.TensorFlow版 2.pyto ...

最新文章

  1. fedora,linux mint 命令行(终端)打开目录
  2. Python初学者请注意!别这样直接运行python命令,否则电脑等于“裸奔”
  3. 用两个文件a.txt;b.txt.使用linux命令,复制,a.txt文档倒数第十行的记录to b.txt文档
  4. 广度优先搜索生成树怎么画_图的深度优先遍历与广度优先遍历以及最小生成树...
  5. ffmpeg解码流程 turorial5详解
  6. JavaScript数组操作 [Z]
  7. 使用Angular Router导航基础
  8. python实现求解列表中元素的排列和组合问题
  9. Tomcat环境部署以及tomcat多实例搭建(同一台机器)
  10. ScheduledThreadPoolExecutor部分源码学习
  11. linux7设置广播,中标麒麟Linux7 如何关闭广播消息
  12. 微信防撤回python_python实现微信防撤回神器
  13. 怎么给input插入一个图片
  14. <script>alert(1)</script>怎么在页面显示且不出现功能
  15. JAVA个人博客系统毕业设计,个人博客系统设计与实现,个人博客网页设计毕设作品
  16. GPG对文件加解密的简单实现
  17. 待业一年多,我终于找到工作啦,月薪1.5万,双休不加班
  18. android两个项目依赖关系图,关于android:Android组件化项目搭建遇到的问题记录
  19. 校招生向京东发起的“攻势”,做到他这样,你,也可以
  20. linux设备usb节点和硬件接口,所谓设备驱动即驱使硬件设备行动,带你深入理解linux的设备驱动......

热门文章

  1. html实现点击图片全屏显示,用vue实现点击图片预览浏览器满屏大图
  2. 数据结构-广义表详解(类C语言版)
  3. K8S之pod生命周期
  4. 遇到“服务器内部错误http500怎么办?
  5. 用于调用的参数太少/写入位置时发生冲突/检测到无效的异常处理程序例程
  6. 诺基亚手机运行linux,LINUX:基本功能(2)_诺基亚手机_手机其它OS-中关村在线...
  7. 类成员函数指针和普通函数指针
  8. oracle导入solr,从Oracle数据库导入XML数据时solr dih会变慢
  9. 比ping更强大的fping
  10. 分布式之分布式事务、分布式锁、分布式Session