TensorFlow实时任意风格迁移,送女朋友的创意礼物有了,【设计思想解读开源框架

本文介绍如何使用TensorFlow实现自适应实例规范化(AdaIN)进行实时任意风格迁移,通过创建自定义AdaIN层,结合编码器、解码器结构,减少块伪影并进行VGG预处理,实现创意的风格化图像。
摘要由CSDN通过智能技术生成

神经风格迁移一经提出,便引起了业界的巨大兴趣,一些网站允许用户上传照片以进行风格迁移,甚至有一些有人将其用于商品销售(例如某宝的“DIY数字油画定制照片”等等)。当七夕来临,又到了挠头想送女朋友什么礼物的时候了,虽然定制照片很有意义,但是并不能保证风格是自己想要的呀,这种固定的风格怎么能是技术宅的 Style?当然是用 TensorFlow 实现实时任意风格迁移,为女朋友用心选一张最合适的风格化照片了。

DIY数字油画定制照片我们虽然在改进风格迁移,重拾《星空》梦!中改进了传统的神经风格迁移,但是仍然只能使用训练所得的固定数量的风格。因此我们要学习另一种允许实时任意风格迁移的神经网络模型,获得更多创意选择。

自适应实例规范化


AdaIN(adaptive instance normalization) 是实例归一化的一种,这意味着其均值和标准差是在每个图像和每个通道 (H, W) 上计算的。在 CIN 中, γ γ γ 和 β β β 系数是可训练的变量,它们学习不同风格所需的均值和方差。在AdaIN中, γ γ γ 和 β β β 被风格特征的标准差和均值所取代:

A d a I N ( x , y ) = σ ( y ) x − μ ( x ) σ ( x ) + μ ( y ) AdaIN(x,y)=\sigma(y)\frac {x-\mu (x)}{\sigma(x)} + \mu(y) AdaIN(x,y)=σ(y)σ(x)x−μ(x)​+μ(y)

AdaIN 仍可以理解为条件实例规范化的一种形式,其中条件是风格特征而不是风格标签。在训练和推理时,我们使用VGG提取风格层输出并将其统计信息用作风格条件,这样避免了只能预先定义一组固定风格。

使用TensorFlow来创建自定义AdaIN层:

class AdaIN(layers.Layer):

def init(self, epsilon=1e-5):

super(AdaIN, self).init()

self.epsilon = epsilon

def call(self, inputs):

x = inputs[0] # content

y = inputs[1] # style

mean_x, var_x = tf.nn.moments(x, axes=(1,2), keepdims=True)

mean_y, var_y = tf.nn.moments(y, axes=(1,2), keepdims=True)

std_x = tf.sqrt(var_x + self.epsilon)

std_y = tf.sqrt(var_y + self.epsilon)

output = std_y * (x - mean_x) / std_x + mean_y

return output

Tips:可以看出,这是对 AdaIN 方程式的直接实现。其中 tf.nn.moments 用于计算特征图的均值和方差,其中轴1、2指向特征图的H,W。还设置keepdims

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值