CNN实现图像风格迁移 ---Image Style Transfer Using Convolutional Neural Networks

目录

1. INTRODUCTION

2. Deep image representations

2.1  内容表示

2.2. Style representation

 2.3  风格迁移

3. Results


2016 年,一位俄罗斯工程师读到了由三个德国人写的这篇论文而研发了一个将照片转换为艺术作品的Prisma app。这款应用刚在 iOS 上发布,15 天内下载量 750 万,火遍全球,被称为2016年Googleplay的best app。这个app就用到了图像处理领域的content加style的的图像风格变换。这篇论文是2016年CVPR的 paper.

  论文链接: Image Style Transfer Using Convolutional Neural Networks】

1. INTRODUCTION

  图像纹理转移问题[texture transfer]的目标是从一幅源图像中合成纹理,但要对纹理合成进行约束,以保留目标图像的语义内容.大多数用于纹理合成的算法都是采用非参数方法,比如使用对应地图, 图像高度, 图像模拟, 边缘方法信息等. 但有一个基本问题始终没有解决,他们都只是将目标图像的底层图像特征用到了纹理迁移中.而一个理想的迁移算法应该能从目标图像中提取语义图像内容,并且通知纹理迁移流程根据原图像风格来渲染目标图像的语义内容.

2. Deep image representations

本文展示了由高性能CNN学习到的广义特征表示如何用于独立地处理和操作自然图像的内容和风格,提出的风格迁移算法结合了基于CNN的带参数纹理模型和图像表征的翻转方法.通过执行图像搜索以匹配样本图像的特征表示可以生成新图像.

VGG网络被用于物体识别与定位,本文使用了由16个Conv层和5个pooling层的19层VGGnet,不使用任何全连接层.按比例改变权重规范化网络,这样每层卷积滤波器在图像和位置上平均激活值就等于1。这种针对VGG网络的按比例缩放[ re-scaling ]不会改变它的输出,因为它只包含修正线性激活函数,在特征地图上没有归一化层和池化层还有一个小的改动是:用平均池化来代替最大池化.

2.1  内容表示

给定一张输入图片 \large \vec{a}, 卷积神经网络每层使用滤波[filter]对其进行编码, \large M_{l} 为每个特征图的size [=height * width]; 在第 \large l 个卷积层中,由\large N_{l} 个不同的 filter产生\large N_{l} 个大小为\large M_{l} 的特征图,所以第 \large l 层中的响应可以存储在一个矩阵\large F^{l} \in R^{N_{l}\times M_{l}}中,其中\large F_{ij}^{l} 表示第 \large l 层的第i个滤波的位置j处的激活值.

核心: 在一个带有白噪声的图像上执行梯度下降算法,寻找可以匹配原始图像特征响应的另外一个图像,更新原始图像上的噪声图像点, 是输入,而不是权重w.

\large \vec{p}和 \large \vec{x} 分别表示原始图像和生成的图像,\large P^{l} 和\large F^{l}分别为它们对应的第 \large l 层的特征表示;将这俩个特征表示之间的平方差损失定义为

损失函数的偏导数对应的l层的激活函数为

在提取content 特征时,不同卷积层的表征内容不一样,卷积神经网络在物体识别上训练,它们可以生成一个对图像的表示,在网络层级的处理过程中使得物体信息越来越明显。因此,沿着网络层级处理过程,输入图像会发生转变,对图像的真正内容越来越敏感,但会对精细的外观变得相对不变。网络的高层表示一般是关于输入图像的物体和布局信息,但不会限制重构过程中的确切像素值,底层特征一般表达图像的像素信息.将网络中高层的特征响应结果作为内容表示。

2.2. Style representation

为了获得输入图像的风格表示,用特征空间获得纹理信息,它由不同滤波器响应结果的相关关系组成,其中期望值从特征地图空间上取值。特征关系用克莱姆矩阵表示:[对两个特征图求内积.k 为特征图的第k个元素]

注: Gram矩阵可表达图像的纹理特征,和位置无关.

图注:上图中右上方的公式就是网络训练的总损失,包含content 和style两部分的损失,由人工设定的系数\large \alpha 和 \large \beta 控制权重,

图左下方的\large \vec{a} 为风格图像, \large \vec{p} 为内容图像. 图的下方有带随机白噪声图像 \large \vec{x} 的更新公式,每次迭代的该变量等于总loss对\large \vec{x} 求导再乘以步长 \large \lambda .

 令 \large \vec{a} 和 \large \vec{x} 分别表示原始图像和生成的图像,\large A^{l }\large G^{l}分别表示 第 \large l 层的风格表示。第 \large l 层相对于总损失的贡献是:

\large w_{l} 是每层对总损失函数的贡献权重因子。

注:content 的loss 等于\large \vec{x} 的conv4层的\large F^{l} 和\large \vec{p} 的onv4层的\large P^{l}  之间的平方差损失计算所得,参考等式(1).

 第 \large l 层的损失\large E_{l} 对第 \large l 层的激活函数的偏导数如下:

 

\large E_{l} 的梯度对于像素值 \large \vec{x} 的梯度可以用标准误差反向传播快速计算出来.

 2.3  风格迁移

为了将艺术照\large \vec{a} 的风格转移到照片\large \vec{p}上,我们同步匹配 \large \vec{p}的内容表示和\large \vec{a}的风格表示,合成一个新图像.需要最小化的损失函数如下:

 

3. Results

1. 可用重现content加style的表示风格,并把它们融合到噪声图像中,下图中,A图为原始图像,其余三幅图的左下方为风格,

2. \large \alpha /\beta 的比例不同,得到的图像风格也不同,下图中分别取 \large \alpha /\beta 等于 \large 10^{-4}, 10^{-3}, 10^{-2},10^{-1},结果显示\large \alpha /\beta 值越大,生成的图像越接近原始图像.

猜你喜欢

转载自blog.csdn.net/qq_29831163/article/details/89001409