风格迁移

风格迁移应用非常有趣,通过风格迁移也可以看到深层网络如何在不同层次提取特征。

可以看到,不只是颜色发生了变化,边缘,色块,对比度,甚至是笔触­都转换成了明显的绘画效果.

《吴恩达深度学习》第四课第四周练习是一段风格迁移程序填空,编程语言为 Keras,做完后感觉理解了细节的具体实现,但整体搭建框架和数据流向还比较糊涂。于是使用 Pytorch 又实现了一遍。下面列出此过程中的一些收获。

  • 如何使用预训练模型生成图片 例程中涉及三张图片,一张提供内容C,一张提供风格G,目标是生成新图片N,新图片可以从白噪声开始,也可以与内容图片一致。与对抗生成网络不同的是,风格迁移并不使用从小图逐渐放大的方法生成数据,而是将图N的 Tensor 设置成 requires_grad=True,然后通过梯度调整图片内容,类似于梯度攻击中生成对模型更有攻击性的数据。
  • 如何结合风格和内容 误差函数由两部分组成,一部分是 C 内容与 N 内容的差异,另一部分是 G 风格与 N 风格的差异,内容差异比较简单,只需要计算某一层两图输出的距离即可。风格被定义为,同一层各个通道之间的关系,比如在 CNN 第四层输出 128 个通道,计算各个通道间数据的相关性,若通道 A 和通道 B 相关性高被认为是某种风格,从而判断两张图片风格是否一致。每一层的输出都可以用来评价风格和内容是否一致,并根据其差异调整图片,使其向更加一致的方向变化。

参考