上周写了深度学习与艺术——画风迁移 Neural Style的文章,这周就来聊一聊Fast Neural Style,从名字可以看出,Fast Neural Style的最大的特色就是快,也就是说如果再优化网络配置ok的话完全可以达到落地应用的地步了。
0 回顾Neural Style
在聊Fast Neural Style之前,我们先来回顾一下Neural Style,其实用Gatys的一张图就可以解释Neural Style在做什么(如下图)。Neural Style是Gatys提出的不同于传统风格迁移的一种新方式,它利用卷积神经网络可以完成不同图像之间的风格迁移,使人们产生一种视觉上的“错觉”。
1 Fast Neural Style
Fast Neural Style论文:Perceptual Losses for Real-Time Style Transfer and Super-Resolution
论文链接:https://arxiv.org/abs/1603.08155
1.1 Fast Neural Style的两个任务
Fast Neural Style主要是有两个任务:风格迁移任务和单张图像的超分辨率任务。 风格迁移任务同Neural Style相同,将图像A的风格前已在图像B的内容上,生成具有图像A风格且与图像B内容相同的图像C;单张超分辨率任务指的是从输入的低分辨率图像生成一张高分辨率的图像。Fast Neural Style的体系含有两部分,分别是图像迁移网络(image transformation network , f W f_W fW) 和损失网络(a loss network , ϕ \phi ϕ) ,如下图所示;
1.2 Image Transform Net
基本的结构是用了五个残差模块;没有池化层,用的是卷积步长>1和卷积步长<1的卷积来进行下采样和上采样;激活函数用的书Relu激活函数;卷积核的大小是9x9和3x3;
【不同的任务输入图像输出图像的尺寸是不同的】
对于风格迁移任务:input——256x256x3;output——256x256x3;
对于超分辨率任务:input——(288/f)x(288/f)x3;output——288x288x3;
【Downsampling下采样和Upsampleing上采样】
对于风格迁移任务,网络先使用的是步长为2的卷积残差块去下采样,再使用2层卷积层使用步长为0.5的上采样。虽然输入和输出具有相同的大小,但先下采样后再上采样对网络仍有益处:一是可以减少计算量,二是可以有益于可接受的感受野。
1.3 Loss Network
在我们要了解loss network之间,我们先来看一下损失函数(要保证损失函数可微可导可回传)。其实我们可以这样理解损失函数:之所以有损失函数,是因为我们生成的和真实存在的或者是ground truth之间存在着差异,我们要找到一种数学上的方式来描述这种差异,并且可以在迭代和优化中不断缩小这种差异,所以损失函数在一个网络中是十分重要的。网络用两个感知损失函数定义了不同图像之间的高水平感知和语义差距;并且用了在ImageNet数据集上预训练的VGG16的网络。
【特征重构损失函数】Feature Reconstructions Loss
特征重构的意义不在于逐个像素点的match,而是想要得到特征的相似,也就是说我们要在Feature Map上有一种关系,假设我们在j层上的输出Feature Map的大小是: C j ∗ H j ∗ W j C_j * H_j *W_j Cj∗Hj∗Wj,那么,我们用欧氏距离来衡量这种特征相似性,如下式:
l f e a t ϕ , j ( y ^ , y ) = 1 C j H j W j ∣ ∣ ϕ j ( y ^ ) − ϕ j ( y ) ∣ ∣ 2 2 (2) l^{\phi , j}_{feat}(\hat{y},y) = \frac{1}{C_jH_jW_j} || \phi_j(\hat{y})-\phi_j({y}) ||_2^2 \tag2 lfeatϕ,j(y^,y)=CjHjWj