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的加权求和,这个权是要调的超参数了