Fast Patch-based Style Transfer of Arbitrary Style 理解

流程:

提取人脸特征点->人脸摆正->提取人脸->人脸替换->人脸倾斜->贴回去

前三个和后两个用别人的API就好

关键是做人脸替换

人脸替换:

训练人脸替换:

对于神经网络输出的图像X'我们要考虑四个东西

X'的内容,X'的风格,X'的亮度,X与X’的接近程度

那么就有四个loss_function

为了计算loss我们使用了VGG

VGG可以看做一个用来提取神经网络特征的东西

他是一个深层神经网络,我们这里用的是19层的版本

他已经预训练好了

他是全卷积神经网络

我们将生成的图片(X‘)与原图(X)一起输入VGG中

然后我们有19 × 2个一一对应的feature map

X'的内容

对于第i层VGG我们输入X,X'之后会得到两个对应的feature map

我们把每一个对应的feature map的每个元素做相减然后平方

我们相减平方之后得到 f(i)

然后再求平均值f(i)_mean

我们求出原图的feature_map的平均值g[i]_mean

最后将f[i]_mean / g[i]_mean得到这一层的loss

将所有层的loss做平均即得到内容损失函数

X’的风格

运用X'和Y(想转换的风格的图片)输入VGG

得到对应的feature map之后fi(X'),fi(Y) 

我们从fi(Y)每3 × 3取一块(就像做卷积那样)

对于每一块,我们在fi(X')的相同位置附近找一个最接近的块

然后计算他们之间的距离

距离函数为:

我也不知道为什么是这样的

X‘的亮度

因为VGG是用来提取图像特征来做图像分类和图像识别的

所以用VGG去评价亮度就不合适了

这里作者自己训练了一个神经网络用来评价亮度

 

然后把我们的X和X‘输入将结果的输出做

X与X‘的接近程度:

就这玩意没什么好说的

也是运用了风格损失函数中的思想

最后总的loss就是这四个个loss的加权求和,这个权是要调的超参数了

原文地址:https://www.cnblogs.com/shensobaolibin/p/9072477.html