全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 数据分析与数据挖掘
788 0
2020-12-18
神经风格转移的介绍与实现-深度学习
什么是深度学习?
深度学习是基于人工神经网络的机器学习的子集。深度学习背后的主要思想是模仿人脑的工作。深度学习中的一些用例涉及面部识别,机器翻译,语音识别等。学习可以是有监督的,半监督的或无监督的。
什么是神经风格转换?
如果您是一名艺术家,我相信您一定会想过,如果我能像毕加索一样绘画怎么办?很好地回答了这个问题,深度学习随附了一个有趣的解决方案-神经样式转换。
用外行的话来说,神经风格转换是为任何内容创建风格的艺术。内容是布局或草图,样式是绘画或颜色。它是使用深度学习进行图像转换的应用程序。
它是如何工作的?
毫不奇怪,已经有很多NST的方法,但是我们将从传统的实现入手以进行基本的了解,然后我们将进行更多的探索!
提出神经样式转移的基本思想是“可以在计算机视觉任务(例如图像识别任务)中学习的CNN中分离样式表示和内容表示。“
我假设你一定听说过的ImageNet竞争的地方,我们被介绍给艺术模型的状态从开始AlexNet然后VGG然后RESNET等等。所有这些模型都有一个共同点,那就是它们是在大型ImageNet数据集上进行训练的(1400万幅图像具有1000个类),这使他们可以了解任何图像的内在和外在。我们通过分离图像的内容和样式部分并提供损失函数来优化所需结果,从而充分利用这些模型的质量。
如前所述,我们定义了一个预训练的卷积模型和损失函数,它们在视觉上融合了两个图像,因此我们需要以下输入
内容图像-我们将在其上转移样式的图像
样式图片-我们要转移的样式
输入图像(生成) –最终内容加上所需的样式图像
实施方式
模型
就像我说的,我们将使用预训练的卷积神经网络。缩短学习过程的一种方法是转移学习的概念,在这种概念下,像k时代这样的图书馆为我们提供了这些巨头,并让我们根据自己的问题陈述进行实验。在这里,我们将使用keras进行迁移学习...我们可以使用以下代码行加载模型...
神经风格转换
前两行涉及导入像keras这样的库。然后,我们将使用vgg19.VGG19()加载模型,其中include_top = False表示我们不希望最终的softmax层成为用于对比赛中1000个类别进行分类的输出层。
第四行创建一个字典,该字典将键存储为图层名称,将值存储为图层输出。然后,我们最终将输入定义为VGG输入规范,将输出定义为我们为每一层制作的字典来定义模型。
接下来,我们将定义从中提取内容和样式特征的图层。
我们已经制作了字典,可以在其中映射这些图层并提取输出。
损失函数
为了获得所需的图像,我们必须定义一个损耗函数,该函数将朝着所需结果优化损耗。在这里,我们将使用每像素损失的概念。
每像素损失是一种指标,用于了解像素级图像之间的差异。它将输出像素值与输入值进行比较。(另一种方法是永久损失函数,我们将在博客的后续阶段中进行简要讨论)。有时,每个像素损失在表示每个有意义的特征方面都有其自身的缺点。那就是永久损失出现的地方。我们将重点关注的损失条款将是-
内容损失
风格损失
内容损失
它可以确保有效地捕获生成图像中所需的内容。已经观察到,CNN在网络的较高层级中捕获有关内容的信息,而较低层级则更着重于各个像素值。
这里的基础是内容特征,而组合是生成的输出图像特征。这里的reduce_sum计算指定参数范围内元素的总和,在这种情况下,这是输入(内容)与生成图像之间相应像素的差。
风格损失
定义样式的损失函数比计算内容要耗费更多精力,因为计算涉及多个层次。样式信息被测量为每层特征图之间存在的相关量。在这里,我们使用Gram矩阵来计算样式损失。那么什么是克矩阵?
克矩阵是一种度量,通过它我们可以捕获给定层中一组特征图上的特征分布。因此,当您基本上在计算或最小化样式损失时,就使样式的分布水平和生成的图像相同。
因此,其思想是制作样式和生成的图像的gram矩阵,然后计算两者之间的差。Gram矩阵(Gij)是图层的第i个特征图和第j个特征图的乘积,然后如上所述在高度和宽度上求和。
现在我们已经计算了两个损失函数。因此,为了计算最终损失,我们将计算内容和样式损失的加权总和。
上面的代码是遍历各层并通过在倒数第二行进行加权求和来计算最终损耗的最终积分。最后,我们必须定义一个优化器(Adam或SGD),以优化网络损耗。
输出值
神经风格转换
其他方法
NST还有许多其他更快的建议,我希望您能探索并提出更快的机制。可以遵循的一个概念是,存在使用Image Transformer神经网络的永久损耗概念,该概念可以提高NST的速度,它允许您按内容训练Image Transformer神经网络并应用各种样式而无需重新训练。
当传统模型针对每对内容和样式进行训练时,它在部署环境中更有用,而此概念允许一次性进行内容训练,然后对同一内容进行多次样式转换。
快速NST简介
神经风格转换
训练样式转移模型需要两个网络:一个预先训练的特征提取器和一个转移网络。预训练的特征提取器用于避免必须使用配对的训练数据。它的有用性源自对深层卷积神经网络的各个层进行了好奇的趋势训练,这些层针对图像分类进行了训练,专门研究图像的特定特征。
预先训练的模型使我们能够比较两个图像的内容和样式,但实际上并不能帮助我们创建样式化的图像。这就是第二个神经网络的工作,我们称之为转移网络。传输网络是一种图像转换网络,它将一个图像作为输入并输出另一个图像。传输网络通常具有编码-解码器体系结构。
在训练开始时,一个或多个样式图像通过预先训练的特征提取器运行,并保存各个样式层的输出以供以后比较。内容图像然后被馈送到系统中。每个内容图像都经过预训练的特征提取器,在该提取器中保存了各个内容层的输出。内容图像然后通过传输网络,该传输网络输出风格化图像。风格化的图像还将通过特征提取器运行,并保存内容层和样式层的输出。
风格化图像的质量由自定义损失函数定义,该函数具有内容和样式方面的术语。将提取的风格化图像的内容特征与原始内容图像进行比较,同时将提取的样式特征与来自参考样式图像的内容特征进行比较。在每个步骤之后,仅更新传输网络。预先训练好的特征提取器的权重始终保持固定。通过加权损失函数的不同项,我们可以训练模型以生成样式更浅或更重的输出图像。
题库
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群