Press "Enter" to skip to content

模型压缩经典解读:解决训练数据问题,无需数据的神经网络压缩技术…(下)

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

作者丨科技猛兽

本文目录

 

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:DFAL-SR 的渐进式蒸馏策略

1.1.3 优化思路

 

DFAL-SR 算法的流程如下图2所示。每个阶段有若干个 epochs。在每个 epoch 里面,会使用9式作为目标函数训练 student 超分网络次,然后使用8式作为目标函数训练 Generator 1次。训练完这些 epochs 以后进入下一个阶段,用训练过的 初始化 ,重复此训练过程。

图2:DFAL-SR 算法流程

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 插值结果训练的效果更好。

图3:不同方法获得的 VDSR 学生模型的性能

图4:不同方法获得的 VDSR 学生模型的性能

在图5中,作者可视化了由生成器生成的几幅图像以及由教师网络生成的相应超分辨率结果。生成器 经过训练后生成的图片有了自然图像的感觉。

图5:生成器生成的几幅图像以及由教师网络生成的相应超分辨率结果

下图6是几个对比实验。依然使用 VDSR 作为教师网络,VDSR-half 作为学生网络。下图展示了 scale=2 的不同实验设置下的结果。

 

M1表示用从随机均匀分布中采样的图片做蒸馏,PSNR仅达到34.38dB。

 

M2表示仅仅使用生成器 的重建损失,即6式,发现PSNR达到37.05dB。

 

M3表示将对抗损失和重建损失相结合,可以获得显着更好的性能,PSNR达到37.09dB。

 

进一步应用渐进蒸馏方法带来了 PSNR 0.11dB 的增加,说明渐进蒸馏可以改善性能。

图6:对比实验

EDSR 实验 Teacher 使用 EDSR 模型, Student 是通道数减半的模型 EDSR-half,如下图7所示。

图7:EDSR 模型的 Teacher 和 Student 设置

教师超分辨率模型在 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。

图8:不同方法获得的 EDSR 学生模型的性能

图9:不同方法获得的 EDSR 学生模型的性能

小结

 

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 做的主要的事情是把一张噪声图片给优化成自然图像。给定一张随机初始化的噪声输入,以及一个任意的标签信号 ,噪声图片通过下式进行优化:

 

式中,是分类损失, 是正则化项。DeepDream 使用 image prior 来引导 远离没有可辨别视觉信息的不切实际的图像。

 

式中,和 分别是图片 的 total variance 罚项和 范数罚项。

 

但正如先前的工作所展示的那样, image prior 这种正则化提供了更稳定的收敛到有效图像的方法。然而,这些图像仍然具有与自然 (或原始训练) 图像相差甚远的分布,从而导致不令人满意的蒸馏结果。

 

2.1.1 DeepInversion (DI)

 

DeepInversion 其实可以看成是 DeepDream 的改进版本,主要是对正则化项进行改进。原来的 没法使得生成的图片具有相似的低级和高级的信息。为了使得生成的图片在各个级别的特征是相似的,DeepInversion 的特征正则化项定义为:

 

式中,和 是第 层特征的 batch-wise 的均值和方差。这个式子是啥意思呢?我们把数据集中所有数据 的第 层特征的均值和方差统计出来,叫做和 ,然后希望我们生成的图片 的相应的均值和方差和整个数据集的统计值越接近越好 (最小化 范数)。

 

那现在要得到和 ,就需要一整组的训练数据 。我们现在没有任何训练数据,所以作者希望使用预训练 Teacher 模型的 BN 层的 running mean 和 running variance 来代替,即:

 

所以最终 DeepInversion 对正则化项进行改进之后就变成了:

 

2.1.2 Adaptive DeepInversion (ADI)

 

除了生成图片的质量之外,生成图片的多样性也是一个很重要的因素。Adaptive DeepInversion 就是为了解决这个问题的。主要的想法是鼓励生成的图像引起学生模型和教师的分歧,就是让二者输出尽量不一致。为此,作者引入了一种基于 Jensen-Shannon 散度的图像生成附加损失系数,它惩罚输出分布的相似性:

 

式中,是教师和学生分布的平均值。

 

这一项会产生一些新的图片,这些图片教师网络很容易分类而学生网络则很难分类准确。但这一项的目的是为了尽量让学生网络的输出更加多样化。

 

