
极市导读
目前很少有工作关注在无数据情况下的网络压缩,然而,这些方法得到的压缩后的网络准确率下降很多,这是因为这些方法没有利用待压缩网络的信息。本文介绍2种无需训练数据的网络压缩方法:来自华为诺亚方舟实验室的DAFL-SR以及NVDIA的Deeplnversion. >>开学有礼!小米11、海信电视、服务器、手环5、京东卡等20个开学礼包留言直送
本文目录
1 无需训练数据的超分网络蒸馏技术 DAFL-SR (CVPR 2021)
(来自华为诺亚方舟实验室)
1.1 DAFL-SR 原理分析
1.1.1 DAFL 方法回顾:通过 GAN 生成无标注的训练图片
1.1.2 DAFL-SR 训练数据的生成方法
1.13 优化思路2 训练输入图片以进行无数据的网络蒸馏技术 DeepInversion (CVPR 2020)
(来自NVIDIA,普林斯顿大学)
2.1 DeepInversion 原理分析
2.1.1 DeepInversion (DI)
2.1.2 Adaptive DeepInversion (ADI)
上篇:
模型压缩经典解读:解决训练数据问题,无需数据的神经网络压缩技术
随着深度学习技术的发展,深度神经网络 (CNN) 已经被成功的应用于许多实际任务中 (例如,图片分类、物体检测、语音识别等)。由于CNN需要巨大的计算资源,为了将它直接应用到手机、摄像头等小型移动设备上,许多神经网络的压缩和加速算法被提出。现在的问题是这些神经网络的压缩和加速算法都有一个基本的假设,那就是:训练数据是可获得的。
但是实际情况是:在现实中的应用上,由于隐私因素的制约或者传输条件的限制,我们无法获得训练数据。比如:在医学图像场景中,用户不想让自己的照片 (数据) 被泄露;训练数据太多没办法传到云端,甚至是存储这些巨大量的数据集对于小型企业都是个难题;所以,使用常规的模型压缩办法在这些限制下无法被使用。
甚至,预训练网络的基本架构和参数都是未知的,就像一个黑盒,只能通过输入来获取输出信息。所以剪枝,量化等等常用的模型压缩方法就更无从下手了。
但是,目前很少有工作关注在无数据情况下的网络压缩,然而,这些方法得到的压缩后的网络准确率下降很多,这是因为这些方法没有利用待压缩网络的信息。为了解决这一问题,本文介绍2种无需训练数据的网络压缩方法。
在这里需要强调的一点是:当前有许多用 GAN 来生成自然图像/高清图片/漫画图片/风格迁移/去雨/去噪/去模糊/去马赛克,等等等等各种生成任务。但是,它们无一例外在 GAN 模型的训练过程中都使用了大量的训练数据,它们难以存储、传输和管理,而这在实际的业务条件下有时候是不被允许的。
1 无需训练数据的超分网络蒸馏技术 DAFL-SR (CVPR 2021)
论文名称:Data-Free Knowledge Distillation For Image Super-Resolution
论文地址:
https://openaccess.thecvf.com/content/CVPR2021/papers/Zhang_Data-Free_Knowledge_Distillation_for_Image_Super-Resolution_CVPR_2021_paper.pdf
开源地址:
https://github.com/huawei-noah/Efficient-Computing
1.1 DAFL-SR 原理分析:
华为诺亚方舟实验室联合北京大学和悉尼大学于 ICCV 2019 提出了在无数据情况下的网络蒸馏方法 DAFL,比之前的最好算法在MNIST上提升了6个百分点,并且使用 resnet18 在 CIFAR-10 和 100 上分别达到了 92% 和 74%。这篇 DAFL-SR 是 DAFL 算法的超分网络版本。
它的特点是:
-
待压缩教师超分网络 看作一个固定的判别器 。
-
用生成器 输出的生成图片代替训练数据集进行训练。
-
设计了一系列的损失函数来同时训练生成器 和学生网络 。
-
使用生成数据结合蒸馏算法得到压缩后的超分网络 。
1.1.1 DAFL 方法回顾:通过 GAN 生成无标注的训练图片
蒸馏算法最早由Hinton提出,待压缩网络 (教师网络) 为一个具有高准确率但参数很多的神经网络,初始化一个参数较少的学生网络,通过让学生网络的输出和教师网络相同,学生网络的准确率在教师的指导下得到提高。
从结构和参数的角度看,如上文所述,待压缩的大网络的结构和参数都是未知的,这就使得我们无法通过剪枝或者量化等经典的神经网络压缩方法进行模型压缩,我们唯一已知的就是待压缩的大网络的输入和输出接口。
令 为预训练的教师超分网络, 为学生网络,知识蒸馏的方法通过下面的目标函数来训练学生网络:
其中, 是训练样本, 是原始数据集的分布。但是,当原始训练样本 不可用时,我们无法训练学生网络 。
从训练数据的角度看,在整个网络压缩的过程中,我们都没有任何给定的训练数据,在此情况下,神经网络的压缩变得十分困难。所以作者通过 GAN 来输出一些无标注的训练图片,以便于神经网络的压缩。生成对抗网络 (GAN) 是一种可以生成数据的方法,包含生成网络 与判别网络 ,生成网络希望输出和真实数据类似的图片来骗过判别器,判别网络通过判别生成图片和真实图片的真伪来帮助生成网络训练。
具体而言,给定一个任意的噪声向量 (noise vector) ,生成器 会把它映射成虚假的图片 ,即 。另一方面,判别器 要区分来的一张图片是真实的 还是生成器伪造的 ,所以,对于 GAN 而言,它的目标函数可以写成:
这个目标函数 的优化方法是 。就是每轮优化分为2步,第1步是通过 gradient ascent 优化 的参数,第2步是通过 gradient descent 优化 的参数。然而,我们会发现传统的 GAN 需要基于真实数据 来训练判别器,这对于我们来说是无法进行的。所以基于传统的 GAN 训练方法 2 式是不行的。
许多研究表明,训练好的判别器 具有提取图像特征的能力,提取到的特征可以直接用于分类任务,所以,由于待压缩网络使用真实图片进行训练,也同样具有提取特征的能力,从而具有一定的分辨图像真假的能力。而且这个待压缩网络我们是已有的。于是,我们把待压缩网络作为一个固定的判别器 ,以此来训练我们的生成网络 。
首先,待压缩网络作为一个固定的判别器 ,我们就认为它是已经训练好参数的判别器 ,我们利用它来训练生成器的基本思想是下式:
式中, 就是已经训练好参数的判别器,生成器 的参数经过3式持续优化使得 逐渐上升,代表着生成器的输出越来越能够骗过判别器。
为了让神经网络更好的训练,真实的训练数据对于每个类别的样本数目通常都保持一致,例如MNIST每个类别都含有 6000 张图片。于是,为了让生成网络产生各个类别样本的概率基本相同,作者引入信息熵,信息熵是针对一个概率分布而言的。假设现在有概率分布 ,概率分布 的信息熵的计算方法就是:
概率分布 越均匀,信息熵 就越小。极限情况当 时,信息熵 取极大值 。所以信息熵损失函数定义为:
其中 为标准的信息熵,信息熵的值越大,对于生成的一组样本经过待压缩教师网络的输出特征 来讲,每个类别的数目就越平均,从而保证了生成样本的类别平均。
1.1.2 DAFL-SR 训练数据的生成方法
DAFL 这种技巧却不能应用于图像超分辨率任务。因为 SISR 任务中没有类的概念。因此,作者希望利用超分辨率网络的基本特性来帮助生成器生成与真实图像相似的图像。与低分辨率图像相比,高分辨率图像在保留低分辨率图像所有信息的同时,像素更多,细节增加更多。换句话说,如果我们将高分辨率图像下采样到与其对应的低分辨率图像相同的大小,那么这两幅图像理论上应该是相同的。
比如说给定低分辨率图片 ,以及预训练好的超分模型,我们可以得到其对应的高分辨率图片 。我们可以将高分辨率图像缩放到低分辨率尺寸,得到 。式中, 分别表示低分辨率图片的高度、宽度和通道。 表示超分辨率倍数。
考虑到在大多数超分辨率网络训练过程中,低分辨率图像通常是通过高分辨率图像的插值获得的,而在给定一个训练好的超分辨率模型的情况下,我们认为当 是自然数据集图像时, 和 应该是一致的。为了有效地从教师超分辨率网络中提取信息,生成器 需要产生跟随数据集分布的样本。
给定来自分布 输入的随机变量 ,生成器网络合成的图像为 。利用教师网络 对 进行超分辨的结果是 。然后我们把 重新缩放到 的大小,得到 。生成器 预计将产生遵循数据集分布的样本,当 是自然数据集图像时, 和 应该是一致的。那么 应该与 一致。因此,我们提出了生成器 的重构损失函数:
重构损失是生成器训练的第1个损失。
此外,为了提高生成器生成图片的能力,希望生成的图片可以最大化教师和学生之间的模型差异,即在训练生成器时再引入对抗损失:
其中,使用 函数来减缓生成器的训练并使训练更加稳定。因此,生成器 的损失函数可表述为:
1.1.2 渐进式蒸馏策略
因为这个训练过程没有用到任何真实数据,所以很难通过从教师网络中提取信息来直接训练学生网络。考虑到大多数超分辨率网络都有许多块或层,为了更好地训练学生网络,作者建议先训练一个 tiny 的学生网络。这个 tiny 的网络具有与学生网络相似的结构,但是需要训练的参数较少。因此,对于这个 tiny 网络而言,优化要容易得多。然后利用训练好的这个 tiny 网络,逐步增加层或块的数量,并在这些新的层或块中依次训练参数。通过这种渐进式提炼方法,我们可以从教师网络中提炼出更多的信息,更好地训练学生网络。
具体而言,对于超分网络 ,其内部机制可以写成 , 分别代表了网络的 head,body 和 tail。考虑到 包含了 个 layer,我们可以将其分成 个部分:,并且分 步来训练这个网络。一开始只训练 ,所以构建一个 ,在训练 的过程中,蒸馏损失可以写作:
当把 训练几步之后,再在 body 上添加 ,使得学生模型变成 。然后在训练 的时候,我们用训练过的 初始化 ,重复此训练过程,直到 得到良好的训练,整个过程如下图1所示。
1.1.3 优化思路
DFAL-SR 算法的流程如下图2所示。每个阶段有若干个 epochs。在每个 epoch 里面,会使用9式作为目标函数训练 student 超分网络 次,然后使用8式作为目标函数训练 Generator 1次。训练完这些 epochs 以后进入下一个阶段,用训练过的 初始化 ,重复此训练过程。
Experiments:
作者使用了2个超分模型作为 Baseline,它们分别是:VDSR 和 EDSR。
VDSR 实验 Teacher 使用 VDSR 模型, Student 是通道数减半的模型 VDSR-half。对 DAFL 中的生成器 进行了一些修改,移除最后一个 BN 层,并用 Instance Normalization 层替换剩余的BN 层。
学生网络的优化器是 SGD,生成器 的优化器选用 Adam。使用对应于3个超分辨率尺度的3个生成器来生成用于蒸馏的图像。每个生成器生成图片的尺寸是 。
在优化过程中,对于学生网络,学习速率最初设置为0.1,然后每10个 epochs 降低10倍。对于生成器,学习速率最初设置为1e-5,并根据与学生网络相同的策略进行衰减。此外,在整个训练过程中,我们每个 epoch 处理120次迭代,在每次迭代中,我们首先更新学生网络50次,然后更新生成器1次。重建权重 设置为1.0。此外,VDSR分为2个部分,分两个阶段进行培训。第一阶段训练12个 epochs,然后整个网络训练68个 epochs。
下图3是不同方法获得的学生模型的性能。在图3中,Teacher 表示预先训练的教师模型,Student 表示在原始数据集上训练的学生模型,Noise 表示我们使用从均匀分布中随机采样的图像进行蒸馏。如表中所示,DAFL-SR 比使用随机噪声图像进行训练的性能明显更好,并且获得了接近使用原始数据集进行训练的结果。例如,使用我们的方法训练的学生模型与使用原始数据集的训练相比,在 scale=2 的 Set5 数据集上仅得到 0.16dB 的下降。使用不同训练策略的相同架构的视觉质量如图4所示。本文的方法与用原始数据集训练的学生网络的视觉质量相似,并且比用噪声图像和 Bicubic 插值结果训练的效果更好。
在图5中,作者可视化了由生成器 生成的几幅图像以及由教师网络生成的相应超分辨率结果。生成器 经过训练后生成的图片有了自然图像的感觉。
下图6是几个对比实验。依然使用 VDSR 作为教师网络,VDSR-half 作为学生网络。下图展示了 scale=2 的不同实验设置下的结果。
-
M1表示用从随机均匀分布中采样的图片做蒸馏,PSNR仅达到34.38dB。 -
M2表示仅仅使用生成器 的重建损失,即6式,发现PSNR达到37.05dB。 -
M3表示将对抗损失和重建损失相结合,可以获得显著更好的性能,PSNR达到37.09dB。 -
进一步应用渐进蒸馏方法带来了 PSNR 0.11dB 的增加,说明渐进蒸馏可以改善性能。
EDSR 实验 Teacher 使用 EDSR 模型, Student 是通道数减半的模型 EDSR-half,如下图7所示。
教师超分辨率模型在 DIV2K 数据集上训练。DIV2K 数据集由 800 张 2K 分辨率训练图像和100 张 2K 分辨率验证图像组成,广泛用于超分辨率任务中的训练和测试。测试集是 Set5, Set14, B100 和 Urban100。
在优化过程中,对于学生网络,学习速率设置为1e-4,并使用 Adam 优化器,一共训练300 epochs,在每个 epoch 里面,我们首先更新学生网络50次,然后更新生成器1次。生成器一共会更新120次。重建权重 设置为1.0。此外,EDSR 分为 2 个部分,分两个阶段进行培训。第一阶段训练80个 epochs,然后整个网络训练220个 epochs。
下图8是不同方法获得的学生模型的性能。在图8中,Teacher 表示预先训练的教师模型,Student 表示在原始数据集上训练的学生模型,Noise 表示我们使用从均匀分布中随机采样的图像进行蒸馏。如表中所示,DAFL-SR 比使用随机噪声图像进行训练的性能明显更好,并且获得了接近使用原始数据集进行训练的结果。例如, 对于×2 超分辨率来讲,我们的方法比用随机噪声图像提取的方法提高了约 3.05 dB,比用数据集训练的方法仅低 0.48 dB。
小结
DAFL-SR 是 DAFL 方法的超分版本,是一个新的无需训练数据的超分网络压缩方法,它的特点是也用生成器 输出的生成图片代替训练数据集进行训练,设计了重建损失和对抗损失函数来训练生成器 ,使用生成数据结合蒸馏算法得到压缩后的网络。
2 训练输入图片以进行无数据的网络蒸馏技术 DeepInversion (CVPR 2020)
论文名称:Dreaming to Distill: Data-free Knowledge Transfer via DeepInversion
论文地址:
https://arxiv.org/pdf/1912.08795.pdf
开源地址:
https://github.com/NVlabs/DeepInversion
2.1 Dreaming to Distill 原理分析:
NVIDIA 联合普林斯顿大学等的研究员们提出了一种无需训练数据的网络蒸馏技术 Dreaming to Distill,算是对 DAFL 的又一次提升。本文从完全不同的另一个角度来解决,即:在缺乏训练数据时,我们能否以某种方式从已经训练好的模型中恢复训练数据,并将其用于知识蒸馏呢?
之前已经有一些方法试图去找出:一个训练好的网络期望看到什么样的图像以进行完美的分类。这里面最常用和经典的方法就是 DeepDream 了。DeepDream 这种方法也是需要一个预训练好的模型,只是它是去根据输出的类别和预训练的模型来优化输入图片,注意是优化输入。输入信息一开始是随机噪声或自然图像,这种方法通过使用一些正则化,同时保持选定的输出激活值是固定的,但使中间特征的表示不受约束。这种方式来训练输入图片。
在这项工作中,作者对深度网络进行了观察——它们都隐式编码了关于先前训练数据的非常丰富的信息。比如很多高性能的卷积神经网络 (CNNs),Resnet,Densentes 等等或它们的变体,都使用 BN 层。BN 层存储了很多层输出的滑动均值和方差,这些信息很重要,DeepDream 在训练输入图片时就通过利用这些信息让输入图片恢复得更好了。
本文所提出的这种方法叫做 DeepInversion,包括2个步骤:
-
Model Inversion:就是去生成一些训练图片。具体做法就是类似 DeepDream,采取优化输入图片的方式。
-
Knowledge Distillation:根据这些生成的训练图片,和教师网络来基于特定任务蒸馏学生网络。
Knowledge Distillation
蒸馏过程的基本形式可以写作:
式中, 是训练集, 是教师模型, 是学生模型, 是学生模型的参数,Knowledge Distillation 就是最小化教师模型和学生模型输出的 散度。
DeepDream
DeepDream 做的主要的事情是把一张噪声图片给优化成自然图像。给定一张随机初始化的噪声输入 ,以及一个任意的标签信号 ,噪声图片通过下式进行优化:

