主要参考资料: 两分钟demo:快速Neural style艺术风格转换
不过,上面的资料主要还是抛砖引玉用(或者说是推销mxnet啦),要了解细节最好还是得读读原版论文,甚至源代码。所以本篇笔记主要是记录一下算法核心idea和代码实现细节。
Neural Style 基础版
- 原版论文 A Neural Algorithm of Artistic Style
核心就在论文的这张图上。
作者定义了一个5层的CNN网络,梵高的星空在通过第一二三层的时候保留了一些原图的细节,但是在第四第五层的时候,就变成了“看起来是梵高星空的样子”这样的抽象特征。
这时候作者机智的想到了,如果把一张梵高一张其他照片同时都放到这个CNN网络里,经过合适的调整让第二张照片在第四五层接近梵高,而第一二三层保持和原来差不多,那就可以模仿梵高了!
————–摘自 http://phunter.farbox.com/post/mxnet-tutorial2
主要idea就是上面说的。但具体实现就有一些细节问题要处理了。
1. 具体的网络怎么train。先把目标style的艺术图送进去网络,得到卷积层的值。再把我们的输入content图送进去网路,得到卷积层的值。最后输入一个白噪声的图片或者原始content图作为初始值开始训练,使这张图片的style在卷积层的特征跟艺术图相似, content跟原先自己相似。有个要注意的地方就是普通训练cnn网络是image作为数据,训练出网络的参数。这里网络参数其实是固定的,我们要训练的“权重”其实是图片,但一样也是通过BP。所以有点费时间的,后面引出优化方法。
2. style的相似度怎么衡量。content的相似度比较好办