所以最终 Adaptive DeepInversion 对正则化项进行改进之后就变成了:

 

Adaptive DeepInversion 的竞争性和互动性有利于不断进化的学生,这逐渐迫使新的图像特征出现,并使得 DeepInversion 得到增强。

 

整个方法的流程如下图10所示。

图10:Adaptive DeepInversion 的流程

先看左边的第一部分,即 Adaptive DeepInversion。一张待优化的 noise 图片经过预训练好的 Teacher 模型得到输出 Teacher logits,经过预训练好的 Student 模型得到输出 Student logits,二者计算 JS 散度等等得到,通过教师网络计算得到 。之后通过 Teacher logits 和 标签的 CE Loss 得到 ,把它们加在一起作为最终的目标来更新这个待优化的 noise 图片。注意这步里面的 Student model 是一个预训练好的模型,不是后面那步的 Student model。

图11:Adaptive DeepInversion过程

右边的第二部分,即 Knowledge Distillation。使用合成的图片缩小 Student 和 Teacher 输出之间的距离。

图12:Knowledge Distillation过程

这样不断迭代地去训练 Student model 和 输入图片,最终实现不错的效果。

 

Experiments:

 

所有的生成图片都是由的噪声初始化而来。

 

首先是在 CIFAR-10 上进行的无数据的知识蒸馏实验。教师模型:VGG-11-BN 和 ResNet34。生成的图片是 32×32 的,batch 的大小是 256。超参数设置为

 

下图13是实验结果。只使用噪声无法很好地完成任务。

 

加上之后,性能获得了小幅提升。

 

加上之后,性能获得了大幅提升,得到的合成图片在真实感上要优越得多。

 

加上之后, 进一步提高了1%-10%的精度,使得 Student 模型的精度非常接近在来自 CIFAR-10 数据集的真实图像上训练的 Teacher 模型的精度 (在 2% 以内) 。

图13:CIFAR-10 实验结果

下图14是 Adaptive DeepInversion 和 DeepInversion 的训练曲线的对比。Adaptive DeepInversion 的不同就是如前文所述,会鼓励生成的图像引起学生模型和教师的分歧,就是让二者输出尽量不一致。所以我们看到橙色曲线在合成图片的精度越来越差,而教师模型 (固定参数) 越来越好,因为合成图片在不断优化。但是尽管如此,在 CIFAR-10 测试集上 Adaptive DeepInversion 是优于 DeepInversion 的,因为它生成的图片更加多样化。

如下图15所示是不同方法得到的合成图片的可视化对比。Adaptive DI 得到的合成图片更加接近于真实的自然图像。

图15:不同方法得到的合成图片的可视化对比

然后是在 ImageNet 上进行的无数据的知识蒸馏实验。教师模型:ResNet-{18, 50}。生成的图片是 224×224 的,batch 的大小是 256。超参数设置为

 

下图16是合成图片的可视化的结果。教师模型使用 ResNet-50。值得注意的是,仅给定 Teacher 的预训练模型,DeepInversion 就已经能够生成高保真度和高分辨率的图像。它还产生目标物体周围的详细图像特征和纹理,例如目标气球周围的云、船周围的水、火山下面的森林等。

图16:ImageNet预训练模型合成图片可视化

泛化性能

 

如下图17所示是其他4个训练好了的神经网络对 ResNet-50 合成图像的分类精度。DeepInversion 的表现远远优于 DeepDream。这表明 DeepInversion 所生成的图像在跨网络传输时具有鲁棒性。

图17:其他4个训练好了的神经网络对 ResNet-50 合成图像的分类精度

Inception score (IS) 对比

 

如下图18所示是不同方法合成图片的 Inception score (IS) 的对比。DeepInversion的性能大大优于DeepDream,提高了54.2。DeepInversion 甚至超过了多个 GAN 基线模型。

图18:不同方法合成图片的 Inception score (IS) 的对比

小结

 

DeepInversion 通过 Model Inversion 去生成一些训练图片。具体做法就是类似 DeepDream,采取优化输入图片的方式。并结合 Knowledge Distillation,根据这些生成的训练图片,和教师网络来基于特定任务蒸馏学生网络。合成图片效果相比 DeepDream 而言是更优的。

 

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注