王小新 编译自 GitHub 量子位 出品 | 公众号 QbitAI 把一张图像的特征转移到另一张图像,是个非常一颗赛艇的想法。把照片瞬间变成梵高、毕加索画作风格,想想就很酷。
图1:星空版小狗 文末有风格迁移小demo 或者,你可以用目前很流行的Faceapp让下面这位严肃的大叔露出笑容
图2:一个笑容灿烂的杀手 要实现这样的图像风格转换,通常需要一个包含成对图片的训练集。CycleGAN打破了这个限制。CycleGAN是加州大学伯克利分校的一项研究成果,可以在没有成对训练数据的情况下,实现图像风格的转换。 以下是CycleGAN完成的一些例子:
图3:CycleGAN实现的一些例子 详情见CycleGAN的论文 Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks: https://arxiv.org/abs/1703.10593 如果你觉得论文读起来太枯燥,那么,最近GitHub上发布的一份教程可能比较适合你,作者Hardik Bansal和Archit Rathore。 以下是这份教程对CycleGAN的解读:量子位编译: 简介 如果你对生成对抗网络(GAN)还不太了解,可以查看Ian Goodfellow在NIPS 2016的研讨会视频,地址见文末。 这篇文章是一份简化版教程,将带你了解CycleGAN的核心理念,并介绍如何在Tensorflow中实现CycleGAN网络。 非配对的图像到图像转换
图4:配对与非配对图像转换(图来自论文) 上面也提到过,无须提供从源域到目标域的配对转换例子,CycleGAN就能工作。 最近提出的Pix to Pix方法的关键是提供了在这两个域中有相同数据的训练样本。CycleGAN的创新点在于能够在源域和目标域之间,无须建立训练数据间一对一的映射,就可实现这种迁移。 这种方法通过对源域图像进行两步变换:首先尝试将其映射到目标域,然后返回源域得到二次生成图像,从而消除了在目标域中图像配对的要求。使用生成器(generator)网络将图像映射到目标域,并且通过匹配生成器与鉴别器(discriminator),能提高该生成图像的质量。 对抗网络 我们使用了一个生成器网络和一个鉴别器网络,进行相互对抗。生成器尝试从期望分布中产生样本,鉴别器试图预测样本是否为原始图像或生成图像。 利用生成器和鉴别器联合训练,最终生成器学习后完全逼近实际分布,并且鉴别器处于随机猜测状态。 循环一致 上述对抗方法的训练存在一个问题。引用原文的一段话: 从理论上讲,对抗训练可以学习和产生与目标域Y和X相同分布的输出,即映射G和F。然而,在足够大的样本容量下,网络可以将相同的输入图像集合映射到目标域中图像的任何随机排列,其中任何学习的映射可以归纳出与目标分布匹配的输出分布。因此,单独的对抗损失Loss不能保证学习函数可以将单个输入Xi映射到期望的输出Yi。 为了规范模型,作者介绍了循环一致性的约束条件:如果我们从源分布转换为目标分布,然后再次转换回源分布,那么应该可以从源分布中获取样本。 网络架构
图5:CycleGAN结构示意图 在一个配对数据集中,每张图像,如imgA,人为地映射到目标域中的某个图像,如imgB,以便两者共享各种特征。 从imgA到imgB的特征可用于其相对应的映射过程中,即从imgB到imgA的特征。配对一般是为了使输入和输出共享一些共同的特征。当一张图像从一个域到另一个域时,该映射定义了一种有意义的变换。因此,当我们配对数据集时,生成器必须从域DA中获得一个输入,例如inputA,并将该图像映射到输出图像,即genB,原始图像必须与其映射对象相近。 (责任编辑:本港台直播) |