Fang, Hui, and M. Zhang. “Creatism: A deep-learning photographer capable of creating professional work.” (2017).
这篇论文借助有限的无标定数据,用深度网络在虚拟自然环境中完成“取景-调色-打光”的摄影过程。所涉及的理论并不复杂,但给出的过程详细,对解决实际问题很有启发。
这里可以看到一些好的结果。
概述
问题
本文的起点非常简单,绝对算得上“平价数据”:
- 15000张500px.com上的风景类专业摄影作品,不含有任何标定。用于训练。
- AVA美感图像数据库1,包含250K图像,带有美感评分。
- Google自己的街景数据库,集中在几大国家公园。作为测试。
希望能实现一个自动系统:从街景中生成具有专业水平的摄影作品。
一个不好使的点子
我们很自然地想到,用AVA直接训练一个“图像-评分”的回归网络:好看的照片评分高,不好看的评分低。之后在街景数据库中采样,输出评分高的结果。
还真不行。
- 美感包含着许多方面。需要指数级别的训练样本。
- 即使构造出这样的网络,其梯度可能也毫无意义。
- 在样本不足的情况下,很可能学出跑偏的判别标准。e.g.饱和度越高越好!
- 网络可能复杂得无法优化。
本文的做法
本文的思路非常朴素:让算法像人一样分步骤处理拍照问题。
- 取景:实现一个【构图】评分网络,对各种可能取景进行采样,选择评分最高的一个截图。
- 调色:实现一个【饱和度/HDR】评分网络,遍历饱和度/HDR操作的强度,选择评分最高的施加到输入图像上。
- 打光:实现一个“图像-图像”的【局部提亮】网络。
- 选片:实现一个【整体效果】评分网络,从经过处理的候选图像中,选择较好的输出。
评分包括:1分(随手乱拍),2分(老百姓拍的正常照片),3分(颇有品味票友),4分最高(专家级)。
当然,这种做法只单独考察了美感的三个方面,不过胜在可行性强。
实现
构图评分网络
从500px数据集中,随机从原图裁剪,按照如下参数产生等量的两批数据作为样本的输入:
- 宽度为原图90%~100%,长宽比为0.5~2
- 宽度为原图50%~90%,长宽比同上
将裁剪结果占原图比例作为样本的标定值。
使用的Inception v32作为回归网络。输出结果记为
Φcrop
。
需要特别说明的是,构图对摄影作品的影响是决定性的。第一步选了一个乌漆墨黑的地方,后面无论怎么调也救回不来了。所以在取景步骤中,要结合整体效果的得分来进行。
饱和度评分网络
对于500px数据集的每一个样本,生成如下两类样本作为样本的输入:
- 1张原图
- 6张扰动,随机调整图像饱和度为原图0%~80%
将样本与原图的平均像素值之差作为样本的标定值。0%对应1,大于等于6%对应0,中间线性插值。
使用的Inception v33作为回归网络。输出结果记为
Φsaturation
。
HDR评分网络
对于500px数据集的每一个样本,生成如下两类样本作为样本的输入:
- 6张欠HDR样本,分布为(-max, -0.5max)
- 3张过HDR样本,分布为(0.5max, 0.5max)
将样本与原图的平均像素值之差作为样本的标定值。0%对应1,大于等于20%对应0,中间线性插值。
使用的Inception v34作为回归网络。输出结果记为
ΦHDR
。
整体效果评分网络
使用AVA数据库进行训练。
将一部分AVA图像给专业摄影师评分,可以将AVA评分通过一个线性映射,归一化的本文的1到4分体系中。
网络采用Inception v35。输出结果记为
Φglobal
。
等等,你不是刚说,不能直接训一个评分网络吗?
此处评分网络在本文中只作为最后的补充步骤使用,所以其缺陷并不致命。
局部提亮网络
受限于样本数量和问题的复杂性,我们不去直接训练一个给图片打光的网络,而是将GAN中的Generator作为图像的refiner,和Discriminator一起训练。
为了更进一步约束问题,我们假设:图像的打光由
8×8
的mask决定
于是,有了如下的网络结构:
其中M为500px数据库中的原始图片。
M’为原始图片经过如下随机扰动之后的结果:
M”为经过Generator修正后的结果。
多模型
GAN以训练困难著称。本文不去等待GAN收敛,而是采用了多模型的策略。
- 使用37套随机初始化参数,分别训练2000K步
- 对于每套参数,每隔100K步保留一个snapshot
- 在测试集上,保留最优的50个模型
- 人工剔除下次瑕疵较大的,保留30个模型(此处未详述)
联合升采样
Apply mask这步,使用了joint bilateral upsamling方法6。简单来说,就是在对mask升采样的同时,参考原始图像(左)的信息,使得大尺寸mask(中)和原图细节更为匹配。
使用
各步骤如下进行
- 取景
- 调色
- 遍历HDR强度,选择
ΦHDR
最高的取值,生成
P2
- 遍历饱和度,选择
Φsaturation
最高的取值,生成
P3
- 打光
- 用所有局部提亮模型,从
P3
生成
P4
- 所有模型结果中,保留
Φglobal
最大的一个
- 出片
- 在一个
P0
的所有结果中,保留
Φglobal
的一个
- 在所有地点的所有结果中,按照
Φglobal
排序,获得最终结果
结果与启发
经过上述处理,在街景数据库中获取了173张评分超过2.9的照片。这些照片经过6位专业摄影师大人,有41.4%获得了超过3.0的得分。
本文的效果并不特别惊艳,也有很多手工挑选的痕迹。和时下许多“end-to-end”系统比起来,很有图像处理年代精打细作的风范。这种思路虽然讲起来炫酷程度不足,但在解决实际问题时,往往比复杂的、高端的系统开发周期更短,更加鲁棒,值得我们借鉴。
毕竟,连Google都这么搞了,咱们还有啥不好意思的呢。