Perceptual Losses ECCV 2016 (当年Stanford Fei Fei Li团队的成果)
keywords: CNN(Convolutional Neural Network), Perceptual Loss,Style Transformation, Super-Resolution
论文名称:
Perceptual Losses for Real-Time Style Transfer and Super-Resolution
Prerequisite:Convolutional Neural Network, Total Variation
首先要知道图像领域什么是convolution。
然后需要知道CNN的训练流程,达到可以剖析每一步是干什么用的程度,尤其是loss function作用。(不需要知道更新方式,比如SGD,adam)需要理解为什么CNN的精髓是BP(back propagation)。
没有亲手试验过用cnn训练图像可能对理解这篇论文的贡献会有影响。学习CNN的话,建议看油管上的Stanford公开课CS231n,加上他们的校网页的资料。跟下来6节课左右就能大概理解cnn了。
需要一点数学基础,要能看懂数学公式和理解含义。
目的:用新的提取图像特征的方法,结合不同的loss function用做实时的图像风格转化和超分辨率
重点:主要贡献是把objective function变成两部分。一部分提取特征,一部分计算loss。提取特征用了VGG16网络。计算loss的方程是他们自己定义的,分为“内容”和“风格”两个部分,加上像素层面的L2和total variation,四个值的和做成loss。
==================================================================================
下面是部分重点的细节介绍,上面看懂的不用再往下看了。
==================================================================================
为什么不用L2 loss?(以下是我的理解)
loss的计算是比较重要的一环,它决定了整个神经网络模型的训练走向。说的装X一点,定义loss是在抽象化的定义神经网络的输入与输出差距。说的通俗一点,就是告诉网络模型应该学习label的什么特征。在从图像到图像的训练中,不是什么都需要学习的。或者说有时候输出的图像和输入的图像,从像素层面计算的话会有很大的loss,但是视觉上却感觉不到,看起来还是很舒服。有的时候loss很小,但是产生loss的地方都是最要命的关键点,导致视觉效果不好。举个例子,比如下三张图都是iphone手机,左是原图。中间的图手机被虚化了。右经过了色调滤镜。如果算L2 loss的话,右图可能L2的loss值很大,但是视觉上还是能看清手机,没有关系。中间的可能L2 loss比较小,因为只有手机的部分被虚化了,可是手机的边边角角的像素改变了,手机的轮廓已经模糊了,视觉上不如右图好。(这就是举个例子,别较真哈)
也就是说pixel-wise的loss其实是在要求神经网络在做一些多余的任务,它追求的是两张图片的数值相等,在绝大多数的工作中这根本没有必要。所以用图像的特征作为loss才是更好的选择。(最好的办法其实应该根据具体的需要定制自己的loss function,但是那需要非常扎实的数学功底才行)作者用了pretrain的VGG16网络来提取图像的特征。
这里面的ys和yc可以来自于同一图片,也可以来自不同的图片。
其实这个loss network φ就可以看成是一个方程。方程的输入是ys,yc和y帽子。输出是lfea(y帽子, yc)和lstyle(y帽子, ys)。这两个loss是从vgg16里的j层(自己选)的feature map来的。
feature loss:
style loss:
其中的双竖线norm下角标2或者F是下面的意思:
然后把所有的loss加在一起:
这里面最后一项是pixel level的loss,论文里一笔带过了。
言归正传。loss算出来再更新前面的image transform network。作者把这个网络应用在图像风格转换和超分辨率上。完了。
还有一些其他的细节,比如计算速度的提升和效果对比,细节自己看论文吧。
论文解释的含糊的地方:
论文在解释数学公式,和yc,ys的关系地方写的比较容易引起歧义。比如下面一段:
Feature Reconstruction Loss. Rather than encouraging the pixels of the output image yˆ = fW (x) to exactly match the pixels of the target image y, we instead encourage them to have similar feature representations as computed by the loss network φ. Let φj(x) be the activations of the jth layer of the networkφ when processing the image x;
这个φj(x)的x其实指的是前面的yˆ,不是前面流程图里的x。他只是想很general的定义一个方程,方程的输入一般默认x。但是前面yˆ = fW (x)这里已经用了x了,这里如果换一个字母,或者直接用yˆ ,就不会产生误会了。
补充说明(不是论文的supplementary document:
作者在主页引用了Dmitry等人的分析关于batch norm的。内容是用instance norm代替batch norm的话可以显著的提高feedforward风格变换模型的质量。论文地址
References:
论文:https://arxiv.org/pdf/1603.08155.pdf
CSDN:wyl1987527 - https://blog.csdn.net/wyl1987527/article/details/56506653
作者主页:Justin Johnson
Supplementary Material:https://cs.stanford.edu/people/jcjohns/papers/eccv16/JohnsonECCV16Supplementary.pdf
项目主页:https://cs.stanford.edu/people/jcjohns/eccv16/
Torch版本github代码:github code torch
Tensorflow版本github代码(似乎非论文作者):github code tensorflow
instance normalization的分析:https://arxiv.org/pdf/1607.08022.pdf
CNN学习资料
- cs231n:https://www.youtube.com/watch?v=vT1JzLTH4G4&list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk
- stanford课程网页: http://cs231n.stanford.edu/
- 项目资料: http://cs231n.stanford.edu/syllabus.html