by未来建筑实验室
作者:未来建筑实验室
编辑:唐里
建筑设计会经常遇到出夜景效果图的时候,日夜景的效果转换,临摹勾勒、渲染出图、后期加工...工序繁多。除了对制作工具的熟练,更关键的是需依靠经验判断建筑明暗、光影和颜色等在白天和夜晚的不同状态。
近日,AI建筑研究团队未来建筑实验室运用之前一项深度学习成果,做到10秒内完成日夜景转换,让建筑菜鸟也能快速拥有合格效果图。
1. 三步实现日夜景秒速转换
第一步,选择一张日景图S(source);
第二步,再选择一张目标的夜景图R(reference);
第三步,基于深度学习的色彩算法将在两张图片上对具有相似语义结构(sementic structures)的部分进行颜色迁移,秒速生成一张新的图片T(target)。它有着S的结构和内容,同时具有R的颜色风格(即R S=T)。
2. 建筑颜色迁移:Neural Color Transfer
Neural Color Transfer(下称NCT)是基于语义信息的对应(correspondence)进行匹配和颜色的迁移,NCT使用了卷积神经网络来对图片提取特征以便于后续的匹配。在匹配完成后,NCT使用了一个线性模型,在满足局部和整体一致性的情况下进行优化。
在匹配完成后,为了颜色迁移在局部变化和整体上的一致性,NCT使用了一个线性模型在同时满足局部和整体的约束下进行优化。
输入的图片S和R共享很多语义上相关的(semantically-related)内容,同时在展示上又有很大的不同。
S和R中都包含建筑,但分别为日景和夜景。要在两张存在很大色差的图片上建立语义的对应是一个非常棘手的问题,尤其是传统的特征提取算法是无法有效的提取出图片的语义信息。
因此使用预训练好的深度学习模型来提取特征成为解决这个问题的有效途径, 这也符合迁移学习(transfer learning)的思想:
“Transfer learning is a research problem in machine learning that focuses on storing knowledge gained while solving one problem and applying it to a different but related problem.”
(West, Jeremy; Ventura, Dan; Warnick, Sean (2007). "Spring Research Presentation: A Theoretical Foundation for Inductive Transfer")。
3. 如何做到日夜景秒速转换?
NCT采用经典图片分类的多层卷积神经网络(CNN)模型VGG19。
VGG19是在ImageNet上,1000个分类的共计约120万张图片上预训练的(http://image-net.org/challenges/LSVRC/2014/browse-synsets)。这个模型有非常强的泛用性,被普遍应用于图片特征提取。
随着模型的层数由浅到深(下图从左到右),VGG19可以抽取从图片的低级细节(对颜色敏感)到高级的语义信息(对颜色不敏感)。
图片分类的多层卷积神经网络(CNN)模型VGG19 结构图
对于S和R两张图片,分别提取VGG19在relu1_1, relu2_1, relu3_1, relu4_1和relu5_1五个层的输出作为这两张图片在5个层级(L = 1, 2, 3, 4, 5)的特征图。
当处于某个层级L时,可通过VGG19提取出图片S和R对应的特征图FLS和FLR,对S和R建立映射。又通过利用概率进行快速匹配的PatchMatch算法(https://gfx.cs.princeton.edu/pubs/Barnes_2009_PAR/) ,分别建立了FLS到FLR的映射 ϕLS→R和FLR到FLS的映射ϕLR→S。
PatchMatch算法
但当L>1时,特征图的尺寸小于原图,将导致映射关系发生变化。重构的图片在形状、同语义像素等方面添加额外的约束后通过线性回归,可进行局部颜色迁移,以解决丢失部分原有一致性的问题。如尺寸还小于原图,将采用快速导向滤波Fast Guided Filter(https://arxiv.org/pdf/1505.00996.pdf) 尽可能实现对细节的保留。
4. 如何做到更细节化的表现效果?
前面也提到,VGG19是一个泛用模型, 在某些情况下难以提取有效的语义信息,对于细部还原还有待提升。于是,针对NCT我们进行了两方面的改进:1. 特征标准化;2. 增加特征维度。
1)特征归一化(normalization)
图片S对应的特征图FLS形状为(高, 宽, 通道),某种意义上,FLS的每个通道代表图片S的某一个特征。经过实际对比后发现,在每一个通道上像素值的变化范围出现巨大差异,例如有的通道像素点取值范围在[-500, 100],有的只在[-1, 1]之间。
这可能会导致的情况:特征图FLS的某一通道提取出一种很重要的语义信息,但由于其变化范围过小,从而在PatchMatch过程中对结果的影响很小,导致并未在原图S和R上建立有效映射。
标准正态分布(Standard Normal Distribution)就是解决这个问题的方法之一,对于特征图的每一个通道进行如下操作:
z = (x - μ) / σ
x 为该通道每个像素的值
μ 是该通道所有像素的平均值
σ 为该通道所有像素值的标准差
2)增加特征维度
为了更好地建立S和R之间的映射,增加额外特征也是一种有效方法。聚类和语义分割都是补充图片特征的有效方法。
聚类
S为建筑日景图,R为建筑夜景图,层级L为1,聚类产生的簇的数量(number of clusters)为3。
用FCLS和FCLR代替原来的FLS和FLR,且仅在L = 1时做一次迁移的效果如下:
vs
通过上面两组图的对比可以看到在加入聚类特征后,仅在最低的层级做一次颜色迁移的效果要比原来从高到低在5个层级上做迁移的效果还要好。
语义分割(semantic segmentation)
语义分割模型的作用方式和聚类相似,但它使用了语义分割模型的输出替代了聚类图CLS和CLR。我们使用的语义分割模型为基于MIT的ADE20K数据集训练的PSPNet模型(https://github.com/Vladkryvoruchko/PSPNet-Keras-tensorflow)。
这种方法的优点在于可以采用训练好的、适用于特定应用场景的语义分割模型,给颜色迁移提供方向性的指导。
越是针对某个垂直领域的应用场景就越需要一个专门针对该场景的语义分割模型。因为不管是在ImageNet数据集上训练的VGG19还是在ADE20K数据集上训练的PSPNet相对都是比较泛用的模型,很难满足专业需求。
针对复杂办公场景还需进行更细致的采集和标注,积累到一定的数据量后再选择合适的语义分割模型进行训练,将其作为特征提取模型加入(或者取代)VGG19。
中秋版Demo