目录
前言
上一篇博客介绍的图像迁移中的图像分割以及几个常用的分割网络,这一篇接着介绍图像迁移中的另一个分支——风格迁移。风格迁移的输入有两个,一个是风格输入,一个是内容输入;而输出是一个,生成变成输入风格的内容。
input(A style )+ input(B content) == output(C style+content)
二、风格迁移 Image Style Transfer
1.假设
Images can be represented by contents and styles
即:满足假设没有只有风格的图片,也没有只有内容的图片
对于输入图片A,我们需要它的风格,但图片本身不止有风格记为As,也有一定的内容记为Ac
对于输入图片B,我们需要它的内容,但图片本身不止有内容记为Bc,也有一定的风格记为Bs
对于输出图片C,我们需要它有A的风格和B的内容,C图片本身有风格记为Cs,也有一定的内容记为Cc
The higher a layer is, the more semantic info we’ll get; The lower a layer is, the more loca info we’ll get.
即:神经网络越深的层语义信息越丰富,越浅的层位置信息越丰富
事实上这个假设在整个神经网络中都是满足的
We can transfer an image’s style by minimizing the loss of their styles and contents.
关于loss计算,最小化 loss(Cs,As)+loss (Cc,Bc),当然,两个loss前是有一定的系数比例的,需要人为进行设置
2.假设带来的问题
How to represent contents?
怎么表示内容?
How to represent styles?
怎么表示风格?
How to minimizing the gap?
怎么计算loss
How to combine content / style?
怎么把内容和风格结合起来?
3.做风格迁移的思路
(1) backbone
首先,有三个网络,这三个网络都是相同的backbone,分别对应风格输入的网络,内容输入的网络,输出的网络。
在这里用到的都是VGG16,而且参数是固定的,也就是这三个网络是完全一样的。(复杂的网络可以理解为一个复杂的函数F,也就是这三个backbone是用相同的三个函数F计算)
(2) content loss
对于内容损失,计算内容输入网络和输出网络的高层特征图之间的损失:(因为语义往往在高层特征图中)
(3) style loss
对于风格损失,计算每层风格网络特征图和输入之间的损失然后求和(⑤⑥),需要注意i到,风格损失是每层都计算loss取loss和,内容损失只计算高层特征图之间得loss
(4) Combine contents and styles
将风格损失和内容损失按一定的系数加和,得到整个网络的loss
其中,系数可以规定偏重风格还是偏重内容。
(5)Generated from white noise
这个模型的特点是模型固定,所以训练的时候是不训练模型backbone的,那么训练什么呢?训练的是输出图片的噪声
一开始的时候原始输出是一张噪声图记作F(output),通过迭代loss计算过程
MIN_loss(F(content),F(output),F(style))
使得中间的F(output)能与content的内容loss小,与style的风格loss小,最终生成红框框中右侧部分的图,就是输出了。
但是这样的模型有一个缺点,那就是每换一个输入就需要重新迭代计算一次输出,每个输入都要训练一次噪声。
4.gram matrix
5.另一种思路
损失网络跟前面一样,也是固定的,加了前面一个网络部分用来生成输出。(Functional network + Loss network)