:【迁移】用神经风格迁移生产美图,你也是梵高( 三 )


笔者做出的最后一个修改是将content_layer转换为conv3_2 , 而非Gatys等人使用的conv4_2 。 笔者读过的大多数文章也推荐使用conv4_2 , 但是笔者发现使用conv4_2会忽略掉一些细节 , 且生成图片的风格会覆盖内容 。
另一方面 , conv3_2可以保留这些细节 , 而无需对像素完美性进行过度惩罚 。
进一步质量提升
现在已经讨论了笔者的神经风格迁移代码中所实施的全部技巧 。 在原有的PyTorch教程基础上 , 已经极大提高了迁移质量 。 此外 , content_weight和 style_weight对于特定的图像选择具有更高的鲁棒性 。
例如 , 笔者发现如果没有对PyTorch教程进行适当的调整 , 一组图像的 style_weight很难轻松迁移到另一组图像上 。
也就是说 , 去除生成图片中的高频噪音可能会得到更好的结果 。 文章《可微的图像参数化》(DifferentiableImage Parameterization , 接触相关话题必须阅读的另一篇文章)提出了很有趣的方法 。
:【迁移】用神经风格迁移生产美图,你也是梵高
本文插图
该文中 , 作者先在(去噪)傅里叶空间而非(噪声)像素空间中对input_img 参数化 。 因为input_img 由梯度下降法生成 , 对输入去相关化相当于一个预调节器 , 可通过梯度下降法更快找到最小值 , 从而使优化更易(与在监督学习任务中去除相关特征类似) 。 除了类似的简短解释如在去相关空间中发现的最小值更宽泛、更健壮外 , 我并不清楚为什么这能提高迁移质量 。
更简单的方法是通过直接或间接惩罚来抑制高频噪声 。 直接惩罚可通过将input_img的全变差损失添加到优化对象中来实现 。 相反 , 通过在每次梯度下降步骤后对input_img进行模糊 , 或者在将噪音应用于input_img之前对梯度进行模糊 , 可实现间接惩罚 。
这两种方法存在的问题是 , 它们还会对真正的高频特性造成不利影响 。 可通过在训练时缩减总变化损失或模糊量来进行一定程度上的改善 。
:【迁移】用神经风格迁移生产美图,你也是梵高
本文插图
笔者的初始目标是使用机器学习生成媒介形象图片 。 但在反复实验中 , 无意发现了一些很惊人的事 。 对笔者来说 , 整个过程中最有趣的部分是神经网络的端到端可微性 。 我们很容易地就能“颠倒”一个原本用于区分猫狗的模型 , 并用其生成无数种不同风格的图像 , 你还可以尝试用随机森林模型进行操作 。
【:【迁移】用神经风格迁移生产美图,你也是梵高】用神经风格迁移生成好看的图片了 , 这个过程听起来简单 , 但想要得到高质量的结果 , 确实是个技术活 , 可见即使有机器学习辅助 , 成为梵高依然不是件容易的事 。


推荐阅读