基于神经网络的图像风格迁移(一)

时间:2024-04-03 08:31:21

    图像的风格迁移始于2015年Gates的论文“Image Style Transfer Using Convolutional Neural Networks”,所做的工作很好描述,就是由一张内容图片和一张风格图片进行融合之后,得到经风格渲染之后的合成图片。示例如下


基于神经网络的图像风格迁移(一)

    对于人来说,可以很轻易的分辨出不同风格的图片,但是如何让计算机理解什么是风格是这个项目的难点,下面详细解析项目的原理。



基于神经网络的图像风格迁移(一)

    Gates使用的是经典的VGG19网络,从上图可以看出,VGG19可以分为5个block,每个block都是由若干卷积层及之后的池化层组成,这5个block的池化层都是最大池化,只是卷积层的层数不同,第一个block有2层卷积(conv1_1和conv1_2),第二个block也是2层卷积,之后的3个block都是4层卷积,最后是两个全连接层(FC1和FC2)和一个用于分类的softmax层。但是风格迁移任务不同于物体识别,所以我们不需要最后的两个全连接层和softmax层。



基于神经网络的图像风格迁移(一)

    最左侧的两张图片(input image)一张是作为内容输入,一张是作为风格输入,分别经过VGG19的5个block,由浅及深可以看出,得到的特征图(feature map)的高和宽逐渐减小,但是深度是逐渐加大,Gates为了更直观地让人看到每个block提取到的特征,所以做了一个trick,即特征重建,把提取到的特征做了一个可视化。但是细心的读者可以看出,对于内容图片特征的提取在很大程度上是保留了原图的信息,但是对于风格图片来说,基本上看不出原图的样貌,而是可以粗略的认为提取到了风格。这是为什么呢?原来对于这两张图片做的特征提取处理是不一样的,在下一张图就可以看出。


基于神经网络的图像风格迁移(一)

    两侧的图片分别是风格图片,记为 基于神经网络的图像风格迁移(一),和内容图片,记为 基于神经网络的图像风格迁移(一),同时还需要有第三张随机产生的噪声图片,我们需要不断的在噪声图片上迭代,直至得到结合了内容和风格的合成图片。内容图片基于神经网络的图像风格迁移(一)经过VGG19网络的5个block会在每层都得到feature map,记为基于神经网络的图像风格迁移(一),即第l个block得到的特征,噪声图片基于神经网络的图像风格迁移(一)经过VGG19网络的5个block得到的特征记为 基于神经网络的图像风格迁移(一)

    对于内容损失,只取conv4_2层的特征,计算内容图片特征和噪声图片特征之间的欧式距离,公式为

基于神经网络的图像风格迁移(一)

    对于风格损失,计算方式与内容损失有些许不同。上面已经知道,噪声图片基于神经网络的图像风格迁移(一)经过VGG19网络的5个block得到的特征记为 基于神经网络的图像风格迁移(一)基于神经网络的图像风格迁移(一)的gram矩阵记为基于神经网络的图像风格迁移(一),风格图片基于神经网络的图像风格迁移(一)经过VGG19网络的5个block得到的特征,再计算gram矩阵后得到的内容记为基于神经网络的图像风格迁移(一),之后计算基于神经网络的图像风格迁移(一)基于神经网络的图像风格迁移(一)之间的欧式距离,其中gram矩阵的公式为:                                       

基于神经网络的图像风格迁移(一)

    风格损失的公式为:

基于神经网络的图像风格迁移(一)

公式之前的系数是标准化操作,除以图片的面积(长*宽)的平方。

    还需要注意的是,计算风格损失时,5个block提取的特征都用来计算了,而计算内容损失,实际上只用了第四个block提取的特征。这是因为每个block提取到的风格特征都是不一样的,都参与计算可以增加了风格的多样性。而内容图片每个block提取到特征相差不大,所以只取一个就好,而且使用哪一个也没有规定,与各人审美有关,Gates选用的是第四个block,而Johnson在论文“Perceptual Losses for Real-Time Style Transfer and Super-Resolution”中使用的是第二个block。

    而总损失即为内容损失和风格损失的线性和,改变α和β的比重可以调整内容和风格的占比。

基于神经网络的图像风格迁移(一)

    代码中还使用了一个trick,总loss的计算还会加上一个total variation loss用来降噪,让合成的图片看起来更加平滑。

    最后还有一点需要注意,这一点非常关键,曾经让我困惑了很久,就是总loss需要经过梯度下降不断迭代,那这里是对什么求偏导,大多人会以为是对权重w求偏导,这是错误的。我们的权重信息是从vgg19网络模型中直接读取的,不需要更新,也不能更新。实际上是对噪声图片基于神经网络的图像风格迁移(一)求偏导,不断迭代噪声图片基于神经网络的图像风格迁移(一),收敛后就会得到我们需要的合成图片。

    最后的最后放上自己的实验结果。


基于神经网络的图像风格迁移(一)

基于神经网络的图像风格迁移(一)

基于神经网络的图像风格迁移(一)