Tensorflow实现照片风格的迁移

相信很多人都用过Prisma这个app,可以将普通照片转换为想要的风格。其背后的原理,就是通过神经网络学习某个图像的风格,然后再将这种风格应用到其他图像上。
这里写图片描述
最近看了相关论文,A Neural Algorithm of Artistic Style还有Perceptual Losses for Real-Time Style Transfer and Super-Resolution,又参考了一些github上的相关项目,自己用tensorflow也实现了一个类似的网络。

网络结构

网络结构几乎完全按照论文中的描述实现,不同的是将论文中的Batch Norm全部换成了Instance Norm,原因是这样做以后,生成的图像效果更好。同时,deconvolution(transposed convolution)也全部换成了resize-convolution,理由就和我的上一篇文章中说的一样,可以防止棋盘格纹理的产生。再者,通常的zero padding被reflect padding取代,为了减少边界效应。另外,在我参考的github实现当中,我发现其residual block中没有BN或IN,这一点是和论文不同的,我自己加上以后,发现对最后结果影响不大,但是学习率和loss function等需要仔细调整,否则训练容易发散。
这里写图片描述

Loss Functions

要实现快速的风格转换,关键是使用Perceptual Losses。一个训练好的CNN,每一层特征抽象程度是不同的,层数越深,其学得的特征就越抽象,对图像的表达就越高层。Perceptual Loss就利用了CNN的这个特点。将一副普通照片输入我们的网络生成一副图像,再将该图像输入一个预训练的网络中(称为损失网络,loss net),我们希望生成的图像在loss net高层的特征尽可能和原始照片一致(保留原始照片的内容和结构),而较低层的特征尽可能和风格图像一致(保留风格图像的色彩和纹理)。这样,通过不断的训练,我们的网络能同时兼顾以上两个要求,从而实现了照片风格的转换。

论文中的Perceptual Losses主要由3部分组成,第一部分被称为feature loss或content loss,它度量了生成的图像与原始照片在类容结构上的一致性。

lϕ,jfeature(y^,y)=1CjHjWj||ϕj(y^)ϕj(y)||2F

其中
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值