您的位置:首页 > Web前端

风格迁移系列-Image Style Transfer Using Convolutional Neural Networks

2018-01-03 11:00 531 查看

论文Image Style Transfer Using Convolutional Neural Networks

概述及相关工作

图像风格迁移任务,可以概括为把一张图像的纹理信息加到另一种图像上,而保持该图像的语义内容(比如,图像是一张狗的照片)不变。变换的难点在于如何明确的表征图像的语义信息,从而允许把图像的‘content’与‘style’二者分割开来。

风格迁移有时可以认为是纹理迁移。而纹理迁移的目的是在目标图像上合成源图像中存在的纹理,同时保持目标图像的语义信息。该领域存在很多非参(non-parametric)的方法,通过采样(sampling)源图像的纹理像素来实现。

但是,非参的采样方法只利用了图像的低层(low-level)特征,这造成了该类方法的局限。理想状态,风格迁移算法应该能够抽取图像的语义内容,再进行纹理合成。如此,那么搜要的任务就是如何独立的为图像的语义内容和纹理风格建模。这时CNN就派上用场了。

基于CNN的方法

CNN中由低到高的各个层其实是能表示图像不同层级的信息的,如



输入图像给CNN,网络不同的层有不同的feature map,实验用不同层的特征重建图像。(重建过程:使用梯度下降,最小化初始白噪声与输入图像/风格在CNN层中特征的距离)对于‘Content Reconstructions’,可以看到,用高层feature map重建的图像,失去了很多像具体的像素级信息,但依然保存了内容信息。

基于此,作者提出了’A Neural Algorithm of Artistic Style‘,利用CNN计算的特征来处理和操纵自然图像的内容和风格。

Content representation

首先,如何表征图像的内容?假设CNN第 l 层的通道数为Nl ,每通道的特征数为Ml ,其中Ml=HxW(feature map的高与宽)。那么用给一个矩阵Fl就可以表示图像在这层的特征,Fli,j表示第l层i通道第j个特征点。

用p表示真实图像,x表示生成的图像,定义loss为:



梯度反向传播可以依据:



具体要使用CNN的哪一层呢?选择技巧是,高层的特征会抓取图像更高级的内容信息,比如物体及其位置,但是不会限制图像的像素级值。从图1中也可以看到使用不同层的区别。

Style representation

然后,如何表征图像的风格信息?这里不同于内容表征直接使用feature map的值,而是经过变换的Gram矩阵G:

Gli,j=∑k=1Fli,kFlj,k

风格的表征,一般要融合多个层的层上的特征,这样才能得到稳定的、多尺度的图像表征。风格的loss表示为:





wl为不同层的权重参数。

梯度的反向传播计算为:



style transfer算法

实现风格迁移时,联合最小化内容与风格两种损失。



算法流程可以看图:



s1,分别计算并存储特征图的style特征,风格图的conten的特征;

s2,初始化一个随机白噪声,使用相同的网络,计算其style特征及conten特征。

s3,计算两种特征的loss

s4,反向传播loss,更新优化白噪声(所以,这里更新的是输入的白噪声,不是网络的参数)

s5,重复2~4,知道loss收敛

结果

展示一下效果图:



可调参数

模型中,有一下可以简单调节的参数,根据需要尝试调整可以得到不同的效果。

1.content loss与style loss比值α/β

理解起来很直观,看一下效果



2.content表征使用不同的层

在CNN中,越高的层中,特征越抽象。低层特征,能更多的匹配像素级信息;高层特征,不限制像素级的信息,只保留高级的语义信息。



3.初始值

初始值可以是白噪声,也可以使用原风格图或内容图。以为算法是一个迭代寻优的过程,生成结果差异不大。但是需要注意,只有初始值使用随机噪声,才能得到多样性结果。



4.照片风格迁移

该算法可以实现真实照片间的风格迁移,并不限于艺术画。



不足与讨论

首先,算法耗时,生成每张图像都要经过网络的前向与后向传播,迭代多次才可。

其次,对于高分辨率的图像,计算量增大,更耗时。

还有,作者说,把图像的‘内容’与‘风格’分开,是一个未定的问题。合成图像的质量目前也没有量化的标准,只能是‘看起来’。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CNN 风格迁移 transfer
相关文章推荐