简单快速的Style Transfer(利用VGG19)-笔记

风格转移技术通过保留输入图片内容并应用另一图片风格,实现艺术效果。本文介绍了一种无需GANs、仅利用预训练的VGG19图像分类模型的快速方法。通过计算内容损失和风格损失,调整输入图片像素,实现风格转换。内容损失关注图像内容的一致性,风格损失则衡量局部纹理的相似性。在Tensorflow中加载VGG19模型,选择特定层计算损失,通过梯度下降更新输入图片,从而达到风格转移目的。

What is Style Transfer

Style Transfer, 风格转移,即把图片A变成图片B的风格,但保持图片A的内容不变,举个栗子,假设下图左是你自己的作品,中图是梵高的星空,右图则是风格转移算法的结果。
在这里插入图片描述

How to do it?

风格转移的实现方法很多,复杂的算法使用到GANs,其结果会非常的精美,但会需要(十分)强大的算力(和钱)。一些改进的方法能够显著将GANs类模型的计算成本控制在合理范围,例如将一张图片切割成很多小的方块,对每个小块进行风格转移,最后再将它们拼起来。

但实际上存在一种更简单更快速的方法——不需要用到GANs、只需要借助pre-trained image classification CNN,即可完成风格转换。理解其原理之前,必须先简单提一下CNN是如何完成image classification的,我们知道CNN classifier是由很多很多的CNN神经网络组成的,不同的CNN的kernel size不一样,较浅的layers的kernel size都比较小,这样可以抓取一些细微的特征,例如动物的毛发、金属表面的质感等等,较深的layers的kernel size会逐渐增大,这样可以抓取一些更完整的特征,例如眼睛、尾巴、车轮等等。可以发现,刚刚描述的较浅的layers描述的接近于一张图片的styles——油画画笔的texture、色块的分布等等,而较深的layers则描述的更多的是一张图片的内容——眼睛、尾巴、车轮等等。于是一个简单的风格转移模型就是利用CNN classifier不同的layer抓取的内容不一这个特点来实现快速、低成本的风格转移。

具体实现方法

需要利用的工具:VGG19(in Tensorflow), Python
(我们甚至不需要GPU)

Flow

  1. 将input图片feed进一个pre-trained image architecture, like VGG or ResNet.

  2. 计算Loss
    1)Content:把content image的content layer, Fl∈Rm,nF^{l} \in \mathcal{R}^{m ,n}FlRm,n提取出来,将content layer变平成一个向量fl∈Rm∗n,1\mathbf{f}^{l} \in \mathcal{R}^{m*n,1}flRmn,1;将生成的图片Pl∈Rm,nP^{l} \in \mathcal{R}^{m ,n}PlRm,n也做同样的变平处理成一个向量pl∈Rm∗n,1\mathbf{p}^{l} \in \mathcal{R}^{m*n,1}plRmn,1,那么content loss就是fl\mathbf{f}^{l}flpl\mathbf{p}^{l}pl的Euclidean Norm:

    Lcontent(p,f,l)=12∑i,j(Fi,jl−Pi,jl)2L_{content}(\mathbf{p},\mathbf{f},l)=\frac{1}{2}\sum_{i,j}(F_{i,j}^l-P_{i,j}^l)^2L

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值