Press "Enter" to skip to content

用深度学习魔法为你的照片转换风格(附源码)

——深度学习在艺术方面的进展

 

作者:George Seif

 

翻译:疯狂的技术宅

 

原文: https://towardsdatascience.co…

 

未经允许严禁转载

 

图像背景中的风格转移 是指将一个图像的“风格”转移到另一个图像的过程,同时保持第二图像中的“内容”。

 

例如,最上边的照片是“内容”图像。我们要将中间照片中的“风格”(“风格”图像)应用于内容图像。也就是说我们希望把中间的图像中大都市的夜晚氛围反映在最终图像上,得到的结果是最下边的照片!

 

 

 

 

这项技术源自的原始 研究论文https://arxiv.org/pdf/1703.07…

 

Adobe 的一项最具开创性的研究就来自于此。他们称之为 深度照片风格转移 (DPST)

 

如何转换照片的风格

 

为了正确执行从一张照片到另一张照片的样式转换,Adobe 团队制定了他们的 DPST 的目标:“ 将参考的风格转移到输入的图片上,同时保持结果的真实感

 

这里的关键部分是保持输出的“真实感”属性。对于上面的内容照片,我们不希望任何建筑物发生任何变化。只是希望它看起来像是在夜间拍摄的同一位置的照片。

 

在该研究发表之前,也出现了许多风格转移算法,但是这些算法扭曲了原始图像的内容。在当时的 Neural Style Transfer 技术的输出结果中,常见的问题就是直线变成了波浪线并且改变了物体的形状。

 

这是完全可以接受的。许多算法都是为 艺术 风格转移而设计的,所以往往会存在一些失真!

 

 

失真的风格转移图像 (来源: https://github.com/yusuketomo…

 

但是当前的目标是创建依然逼真的图像 —— 就好像它们是由真实世界的相机拍摄的一样。

 

作者为实现这一点主要做了两件事情:(1)损失函数中的 照片写实正则化项 (2)内容图像的语义分割,用于 指导

 

照片写实正则化

 

设想一下应该怎样在图像中直观地保持照片的写实。我们希望原始图像的线条和形状保持不变。颜色和灯光可能会改变,但是一个人应该看起来还像一个人,树还是树,狗仍然像狗等。

 

基于这种直观的想法,作者实现的正则化约束迫使像素从输入到输出的转换 在颜色空间中是局部仿射的 。根据定义, 仿射变换 在将输入映射到输出时必须保持点、直线和平面的形状不变。

 

有了这个限制,直线永远不会产生波动,我们的输出中不会出现任何奇怪的形状变化!

 

分段指导

 

除了保证图像不失真外,我们还希望能够确保样式图像中各种“事物”的样式是被正确转移的。

 

想象一下,如果你的风格图像显示出美丽的橙色日落,就像下面这张照片一样:

 

 

来源: https://pixabay.com/illustrat…

 

图像的大部分是红橙色的,如果将这个风格转移到城市的照片上,那幺所有的建筑都会变红!这可不是我们想要的 —— 更真实的转移应该是使大多数建筑物非常暗(接近黑色),只有天空才会有日落和水的颜色。

 

深度图像风格转换算法使用应用于内容图像的 语义分割 的结果来 引导 风格转移。当算法能够准确地知道哪些像素属于前景和背景时,可以更真实地转换风格。天空的像素将始终转移到天空像素,背景像素会转移到背景像素等等。

 

转换风格的代码

 

你可以从GitHub下载 Photo Realistic Style Transfer 的存储库:

 

git clone https://github.com/GeorgeSeif/DeepPhotoStyle_pytorch.git

 

它运行所需的只是 Pytorch 的最新版本。下载完成后,进入文件夹并使用下载脚本下载语义分段模型:

 

cd DeepPhotoStyle_pytorch
sh download_seg_model.sh

 

现在可以运行代码了!

 

下载样式图像和内容图像 —— 你可以选择任何图像!根据我的经验,城市和风景往往效果最佳。最后像这样运行代码:

 

python main.py --style_image path_style_image --content_image path_content_image

 

该算法将迭代地改进样式传递结果,因此你等待得实践越久效果就越好!默认情况下它被设置为迭代 3000 次,但如果你觉得更多的迭代次数能够改善结果,可以增加该数字。

 

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注