用深度学习给您的照片添点“魔法”
在成像的上下文中的样式转移是指将一个图像的“风格”迁移到另一个图像的过程,同时保持第二图像的“内容”不发生变化。
例如,最上边的图像是“内容”图像。我们将中间图像的“风格”(“风格”图像)应用于我们的内容图像。我们希望由于中间的图像有一个大城市的夜晚时间氛围,这将反映在最终图像上 - 这正是最下边发生的结果!
该领域最具突破性的研究之一来自Adobe resarch,他们称之为深度图片风格迁移(DPST)。
如何迁移照片风格
为了正确执行从一张照片到另一张照片的样式,Adobe团队制定了他们的DPST的目标:“在保持结果逼真的同时,将引用的样式转换为输入的样式。”
这里的关键部分是保持输出的“真实感”。如果我们有一个像上面这样的内容照片,我们不希望任何建筑物发生变化。我们只是希望它看起来像是在夜间拍摄的照片。
在该研究发表之前出现的许多样式迁移算法都扭曲了许多呈现原始图像的内容。在当时的神经风格迁移技术的结果中,常见的事情就是使得直线变成波浪的样子还有改变物体的形状。
这完全可以接受。许多算法都是为艺术风格迁移而设计的,所以甚至还有一些失真!
失真的样式迁移图像的示例
但在这种情况下,我们的目标是创建仍然逼真的图像 - 变得好像它们是由真实世界的相机拍摄的。
为此,作者做了两件主要的事情:(1)在损失函数中引入正则化术语(2)将内容图像的语义分割作为指导。
Photorealism Regularisation
想想我们如何在图像中保持超现实主义。我们希望原始图像的线条和形状保持不变。颜色和灯光可能会改变,但一个人应该看起来像一个人,树还是像树,狗还是狗的样子。
基于这种直观的想法,作者实现的正则化术语迫使像素从输入到输出的变换为在颜色空间中局部仿射。根据定义,仿射变换在将输入映射到输出时必须保持点、直线和平面。
有了这个约束,直线永远不会波动,我们的输出中不会出现任何奇怪的形状变化!
分类指导
除了保持点、直线和平面之外,我们还希望确保样式图像中各种“事物”的样式实际上是真实地传递的。
想象一下,如果你的风格图像显示出美丽的橙色日落,就像下面这张。
图像的大部分是红橙色,如果我们将风格迁移成城市形象,那么所有的建筑都会变红!这不是我们想要的的图片,更现实的迁移会将使大多数建筑物变得非常暗(接近黑色),只有天空会有日落和水的颜色。
深度图像风格迁移算法利用应用于内容图像的语义分割的结果来指导样式迁移。当算法准确地知道哪些像素属于前景和背景时,它可以更真实地传递样式。天空像素将总是传输到天空像素,背景像素传输到背景像素的地方,等等。
传递风格的代码
您可以从GitHub下载Photo Realistic Style Transfer的存储库:
git clone: GitHub - GeorgeSeif/DeepPhotoStyle_pytorch: PyTorch implementation of "Deep Photo Style Transfer"
它运行所需的只是Pytorch的最新版本。完成后,进入文件夹,下载脚本进行语义分割:
cd DeepPhotoStyle_pytorch sh download_seg_model.sh
现在我们可以准备运行我们的代码了!
下载一个样式图像和一个内容图像。根据我的经验,城市和风景图像往往效果最佳。最后,像这样运行代码:
python main.py --style_image path_style_image --content_image path_content_image
该算法将迭代地改进样式传递结果,因此您等待的时间越长,得到的效果就越好!默认情况下,它设置为运行3000步,但如果您觉得更多步骤可以改善结果,那么您可以增加运行3000步。
亲自试试代码,非常有趣!