来源:nvlabs.github.io

编辑:肖琴

还记得英伟达在 GTC 2019 披露的令人惊叹的图像生成器 GauGAN 吗?仅凭几根线条,草图秒变风景照,自动生成照片级逼真图像的技术堪比神笔马良。

图中,左边是人类操作员画的,右边是 AI 直接 “简单加上几笔细节” 后生成的。在普通人看来,右边的图像几乎毫无破绽,看不出这并非一张风光照片,而是 AI 生成的虚拟海滩。

从图中我们可以看出,GauGAN 并不是像 Photoshop 里贴一个图层那样,简单的把图形贴上去,而是根据相邻两个图层之间的对应关系对边缘进行调整。比如石头在水里的倒影应该是什么样的、被瀑布冲刷的山石应该是怎样的状态、近处的山和远处的山之间的层次应该如何表现…

GauGAN 背后的技术来自来自英伟达和 MIT 的研究团队。这个团队,包括来自英伟达的 Ting-Chun Wang、刘明宇(Ming-Yu Liu),Taesung Park (当时在英伟达实习),以及来自 MIT 的朱俊彦(Jun-Yan Zhu)。

论文地址:https://arxiv.org/pdf/1903.07291.pdf

他们提出一种名为 “空间自适应归一化”(SPADE) 的语义图像合成技术,论文已经被 CVPR 2019 接收,并入选 oral paper。

近日,SPADE 的代码终于发布,包括预训练模型等,有兴趣的同学赶紧来试试复现吧。

SPADE:空间自适应归一化

GauGAN 是基于名为 “空间自适应归一化”(spatially-adaptive normalization, SPADE) 技术实现的。该方法通过一个简单但有效的层,在给定输入语义布局的情况下合成照片级真实的图像。

以前的方法直接将语义布局作为输入提供给网络,然后通过卷积、归一化和非线性层进行处理。我们证明了以前的方法不是最优的,因为归一化层往往会消除语义信息。

为了解决这个问题,我们建议使用输入布局,通过空间自适应的、学习的变换来调整归一化层中的激活。

在几个具有挑战性的数据集上的实验表明,与现有方法相比,SPADE 在视觉保真度和与输入布局的对齐方面具有优势。最后,我们的模型允许用户轻松地控制合成结果的样式和内容,以及创建多模态的结果。

方法简述

在许多常见的归一化技术中,如 Batch Normalization (Ioffe et al., 2015),在实际归一化步骤之后会应用到学习的 affine layers (如在 PyTorch 和 TensorFlow) 中。

在 SPADE 中,affine layers 是从语义分割映射中学习的。这类似于条件归一化 (De Vries et al., 2017 和 Dumoulin et al., 2016),除了学习的 affine parameters,还需要空间自适应,这意味着我们将对每个语义标签使用不同的缩放和偏差。

使用这种简单的方法,语义信号可以作用于所有层的输出,而不受可能丢失这些信息的归一化过程的影响。此外,由于语义信息是通过 SPADE 层提供的,所以可以使用随机的潜在向量作为网络的输入,从而实现操纵所生成的图像的样式。

与现有方法的比较

SPADE 在 COCO-Stuff 数据集上的性能优于现有方法。因为具有更多的场景和标签,COCO-Stuff 数据集比 Cityscapes 数据集更具挑战性。上面的图片比较了 GRN、pix2pixhd 以及 SPADE 的效果。

应用到 Flickr 图片

由于 SPADE 适用于不同的标签,因此可以使用现有的语义分割网络对其进行训练,学习从语义映射到照片的反向映射。上面这些图片是由 SPADE 对从 Flickr 上抓取的 40k 张图片进行训练生成的。

代码开源

安装

克隆这个 repo

    git clone https://github.com/NVlabs/SPADE.gitcd SPADE/

    这段代码需要 PyTorch 1.0 和 python 3+。请通过以下方式安装依赖项

      pipinstall-rrequirements.txt

      代码还需要同步的 Synchronized-BatchNorm-PyTorch rep.

        cd models/networks/ git clone https://github.com/vacancy/Synchronized-BatchNorm-PyTorch cp Synchronized-BatchNorm-PyTorch/sync_batchnorm . -rf cd ../../

        为了重现论文中报告的结果,你需要一台有8个 V100 GPU 的 NVIDIA DGX1 机器。

        数据集准备

        对于 COCO-Stuff、Cityscapes 或 ADE20K,必须预先下载数据集。请在相关网页下载。

        准备 COCO-Stuff 数据集。图像、标签和实例映射应该与数据集 /coco_stuff/ 中的目录结构相同。特别地,我们使用了一个实例映射,它结合了 “things instance map” 和 “stuff label map” 的边界。我们使用了一个简单的脚本数据集 /coco_generate_instance_map.py。请使用 pip install pycocotools 安装 pycocotools,并参考脚本生成实例映射。

        准备 ADE20K 数据集。解压数据集后,将 jpg 图像文件 ADEChallengeData2016/images/ 和 png 标签文件 ADEChallengeData2016/annotatoins/ 放在同一个目录中。

        使用预训练模型生成图像

        数据集准备好后,就可以使用预训练模型生成图像。

        1、从 Google Drive Folder 下载预训练模型的 tar,保存在 “checkpoint /‘中,然后运行

          cd checkpoints tar xvf checkpoints.tar.gz cd ../

          2、使用预训练模型生成图像

            pythontest.py--name[type]_pretrained--dataset_mode[dataset]--dataroot[path_to_dataset]

            3、输出图像默认存储在./results/[type]_pretrained/。

            训练新模型

            可以使用以下命令训练新模型。

            1、准备数据集

            要在论文中的数据集上训练,可以下载数据集并使用 –dataset_mode 选项,该选项将选择加载 BaseDataset 上的哪个子类。对于自定义数据集,最简单的方法是使用./data/custom_dataset。通过指定选项 –dataset_mode custom,以及 –label_dir [path_to_labels] –image_dir [path_to_images]。你还需要指定更多选项,例如 –label_nc (数据集中标签类的数目),–contain_dontcare_label (指定是否有一个未知的标签),或者 –no_instance (表示地图数据集没有实例)。

            2、训练

              # TotrainontheFacadesorCOCOdataset, forexample.pythontrain.py--name[experiment_name]--dataset_modefacades--dataroot[path_to_facades_dataset]pythontrain.py--name[experiment_name]--dataset_modecoco--dataroot[path_to_coco_dataset]# Totrainonyourowncustomdatasetpythontrain.py--name[experiment_name]--dataset_modecustom--label_dir[path_to_labels]--image_dir[path_to_images]--label_nc[num_labels]

              你还可以指定许多选项,请使用 python train.py –help.

              测试

              测试与测试预训练模型相似

                pythontest.py--name[name_of_experiment]--dataset_mode[dataset_mode]--dataroot[path_to_dataset]

                GitHub地址:

                https://github.com/NVlabs/SPADE

                声明:本文来自新智元,版权归作者所有。文章内容仅代表作者独立观点,不代表士冗科技立场,转载目的在于传递更多信息。如有侵权,请联系 service@expshell.com。