来源:GitHub
编辑:肖琴
图像着色、图像增强、恢复旧图像等是计算机视觉领域的热点问题,不过,用一个模型很好地实现多个任务的研究不多。
近日,GitHub用户Janson Antic发布了一个名为DeOldify的项目,这是一个给旧照片着色和修复的神器。
地址:https://github.com/jantic/DeOldify
让我们先看看效果:
Maria Anderson as the Fairy Fleur de farine and Lyubov Rabtsova as her page in the ballet “Sleeping Beauty” at the Imperial Theater, St. Petersburg, Russia, 1890.
Woman relaxing in her livingroom (1920, Sweden)
Medical Students pose with a cadaver around 1890
Surfer in Hawaii, 1890
Whirling Horse, 1898
Interior of Miller and Shoemaker Soda Fountain, 1899
Paris in the 1880s
Edinburgh from the sky in the 1920s
(更多结果图像请点击文末链接查看)
这是一个基于深度学习的模型。具体来说,我结合了以下方法:
Self-Attention生成对抗网络(https://arxiv.org/abs/1805.08318)。除了generator是一个预训练的Unet之外,我只做了一点修改,使它具有光谱规范化(spectral normalization)和自注意力(self attention)。一开始我努力想实现一个Wasserstein GAN版本,但没成功,转向这个版本之后就一切都好了。我喜欢Wasserstein GAN的理论,但它在实践中并不成功,因此我喜欢上了Self-Attention GANs。
训练结构的灵感来自Progressive Growing of GANs(https://arxiv.org/abs/1710.10196)。但不是完全一样,差别主要是我的版本层数保持不变——只是逐步改变输入的大小并调整学习率以确保尺寸的转换成功。最终结果基本一致——训练速度更快、更稳定,并且能更好地泛化。
Two Time-Scale Update Rule(https://arxiv.org/abs/1706.08500)。 这也非常简单, 就是一对一的generator/critic迭代和更高的critic学习率。
Generator Loss包括两部分:一部分是基于VGG16的基本Perceptual Loss(或Feature Loss),基本上只是使生成模型偏差以复制输入图像。第二部分是critic的loss score。对于curious来说,Perceptual Loss本身不足以产生良好的结果。它往往只是鼓励一堆棕色/绿色/蓝色 ,基本上这只是在测试中作弊,神经网络很擅长做这些!这里需要意识到的关键问题是,GAN实际上正在学习损失函数,这对于我们在机器学习中所追求的理想来说真正迈出了一大步。当然,当你把以前人工编码的东西交给机器学习,通常能得到更好的结果。这个项目就是这样。
这个模型的惊艳之处在于,它对各种各样的图像修改都很有用,而且应该能做得很好。上面举例的是着色模型的结果,但这只是pipeline的一个部分,用同样的模型可以开发更多任务。
我用这个模型开发的下一个任务是修复旧图像,使它们看起来更好,所以我的下一个项目是“defade”模型。我已经做了最初的努力,在我写这篇文章时已经处于模型训练的早期阶段。基本上,它只是训练相同的模型来重建图像,使用夸张的对比度/亮度调整来增强图像,作为褪色照片和使用旧/坏设备拍摄的照片的模拟。我已经看到了一些有希望的结果:
以上就是这个项目的要点——我希望用GAN让老照片看起来更好,更重要的是,让项目有用。
这个项目是用Fast.AI library建的。不幸的是,用的是旧版本,我还没有升级到新版本。 因此,先决条件是:
旧版本的Fast.AI library:https://github.com/jantic/fastai
Fast.AI已有的dependencies:已有方便的requirements.txt和environment.yml
Pytorch 0.4.1(需要spectral_norm,因此需要最新的稳定版本)。
Jupyter Lab
Tensorboard(即安装Tensorflow)和TensorboardX(https://github.com/lanpa/tensorboardX)。 需要注意的是,默认情况下, progress images将每200次迭代写入Tensorboard,因此可以持续方便地查看模型正在执行的操作。
BEEFY显卡。我的是GeForce 1080TI(11GB),真希望有比11 GB更大的内存。Unet和Critic都非常大,但越大效果越好。
对于想要立即开始转换自己的图像的人:......好吧,你需要等我先上传预先训练好的权重。 一旦可用,就可以在可视化笔记本中引用它们。我将使用ColorizationVisualization.ipynb。你只需要用我上传的生成器(colorizer)的权重文件替换colorizer_path = IMAGENET.parent /('bwc_rc_gen_192.h5')
假设你在内存足够大的GPU(例如11 GB GeForce 1080Ti)上运行这个程序,我将保持大小约为500px。如果内存小于11GB,你可以将图像缩小,或尝试在CPU上运行。
项目地址:
https://github.com/jantic/DeOldify
☞ OpenPV平台发布在线的ParallelEye视觉任务挑战赛
☞【学界】OpenPV:中科院研究人员建立开源的平行视觉研究平台
☞【学界】ParallelEye:面向交通视觉研究构建的大规模虚拟图像集
☞【CFP】Virtual Images for Visual Artificial Intelligence
☞【最详尽的GAN介绍】王飞跃等:生成式对抗网络 GAN 的研究进展与展望
☞【智能自动化学科前沿讲习班第1期】王飞跃教授:生成式对抗网络GAN的研究进展与展望
☞【智能自动化学科前沿讲习班第1期】王坤峰副研究员:GAN与平行视觉
☞【重磅】平行将成为一种常态:从SimGAN获得CVPR 2017最佳论文奖说起
☞【学界】Ian Goodfellow等人提出对抗重编程,让神经网络执行其他任务
☞【学界】六种GAN评估指标的综合评估实验,迈向定量评估GAN的重要一步
☞【资源】T2T:利用StackGAN和ProGAN从文本生成人脸
☞【学界】 CVPR 2018最佳论文作者亲笔解读:研究视觉任务关联性的Taskonomy
☞【业界】英特尔OpenVINO™工具包为创新智能视觉提供更多可能
☞【学界】ECCV 2018: 对抗深度学习: 鱼 (模型准确性) 与熊掌 (模型鲁棒性) 能否兼得