Perceptual Losses for Real-Time Style Transfer and Super-Resolution【阅读笔记】
一些经典的图像问题,如去雾、去噪、超分辨率等等其实都可以看作是image transformation问题。将输入image transform成output。目前比较常用的一种方法就是用监督的方式训练一个feed-forward的CNN,用像素级的损失函数衡量output和ground-truth的差异。这种方法在测试时很高效,但像素级损失无法捕捉一些视觉差异。因此就有一些工作来研究perceptual loss function(通过预训练的CNN中抽取的高层图像特征衡量差异)生成了比较高质量的结果,但速度很慢。
本文中使用一个使用perceptual loss 的feed-forward CNN 用于image transfer和SR任务。训练时可以更好地衡量图像的相似性,test时又可以做到实时。
原作者项目地址:https://web.eecs.umich.edu/~justincj/eccv16/
网络包含两部分:image transformation network和loss network。
Loss Network
loss network($\phi$)实际是一个预训练的图像分类网络,这个网络实际已经学会了如何encode图像的perceptual和semantic信息,在训练时保持固定不变。通过这个网络给出两个reconstruction loss:feature reconstruction loss($l_{feat}^{\phi}$)和style reconstruction loss($l_{style}^{\phi}$)。分别用于衡量输入x与content target($y_c$)和style target($y_s$)的差异。对于style transfer问题,$y_c=x$,每一种$y_s$训练一个网络。对于SR问题,$y_c=ground-truth I^{HR}$,不使用$l_{style}$,对每一种缩放因子都训练一个网络。
本文中使用的是在ImageNet上预训练的VGG-16作为loss network
Feature Reconstruction Loss
$l_{feat}^{\phi, j}(\widehat{y}, y)=\frac{1}{C_j H_j W_j}||\phi_j(\widehat{y})-\phi_j(y)||_2^2$,即第$j$层的activation的均方差
实验发现使用低层会鼓励output 在视觉上和y indistinguishable;使用高层会使图像内容和整体空间结构被保留,但颜色、纹理和exact shape不会。可以使得output perceptually similar但不会force them to match exactly.但使用高层,在SR任务中会带来grid-like artifacts,因此对于SR任务使用低层比较好。
Style Reconstruction Loss
定义$G_j^{\phi}(x)$为第$j$层各特征的Gram矩阵,是该层特征的未零均值化的协方差
$G_j^{\phi}(x)_{c,c'}=\frac{1}{C_j H_j W_j}\sum_{n=1}^{H_j}\sum_{w=1}^{W_j}\phi_j(x)_{h,w,c}\phi_j(x)_{h, w, c'}$。在实际计算中可以将$\phi_j(x)$化为一个$C_j\times H_j W_j$的矩阵$\psi$, $G_j^{\phi}(x)=\psi\psi ^{T}/C_j H_j W_j$。
$l_{style}^{\phi, j}(\widehat{y}, y)=||G_j^{\phi}(\widehat{y})-G_j^{\phi}(y)||_F^2$,文中取了多层来计算style loss并取其和
文中还使用了基于低层像素信息的loss:pixel-loss 和total variation regularization.使用total variation regularization是为了鼓励局部光滑。通过对上面的几种loss进行加权作为总的loss。但相比像素级的loss,使用feature reconstruction loss虽然可以带来更好的细节在边界处表现也更好,但PSNR指标并不一定高。
Transformation Network
transformation network在文中使用的是残差结构,用strided and fractionally strided convolutions来代替池化层进行上采样和下采样。小数步长的卷积可以理解为在输入单元之间插入0,其实就是反卷积deconvolution。针对style transfer问题,虽然输入和输出的尺寸是一样的,但文中仍然先进行了下采样再进行上采样,目的是:
- 下采样后可以使用更大的网络而不用增加计算消耗。$3\times3\times C \oplus C\times H\times W$的multiply-adds个数与$3\times3\times DC \oplus DC\times H/D\times W/D$是相同的。
- 下采样$D$倍后,每一个$3\times3$的卷积有效感受野就会变为原来的$D$倍,扩大感受野比较有利。