当前位置: 首页 > 科技观察

一张图片可以训练一个GAN!Adobe改进的图像生成方法-开源

时间:2023-03-12 22:28:30 科技观察

本文经AI新媒体量子位(公众号ID:QbitAI)授权转载,转载请联系出处。数据集太小无法训练GAN?尝试从单个图像开始。去年,Google提出了SinGAN,这是第一个使用GAN从单个自然图像中学习的无条件生成模型(ICCV2019最佳论文)。最近,来自Adob??e和汉堡大学的研究人员改进了这种方法,并探索了几种机制,使GAN能够提高单幅图像的训练和生成能力。研究人员将改进后的模型称为ConSinGAN。那么,我们先来看看ConSinGAN的效果。上图左侧是用于训练的单张图像,右侧是用ConSinGAN训练后生成的复杂全局结构。可以看出效果还是比较逼真的。当然,ConSinGAN还可以用于处理许多其他任务,例如图像超分辨率、图像动画和图像去雾。下面两张图是它对图像协调和图像编辑的效果。ConSinGAN是怎么做到的?TrainingArchitectureOptimization:ParallelSinGAN首先我们来看一下SinGAN的训练过程。SinGAN在图像中训练了几个独立的生成网络。下图是第一个生成器,也是唯一一个从随机噪声生成图像的无条件生成器。△第一个在SinGAN中训练的生成器,这里的判别器永远不会把图像看成一个整体。这样,它就可以知道“真实”的图像补丁是什么样子的。通过这种方式,生成器可以通过生成全局不同但仅与补丁相似的图像来“作弊”。以更高分辨率工作的生成器将前一个生成器生成的图像作为输入,并生成比当前生成器具有更高分辨率的图像。所有生成器都是单独训练的,这意味着在训练当前生成器时,所有先前生成器的权重保持不变。这个过程如下图所示。然而,Adobe和汉堡大学的研究人员发现,在给定时间只能训练一个生成器,并且图像(而不是特征图)从一个生成器传输到下一个生成器,这限制了生成器之间的交互。因此,他们端到端地训练生成器,即在给定时间训练多个生成器,每个生成器将前一个生成器生成的特征(而不是图像)作为输入。这就是ConSinGAN这个名字的由来——并行SinGAN,流程如下图所示。但是,采取这样的措施会面临另一个问题,那就是过拟合。这意味着生成的模型不会生成任何“新”图像,而只会生成训练图像。为了防止这种现象的发生,研究人员采取了两种措施:在任何给定时间,只训练生成器的一部分;不同的生成器使用不同的学习率。下图显示了使用这两种方法实现的模型。默认情况下最多同时训练3个生成器,对于较低的生成器,学习率分别调整为1/10和1/100。在这个过程中,有一个有趣的现象。如果将较高的学习率应用于较低的生成器,则生成的图像将具有较高的质量但辨别力较差。相反,如果将较小的学习率应用于较低的生成器,则生成的图像的多样性会更丰富。如下所示。代码已开源ConSinGAN的代码已在GitHub上开源。老规矩,先介绍一下运行需要的环境:Python3.5;火炬1.1.0。安装也很简单:pipinstall-rrequirements.txt使用论文中的默认参数训练模型:pythonmain_train.py--gpu0--train_modegeneration--input_nameImages/Generation/angkorwat.jpg大约需要20-25分钟。不同的学习率和训练阶段的数量都会影响实验的结果。研究人员推荐两者的默认值分别为0.1和6。当然也可以修改学习率:pythonmain_train.py--gpu0--train_modegeneration--input_nameImages/Generation/colusseum.jpg--lr_scale0.5修改训练阶段数:pythonmain_train.py--gpu0--train_modegeneration--input_nameImages/Generation/colusseum.jpg--train_stages7当然,该模型也可以用来处理“图像协调”和“图像编辑”等任务,详见GitHub。传送门论文地址:https://arxiv.org/pdf/2003.11512.pdfGitHub项目地址:https://github.com/tohinz/ConSinGAN