zoukankan      html  css  js  c++  java
  • 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的加权求和,这个权是要调的超参数了

  • 相关阅读:
    oracle a:=100 和 b=:c 区别
    Oracle为表或字段添加备注
    oracle删除表字段和oracle表增加字段
    oracle数据库的一个表中,怎么设置字段的默认值
    VS2015密钥
    C# 调用WebApi
    OCX ClassId查看
    C++ 调用类的函数
    如何做一个标记为安全的ACTIVEX控件
    Java内存通道
  • 原文地址:https://www.cnblogs.com/shensobaolibin/p/9072477.html
Copyright © 2011-2022 走看看