0%

【CS20-TF4DL】08 Style Transfer

上节课我们用 Tensorflow 搭建了一个简单的 CNN 模型,这节课我们看看除了 MNIST 之外我们还能做点什么


更新历史

  • 2019.08.14: 完成初稿

TFRecord

啥是 TFRecord?

  1. Tensorflow 推荐的存储格式
  2. 二进制存储,实际上是序列化的 tf.train.Example protobuf 对象

为啥要用二进制?

  • 更好利用磁盘空间
  • 方便移动
  • 可以处理不同类型的数据(比如,可以把图片和标签放到一起)

如何把数据转换成 TFRecord 格式呢,具体参考 18_basic_tfrecord.py

Style Transfer

数学不复杂,但是实现起来需要一些技巧。风格迁移的核心问题就是找到一副满足如下条件的图片:

  • 内容与 content image 最接近
  • 风格与 style image 最接近

如何做到呢?我们关注下面两个 Loss:

  • Content Loss
  • Style Loss

这里我们要先介绍一下 Feature map 这个概念,一个卷积神经网络有许多层,每一层都会提取特定的 feature,我们把特征可视化后就会发现:

  • lower layers 提取的是 content features
  • higher layers 提取的是 style features

实际训练时候的技巧在于(不太好翻译,直接上英文):

  1. Train input instead of weights
  2. Multiple tensors share the same variable to avoid assembling identical subgraphs
  3. Use pre-trained weights(from VGG-19)

相关代码

因为训练要太长时间,我也没有 GPU,所以就只贴出来具体的代码,感兴趣的同学可以尝试下