英伟达再出黑魔法GauGAN:凭借几根线条,草图秒变风景照

英伟达最近发布的图像合成 “黑魔法”gaugan 效果令人惊叹,现在,相关代码和预训练模型终于公开了。
还记得英伟达在gtc2019披露的令人惊叹的图像生成器gaugan吗?仅凭几根线条,草图秒变风景照,自动生成照片级逼真图像的技术堪比神笔马良。
图中,左边是人类操作员画的,右边是ai直接“简单加上几笔细节”后生成的。在普通人看来,右边的图像几乎毫无破绽,看不出这并非一张风光照片,而是ai生成的虚拟海滩。
从图中我们可以看出,gaugan并不是像photoshop里贴一个图层那样,简单的把图形贴上去,而是根据相邻两个图层之间的对应关系对边缘进行调整。比如石头在水里的倒影应该是什么样的、被瀑布冲刷的山石应该是怎样的状态、近处的山和远处的山之间的层次应该如何表现…
相关阅读:英伟达再出黑魔法gaugan:凭借几根线条,草图秒变风景照
gaugan背后的技术来自来自英伟达和mit的研究团队。这个团队,包括来自英伟达的ting-chunwang、刘明宇(ming-yuliu),taesungpark(当时在英伟达实习),以及来自mit的朱俊彦(jun-yanzhu)。
论文地址:https://arxiv.org/pdf/1903.07291.pdf
他们提出一种名为“空间自适应归一化”(spade)的语义图像合成技术,论文已经被cvpr2019接收,并入选oralpaper。
近日,spade的代码终于发布,包括预训练模型等,有兴趣的同学赶紧来试试复现吧。
spade:空间自适应归一化
gaugan是基于名为“空间自适应归一化”(spatially-adaptivenormalization,spade)技术实现的。该方法通过一个简单但有效的层,在给定输入语义布局的情况下合成照片级真实的图像。
以前的方法直接将语义布局作为输入提供给网络,然后通过卷积、归一化和非线性层进行处理。我们证明了以前的方法不是最优的,因为归一化层往往会消除语义信息。
为了解决这个问题,我们建议使用输入布局,通过空间自适应的、学习的变换来调整归一化层中的激活。
在几个具有挑战性的数据集上的实验表明,与现有方法相比,spade在视觉保真度和与输入布局的对齐方面具有优势。最后,我们的模型允许用户轻松地控制合成结果的样式和内容,以及创建多模态的结果。
方法简述
在许多常见的归一化技术中,如batchnormalization(ioffeetal.,2015),在实际归一化步骤之后会应用到学习的affinelayers(如在pytorch和tensorflow)中。
在spade中,affinelayers是从语义分割映射中学习的。这类似于条件归一化(devriesetal.,2017和dumoulinetal.,2016),除了学习的affineparameters,还需要空间自适应,这意味着我们将对每个语义标签使用不同的缩放和偏差。
使用这种简单的方法,语义信号可以作用于所有层的输出,而不受可能丢失这些信息的归一化过程的影响。此外,由于语义信息是通过spade层提供的,所以可以使用随机的潜在向量作为网络的输入,从而实现操纵所生成的图像的样式。
与现有方法的比较
spade在coco-stuff数据集上的性能优于现有方法。因为具有更多的场景和标签,coco-stuff数据集比cityscapes数据集更具挑战性。上面的图片比较了grn、pix2pixhd以及spade的效果。
应用到 flickr 图片
由于spade适用于不同的标签,因此可以使用现有的语义分割网络对其进行训练,学习从语义映射到照片的反向映射。上面这些图片是由spade对从flickr上抓取的40k张图片进行训练生成的。
代码开源
安装
克隆这个 repo
git clonehttps://github.com/nvlabs/spade.gitcd spade/
这段代码需要pytorch1.0和python3+。请通过以下方式安装依赖项
pip install -r requirements.txt
代码还需要同步的 synchronized-batchnorm-pytorch rep.
cd models/networks/ git clonehttps://github.com/vacancy/synchronized-batchnorm-pytorchcpsynchronized-batchnorm-pytorch/sync_batchnorm.-rfcd ../../
为了重现论文中报告的结果,你需要一台有8个v100gpu的nvidiadgx1机器。
数据集准备
对于coco-stuff、cityscapes或ade20k,必须预先下载数据集。请在相关网页下载。
准备coco-stuff数据集。图像、标签和实例映射应该与数据集/coco_stuff/中的目录结构相同。特别地,我们使用了一个实例映射,它结合了“thingsinstancemap”和“stufflabelmap”的边界。我们使用了一个简单的脚本数据集/coco_generate_instance_map.py。请使用pipinstallpycocotools安装pycocotools,并参考脚本生成实例映射。
准备ade20k数据集。解压数据集后,将jpg图像文件adechallengedata2016/images/和png标签文件adechallengedata2016/annotatoins/放在同一个目录中。
使用预训练模型生成图像
数据集准备好后,就可以使用预训练模型生成图像。
1、从 google drive folder 下载预训练模型的 tar,保存在 'checkpoint /‘中,然后运行
cd checkpoints tar xvf checkpoints.tar.gz cd ../
2、使用预训练模型生成图像
python test.py --name [type]_pretrained --dataset_mode [dataset] --dataroot [path_to_dataset]
3、输出图像默认存储在./results/[type]_pretrained/。
训练新模型
可以使用以下命令训练新模型。
1、准备数据集
要在论文中的数据集上训练,可以下载数据集并使用--dataset_mode选项,该选项将选择加载basedataset上的哪个子类。对于自定义数据集,最简单的方法是使用./data/custom_dataset。通过指定选项--dataset_modecustom,以及--label_dir[path_to_labels]--image_dir[path_to_images]。你还需要指定更多选项,例如--label_nc(数据集中标签类的数目),--contain_dontcare_label(指定是否有一个未知的标签),或者--no_instance(表示地图数据集没有实例)。
2、训练
# to train on the facades or coco dataset, for example.python train.py --name [experiment_name] --dataset_mode facades --dataroot [path_to_facades_dataset]python train.py --name [experiment_name] --dataset_mode coco --dataroot [path_to_coco_dataset]# to train on your own custom datasetpython train.py --name [experiment_name] --dataset_mode custom --label_dir [path_to_labels] -- image_dir [path_to_images] --label_nc [num_labels]
你还可以指定许多选项,请使用 python train.py --help.
测试
测试与测试预训练模型相似
python test.py --name [name_of_experiment] --dataset_mode [dataset_mode] --dataroot [path_to_dataset]

5G时代来临为何大厂选择了陶瓷滤波器而非性能更高的BAW
NI LabVIEW 8.5软件的五大特性与改进
浅析KUKA机器人系统变量和系统文件
受产业链上下游影响 全球液晶面板出货量下降
苹果售卖Lightning转3.5毫米插口双向音频线
英伟达再出黑魔法GauGAN:凭借几根线条,草图秒变风景照
如何利用Arduino实现激光绊线
新能源车换电模式“风口”来临,未来前景可期
欢迎报名|20+行业巨擘开年巨献,为我国数字经济发展增动能!
打印机和电脑怎么连接
罗氏线圈在有源滤波中的应用
高压变频器由几部分组成
LCD液晶显示屏的简单介绍
日本显示屏解决方案供应商NGC正在向客户供应三星的The Wall系列产品
Low-Temperature Data Retention
2023工业互联网及工业软件大会·10月落户北京
SPI数据传输有哪些方式
5G技术为沙特阿拉伯诸多领域创造新的商业模式并释放机遇
商汤科技入选2018 Q2胡润独角兽榜 成AI产业“角尖力量”
三星新旗舰Galaxy S21系列似乎也将步iPhone12的后尘