编者按:今天,一位reddit网友分享了自己近期的一个项目,他训练了一个用于着色和恢复旧图像的深度学习模型,效果很不错。虽然是未完成品,我们在这里先把这个项目简单介绍给大家,感兴趣的读者可以去Github上继续围观。
鉴于模型的目标是为黑白旧照片着色,我们先看看它的输出效果。
1890年俄罗斯圣彼得堡皇家剧院的芭蕾舞剧“睡美人”剧照
在客厅休息的女人(1920年,瑞典)
医学生和摆好pose的骨架(1980年)
夏威夷冲浪者(1890年)
Whirling Horse(1898年)
Miller&Bert Shoemaker经营的冷饮机柜台(1899年)
19世纪80年代的巴黎
鸟瞰爱丁堡(1920s)
德克萨斯妇女(1938年)
人们围观电视机(1936年)
地理课(1850年)
吸鸦片者(1880年)
旧金山朴次茅斯广场(1851年)
根据作者的介绍,这是一个基于深度学习的模型,它主要结合了以下几种方法:
自我注意生成对抗网络(SAGAN)。除了生成器是个预训练的Unet,作者参考了SAGAN那篇论文,把去年以来非常火的谱归一化和注意力机制引入自己的模型。他也尝试过Wasserstein GAN,但效果不尽如人意。
Progressive Growing of GAN(arxiv.org/abs/1706.08500)。作者借鉴了这篇论文中提出的训练结构,让神经网络层数保持不变,逐步改变输入的大小、调整学习率,以确保图像大小的成功转换。而这种方法也确实有效——不进加快了训练速度,更稳定,可扩展性也更强。
两倍规模更新规则(TTUR)(arxiv.org/abs/1706.08500)。这也是SAGAN用来稳定训练的方法之一,它本质上不难理解,就是一对一的生成器/判别器迭代和判别器学习率更高。
生成器的损失。这分为两部分:其一是VGG16的基本感知损失(或者说特征损失),也就是生成器输出的图像和真实图像的偏差;其二是判别器的损失。感知损失本身并不足以产生良好的结果,相反地,它会鼓励生成器输出一堆带棕色/绿色/蓝色色块的图像去“欺骗”判别器。所以为了避免这个问题,最关键的一点是意识到GAN实际上是在学习损失函数,损失设置会极大影响模型最后的性能。
这个模型优点是几乎对所有类别的图像都有用,这在上一节中已经得到印证。更重要的是,它还只是一个组件,并不是一个完整的、成熟的成果。作者也表示,他的下一个项目是“defade”模型,就是继续训练相同的模型重建图像,解决现阶段模型存在的对比度/亮度失真等问题,下图是改进效果:
在开发的过程中,作者也发现了DeOldify的许多问题,它们到目前都还没有一个准确的结论:
模型需要事先微调图像大小才能获得最好的输出结果,在生成图像时,模型显然对图像的纵横比/大小有一定的依赖性。
这个模型对内存的要求很高,1080TI完全不够用。
不能在Unet上用零填充,因为模型输出的右侧和底边会出现奇怪的边框。
模型更喜欢把衣服着色为蓝色。
除了上面精选出的优良结果,模型确实也有不少着色失败的例子,比如下面这只“红色”的手:
塞内卡土著(1908年)
Github地址:github.com/jantic/DeOldify/blob/master/README.md
星标论智,每天获取最新资讯