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