概述
神经样式转换是一种从现有的内容和样式图像中生成新的艺术图像的技术。实现神经风格转换的方法之一是使用无监督的深度学习算法。
这篇博客文章介绍了使用TensorFlow深度学习库在Python中实现神经样式转换的主要思想和实现细节。
完整代码可在此处访问-链接LINK
主要概念
数据集
只需要2个图像-一个内容图像和一个样式图像。算法生成一个新的图像生成图像-内容类似于内容图像,样式类似于样式图像。不需要带标签的数据集或大型数据集。
图像分辨率
图像分辨率是指图像在宽度和高度方向上的像素数。有趣的是,内容和样式图像可以有不同的分辨率。然而,生成的图像具有与内容图像相同的分辨率。
此外,不要求内容和样式图像具有特定的形状/长宽比。基于所选择的深度学习模型,图像必须仅满足最小分辨率要求。
深度学习模型
神经风格转换使用预先训练的深度学习模型。不需要对预先训练的模型进行进一步的训练或微调。
可以使用任何流行的预训练深度学习模型,如VGG19、ResNet50等。这些网络已经在像ImageNet这样的大型数据集上进行了预先训练,因此已经学会了从图像中提取复杂的特征。
优化过程
在神经样式转换中,有趣的是,生成的图像也是模型的输入。
在训练过程期间更新生成的图像的像素值。预先训练好的神经网络模型的权值、偏差等参数保持不变。
输入/生成的图像可以在训练开始时被初始化为内容图像的噪声副本。随着训练的进行,输入图像的内容开始看起来像内容图像的内容,输入图像的样式开始看起来像样式图像的样式。
任何流行的深度学习优化器,如ADAM、SGD等都可以用于更新输入图像的像素值。
图像内容和样式表示
目的是生成具有类似于内容图像的内容和类似于样式图像的样式的图像。这是关于如何定义图像的内容和风格的最有趣和最有洞察力的部分。
当输入图像通过神经网络中的不同层时,根据像素值、高度和宽度方向上的像素数以及通道数进行变换。这些变换后的输出可以被认为是输入图像的不同表示。
网络中的较早层学习检测和表示诸如边、角的基本特征,而网络中的较深层可以学习对更复杂的特征和形状进行编码。
这些内层之一的输出可以用来表示图像的内容。可以选择任何内层,这样可以提供良好的效果。类似地,可以使用一个或多个内层来表示图像的样式。
我们可以认为来自所选内层的输出直接对应于图像的内容。然而,为了表示图像的样式,我们使用Gram矩阵方法计算内层输出的不同通道之间的相关性。
实施详情
在Python和TensorFlow中使用无监督深度学习算法实现神经样式转换的完整代码可在Google Colab此处访问-链接LINK
感谢您的阅读!
参考文献
https://www.tensorflow.org/tutorials/generative/style_transferhttps://www.tensorflow.org/tutorials/generative/style_transfer
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/07/13/%e5%9f%ba%e4%ba%8etensorflow%e7%9a%84%e7%a5%9e%e7%bb%8f%e9%a3%8e%e6%a0%bc%e8%bd%ac%e6%8d%a2/