如果不知道风格转换的,移步 http://blog.csdn.net/hungryof/article/details/53981959 ,瞄上一眼再回来。
1. 以前风格转换速度之尴尬
如果从得到效果图速度来分的话,可以分为三个阶段。
阶段一
最初的用神经网络实现的风格转换是需要不断迭代的,不仅速度慢,而且我要在A图加上B图的风格,就需要分别根据这两幅图进行不断前反向传播,更新输入,效率实在太低。称之为style transfer
阶段二
后来人们就想能不能直接一个前向传播搞定啊~,然后他们想出了,先训练一个 G , 这个
阶段三
大家就想,我怎么直接输入任意A和B,一次前向出来呢?如果能成功,那么速度就不需要考虑了,因为已经到达顶峰了。
style-swap 就是第三阶段的开始。
0.1秒出结果。
2. Style-swap的魅力
效果还是挺不错的嘛~~再放几张。。
用上面素描画形成的效果:
别问这人是谁,一个好友的qq头像,有较多的纹理,就直接拿过来试了试效果。。
3. style-swap浅谈
论文分为2个部分,第一部分就是常规的迭代方式,第二个是将常规的改成一次前向的方法。
3.1 style-swap的新方法
以前不都是认为Gram操作就是相当于“风格”的一种表示嘛,他们认为,如果我要得到C图的内容加上S图的风格,那么我希望我的网络输入 I 在高维度特征
后来Chuan Li的 Combining Markov Random Fields and Convolutional Neural Networks for
Image Synthesis将Style loss改成了MRFs Loss Function,依旧保留content loss。这篇论文第一部分工作其实就单纯用第一种loss了,舍弃了content loss。 这篇论文的详细讲了计算这种Loss的高效方法。这篇论文的主要贡献还是第二部分工作,引入了Inverse Net,这使得一次前向传播得到的特征图成为可能。
3.2 实现方法
C 和
- 先提取一系列块
ϕi(C) 和 ϕj(S) 。其中 i∈nc , j∈ns ,其中 nc 和 ns 分别是能从 ϕi(C) 和 ϕj(S) 抽取的块数。- 对于每块 ϕi(C) ,我们希望选择其最近的style 块 ϕj(S) , 称之为 ϕssi(C,S) .
ϕssi(C,S):=ARGMAXϕj(S),j=1,⋯,ns<ϕi(C),ϕj(S)>||ϕi(C)||⋅||ϕj(S)|| - 这步称之为重建 Φss(C,S) 。这时候我们只需要平均一下那些重叠区域的值就行了。这样就可以得到 Φss(C,S) ,称之为 Φss(C,S) 的重建。
因此总的优化目标是:
Istylized(C,S)=ARGMINI∈Rh×w×d||Φ(I)−Φss(C,S)||2F+λℓTV(I)3.3 高效方法
这里可能会写的比较啰嗦。。因为要讲的很明白,确实需要啰嗦点。。为了简便,提取的块spatial size就3x3吧, relu3_1层是256个通道。下面的三步统称为style-swap.
3.3.1 实现方法的第一二步解释
先看看3.2节实现方法的第一二步干啥:
ϕssi(C,S):=ARGMAXϕj(S),j=1,⋯,ns
- 对于每块 ϕi(C) ,我们希望选择其最近的style 块 ϕj(S) , 称之为 ϕssi(C,S) .