我DCGAN ( Deep Convolution GAN )用来生成图像。但是,我想在嵌入式设备上运行它,例如Intel Movidiusor Jetson。
但是,在浏览了几篇互联网文章时,我了解到嵌入式设备仅用于深度学习的推理。
我有几个问题 :
GAN 基本上是一个生成网络。怎么可能有推论?GAN 的推理和训练会是一回事吗?
它(GAN)可以在内存真正成为问题的嵌入式设备上运行吗?
我DCGAN ( Deep Convolution GAN )用来生成图像。但是,我想在嵌入式设备上运行它,例如Intel Movidiusor Jetson。
但是,在浏览了几篇互联网文章时,我了解到嵌入式设备仅用于深度学习的推理。
我有几个问题 :
GAN 基本上是一个生成网络。怎么可能有推论?GAN 的推理和训练会是一回事吗?
它(GAN)可以在内存真正成为问题的嵌入式设备上运行吗?
在训练阶段,GAN 模型本质上是让两个神经网络相互竞争;生成器和判别器。与往常一样,我们从训练数据集开始,例如图像。然后:
这是这篇文章的一个简单草图:
因为两个网络都在争夺相同的度量(判别器网络的损失),所以这个想法也被描述为一个 min-max 问题。鉴别器最小化它自己的错误,而生成器最大化相同的错误。
更多资源:
要了解 GAN 的起点,请浏览Ian Goodfellow 的 seiminal 论文。对于一个很好的视频介绍:
使用上述过程,我们训练了两个神经网络。执行推理实际上可能意味着使用其中之一(或两者的组合,我想)。在您的情况下,您似乎只需要生成器部分:
我正在使用 DCGAN(深度卷积 GAN)生成图像
这意味着您将使用经过训练的生成器模型,并通过提供不同的随机噪声状态作为输入来使用它来生成随机样本(如上图所示)。希望您的生成器在训练期间的学习分布将足够多样化以产生不同的样本。如果它最终总是产生相同的图像,给定不同的随机噪声样本作为输入,您将看到模式崩溃的示例(参见上面的链接视频)。
要最终得到一个真正具有实际用途的生成器,您将需要进行大量培训,并提供许多示例。最先进的模型使用图像数据库,例如 ImageNet,其中包含超过 1000 个类别的 100 万张图像。
推理:
要从头开始进行这种培训,我真的认为您在嵌入式或微型设备(例如 Jetson)上不会有任何运气。但是,要执行推理,您也许可以做到。这只需将预训练的生成器模型加载到设备上(以及所需的深度学习框架,例如 Tensorflow)。这可能会奏效,而且我已经看到人们设法做到这一点——在保守的卷积网络上,帧速率约为每秒 1 张图像。
内存限制只是计算本身的问题。在嵌入式设备上,这可能是一个非常缓慢的过程,但如果您能够优化网络和训练过程的许多部分,则可以解决。例如,您可以将图像压缩到更小的比例,使用具有更少神经元的最终输出层,甚至可以在计算中使用更少的浮点精度!请参阅有关 8 位训练(相对于标准 32 位)的这篇论文。还有一些知名模型的较小版本,例如tiny-YOLO。
训练:
您可能采用的另一种边缘训练(在线训练)方法是从迁移学习开始。您可以采用已经在类似于您自己的任务上训练过的模型,您必须在开源项目中搜索该模型。然后可以将该模型加载到嵌入式设备上,并像推理一样工作,但是我们想要训练。为此,我们保留预训练模型的权重,冻结大部分层,只允许最后一两层使用新的边缘数据进行实际微调。
GAN 基本上是一个生成网络。怎么可能有推论?GAN 的推理和训练会是一回事吗?
好吧,GAN 本质上是两个串联的神经网络。一个称为生成器,另一个称为鉴别器。您需要按顺序训练这两个网络,即先训练生成器,然后再训练判别器(不是同时)。GAN的推理由鉴别器网络执行,该网络标记生成器的输出。我发现这篇文章很有帮助,我希望你也能找到它!
它(GAN)可以在内存真正成为问题的嵌入式设备上运行吗?
好吧,如果您的嵌入式资源能够承受同时运行的两个神经网络,那么应该没问题。