> For the complete documentation index, see [llms.txt](https://hujian.gitbook.io/deep-learning/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hujian.gitbook.io/deep-learning/juan-ji-wang-luo/feng-ge-qian-yi/deep-photo-style-transfer.md).

# Deep Photo Style Transfer

> [Deep Photo Style Transfer](https://arxiv.org/pdf/1703.07511.pdf)

本文介绍了一种深度学习的照片风格转换方法，该方法在忠实地转换参考风格的同时处理各种各样的图像内容。我们的方法建立在最近关于绘画转移的工作基础上，通过考虑神经网络的不同层，将风格从图像内容中分离出来。然而，这种方法并不适用于照片真实感风格的转换。即使当输入图像和参考图像都是照片时，输出仍然表现出令人想起照片的失真。我们的贡献是将从输入到输出的变换约束在颜色空间中是局部仿射的，并将这个约束表示为自定义的完全微分能量项。我们表明，这种方法成功地压制了失真，并在各种场景中产生了令人满意的照片真实感风格转换，包括一天中时间、天气、季节和艺术编辑的转换。

![](https://1351054059-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LajzPJtwBYkeBMhsYQD%2F-LbrS4lABR8VpauWA_kh%2F-LbrS6mxM_7JivYe2IDT%2Fimage.png?alt=media\&token=edf1b787-14cb-497e-8076-f6e31c827628)

## 方法

我们的算法采用两个图像：输入图像，通常是普通照片，参考风格图像。 我们试图将参考的风格转化为输入，同时保持结构的真实感。 我们的方法通过引入两个核心思想来增强NeuralStyle算法\[5]：

1. 在优化过程中，我们在目标函数中提出了一个超写实主义正则项，将重构图像约束为由输入的局部仿射颜色变换来表示，以防止失真。
2. 我们基于输入的语义分割（类似于\[2]）引入了对样式转移过程的可选指导，以避免内容不匹配问题，这极大地改善了结果的真实感。

### Background

Neural Style Transfer 的损失函数，请参考上一篇文章

![](https://1351054059-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LajzPJtwBYkeBMhsYQD%2F-LbrS4lABR8VpauWA_kh%2F-LbrWcA6c3tuWT8Hkm1b%2Fimage.png?alt=media\&token=7b760299-93df-44e6-a0ce-829fb9f72e35)

### Photorealism regularization

我们现在描述如何调整这个优化方案以保持输入图像的结构并产生逼真的输出。我们的约束不是直接加在输出图像上，而是在应用于输入图片的转换上。如何表征真实感图像的空间是一个尚未解决的问题。我们的观点是，如果我们利用输入已经是逼真的这一事实，我们就不需要解决它。我们的策略是通过在方程1(a)中添加一项来惩罚图像失真，以确保在传输过程中不会丢失此属性。我们的解决方案是寻找在色彩空间中局部仿射的图像变换，也就是说，对于每个输出patch，都有一个将输入RGB值映射到其输出对应点的仿射函数函数。每个patch可以具有不同的函数，这允许空间变化。 为了获得直觉，人们可以考虑边缘patch。 RGB通道的一组结合组合跨越了广泛的变化集，但是边缘本身不能移动，因为它位于所有通道中的相同位置。

我们建立在[Levinet al的Matting Laplacian的基础上 ](http://webee.technion.ac.il/people/anat.levin/papers/Matting-Levin-Lischinski-Weiss-CVPR06.pdf)\[9]。他们已经展示了如何表达灰度遮罩作为输入RGB通道的局部仿射组合。他们描述了最小二乘罚函数，可以用由一个矩阵 $$\mathcal{M}\_{I}$$ (仅取决于输入图像)表示的标准线性系统最小化：

![](https://1351054059-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LajzPJtwBYkeBMhsYQD%2F-LbrS4lABR8VpauWA_kh%2F-Lbr_hBYy8rApBHJEiti%2Fimage.png?alt=media\&token=7b38e3e7-3db3-48f2-abff-6015b77f6a95)

V表示输出图像通道向量化，梯度为

$$
\frac{\mathrm{d} \mathcal{C}*{m}}{\mathrm{d} V*{c}\[O]}=2 \mathcal{M}*{I} V*{c}\[O]
$$

### Augmented style loss with semantic segmentation

风格项（方程1c）的定义是在整个图像上计算Gram矩阵。由于Gram矩阵将其构成向量确定为isometry\[18]，它会明确地编码神经反应的精确分布，这限制了其适应语义上下文变化的能力，并可能导致“溢出效应”。我们用类似于Neural Doodle\[1]和语义分割方法\[3]的方法来解决这个问题，以生成用于一组公共标签（天空，建筑物，水等）的输入和参考图像的图像分割掩模。我们将掩码作为附加通道添加到输入图像中，并增强神经风格算法，通过连接分割通道和更新风格损失如下：

![](https://1351054059-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LajzPJtwBYkeBMhsYQD%2F-LbrS4lABR8VpauWA_kh%2F-Lbrazj2HSFYPDctsoIE%2Fimage.png?alt=media\&token=58ae3038-264f-4eae-b225-c4fa4732255e)

其中 $$C$$ 是语义分割掩码中的通道数， $$M\_{\ell, c}\[\cdot]$$ 表示 $$l$$ 层中分割掩码的通道 $$c$$ ， $$G\_{\ell, c}\[\cdot]$$ 是Gram矩阵对应于 $$F\_{\ell, c}\[\cdot]$$ 。我们对掩码进行下采样，以匹配卷积神经网络每层的特征映射空间大小。为了避免仅出现在输入图像中的“孤立语义标签”，我们将输入语义标签限制在参考样式图像的标签中。虽然从语义角度来看这可能会导致错误的标签，但选定的标签在我们的上下文中通常是等同的，例如“湖”和“海”。我们还观察到分割不需要像素精确，因为最终输出受到我们正则化的约束。

### Finally

![](https://1351054059-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LajzPJtwBYkeBMhsYQD%2F-LbrS4lABR8VpauWA_kh%2F-LbrbJ18jmv9PE1N6y0G%2Fimage.png?alt=media\&token=49da46e4-9fee-4e2c-a3b4-bf4aba5c253c)

## 实验

![](https://1351054059-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LajzPJtwBYkeBMhsYQD%2F-LbrS4lABR8VpauWA_kh%2F-LbrbSkqI9A_xqKIssuu%2Fimage.png?alt=media\&token=6898b885-b18b-48e8-8079-baaef4cf59d0)
