#科技刀#使用神经风格转移NST得到绚丽惊奇的图片( 三 )


最后 , 我最后的修改是将content_layer切换为conv3_2 , 而不是Gatys等人用的conv4_2 。 虽然我读过的大多数文章也推荐使用conv4_2 , 但是在conv4_2上会清除掉图像细微的细节 , 并且图像样式压倒了所生成图像中的内容 , 另一方面 , conv3_2仍保留这些精细的细节 , 不会像较低图层那样过度牺牲图像像素的完美性 。 确实 , 我们可以再次查看图3来确认是这种情况 。
进一步提高质量
现在 , 我们已经讨论了我在实现神经样式转换代码中的所有技巧 。 至此 , 我们已经在原始PyTorch教程的基础上大大提高了传输质量 。 此外 , content_weight和style_weight比图像的特定选择要强大得多 。 例如 , 在PyTorch教程中 , 我发现 , 如果没有适当的调整 , 一组图像上的良好style_weight不会轻易转移到另一组图像上 。
话虽如此 , 通过尝试消除生成图像中的高频噪声 , 可以获得更好的结果 。 我遇到的最有趣的方法是来自《差异图像参数化》一文 , 这是另一个必须读的内容涉及相似的主题 。 在本文中 , 作者首先通过在(去卷积)傅里叶空间而不是(被卷积)像素空间中对其进行参数化来生成input_img 。 由于input_img是通过梯度下降生成的 , 因此对输入进行去相关可以作为前提条件 , 通过允许梯度下降更快地找到最小值来简化优化(类似于在监督学习任务中删除相关特征) 。 为什么这样导致更高质量的转移 , 在诸如波折相关的空间中发现的极小值之类的波状解释更广泛 , 更可靠 。
一种更简单的方法是通过直接或间接惩罚高频噪声来抑制它 。 通过将input_img的总变化损失添加到优化目标中可以直接对噪声进行惩罚 。 相反 , 可以通过在每个梯度下降步骤后模糊input_img或在将梯度应用到input_img之前对其进行模糊处理来隐式惩罚噪声 。 两种方法存在的一个问题是它们还不利地惩罚了真实的高频特征 。 通过缩小训练过程中的总变化损失或模糊量 , 可以稍微改善这一点 。
结论
如果到此为止 , 你现在应该对使用NeuralStyleTransfer生成漂亮的图像有很多了解 。 虽然从概念上讲很简单 , 但要获得高质量的结果需要多加注意 。 我最初的目标是使用机器学习来生成中型个人资料图片 。 经过反复尝试 , 我们偶然发现了一些看起来很惊人的东西 。 整个过程中最令人兴奋的部分是神经网络的端到端可区分性 。 只需很少的努力 , 我们就可以“反转”最初训练用来区分猫和狗的模型 , 尝试使用随机森林进行操作 , 并使用它来生成无数种不同样式的图像 。