题题外话:
这篇博文是在两年多以前开始写的,所以中间有一些认知上的误差,比如当前工作归类到了CG领域,但实际上它还是一篇纯CV的文章,只是类似于CG是一种纯应用类的方法。因为最近在学CG相关的知识,有了比较明确的理解,这里特殊说明一下。
题外话:
一直声称对CG有兴趣的我,第一次认真地读了一篇CG领域的文章,本文用于记录读论文的心得(碎碎念)。直观的感受是,CG和CV的差异在本文中的体现主要在于CG较CV而言,更偏上层应用,端到端的模型在其中只是一个步骤,好奇CG会不会也被端到端的模式侵袭。不过这篇关于照片中天空替换的算法Sky is Not the Limit: Semantic-Aware Sky Replacement已经是16年的SIGGRAPH了,比较久远。
摘要
作为照片中普遍出现的背景——天空,通常不会让摄影师过多地关注。通常由专业后期经复杂的手法对其进行矫正(俗称PS)。本文中,作者提出了一个自动替换背景的算法,可以生成真实的、具有多种场景的天空。该算法的关键idea是使用视觉的语义信息来辅助整个处理过程,其中包括天空部分的分割、恰当天空素材的搜索、以及天空替换。
1. 首先,作者训练了一个深度卷积网络,用其来处理照片的场景切分,相当于为分割天空区域提供视觉的先验信息。
2. 然后,为了找到合适的替换素材,作者提出了一个数据驱动的天空搜索框架,搜索基于输入图像的语义信息分布和布局来进行。
3. 最终,为了得到合成自然的替换天空图,作者使用了一个表观迁移的方法将原图剩下部分和替换的天空部分进行局部和语义上的匹配。
本文提出的算法可以自动生成观感较好的合成图像,并且给出了很多实验结果。(感兴趣的童鞋们可以去读原文)
算法概览
输入一张图I,旨在自动地生成具有同样前景不同的天空背景的图片集。本文将该任务拆分为三个子任务:
1)天空分割,将图片I中的天空区域 I^{sky} 和 前景区域 I^{fg} 区分开;
2)天空搜索,从图片集中检索到匹配输入图片语义信息的素材图 R;
3)天空替换,将图片原有的天空区域 I^{sky} 替换为新的天空 R^{sky}。同时,前景区域 I^{fg} 的颜色分布会自动调整,以适应拼接的天空背景,使得合成的图像一致且自然。
图片的语义信息从何而来?作者训练了一个全卷积神经网络(FCN),具体细节可移步我的上一篇博客FCN,使用该模型来对图像进行场景分解。为了得到较好的FCN模型,作者从LMSun数据集中随机选择了15,000张户外场景的图像作为该模型的训练数据。其余的训练细节类似于FCN原文。
基于FCN得到的粗糙的场景分解的结果,作者使用了一个online refinement在线完善的操作以得到一个更加精确的天空分割区域。(没忍住瞄了一眼,果然是基于CRF :)FCN模型的输出可以很好地描述输入的图像的场景布局,因而可作为后续天空搜索及天空替换的预处理。
整体方法的框图如下图所示。 输入一张图像,分别传入两个分支。其一(图中下方的分支)是基于FCN网络得到输入图像的场景切分(scene parsing)结果以及对应到每个语义标签的语义分割图(图中所示灰度图)。另一个分支(图中上方的分支)是一个由粗糙到精修的(coarse-to-fine)天空分割过程,将输入图像中的天空部分扣出,如图中红色蒙版(mask)标注所示。为了找到合适的匹配的天空图像,作者提出了一个图像搜索方法,该方法基于相似的语义信息布局(layout)结合下方分支得到的语义分割图对图像进行搜索。基于搜索到的天空图像,进行图像的前景和天空合成。最终,合成的图像还会根据搜索到的天空图像进行对应的风格迁移,输出合成效果自然的替换了天空的图像。
天空分割
基于FCN得到的场景切分结果,本文提出了一个准确的天空分割算法,以辅助天空替换并且很好地减少了视觉上的合成误差。无论输入的图像的表观特性和场景布局如何变化,由FCN得到的场景切分结果可以准确地将天空区域定位。然而,FCN的输出结果分辨率比较低,其分割图的边缘处会比较粗糙,且造成不必要的细节损失。在天空替换的要求下,FCN的结果不能直接使用。
为了得到一个准确的天空分割图,作者使用了经典的CRF方程来对分割结果进行修缮。其能量方程定义如下:
其中U_c代表颜色项,U_t代表纹理项,用于评估每个像素是否为天空;U_f是位置项,主要依赖于FCN的输出;V是一个相对项,对于相邻的x_i和x_j,两个像素对应的特性应尽可能接近,差异大的像素对之间则是分割边缘处。其中λ_1/2/3都设为1,λ_4设为100,从而保证得到平滑准确的分割边缘。
通过使用以上精修策略,天空分割的结果以IoU为评价指标,从87.6%提升到88.7%。在这里我省略了很多的细节,如有必要大家可以查看论文原文。
实验结果
当当当,又到了最关键的上效果环节~直接上一组图,更多实验细节大家可以直接去原文查看。
使用不同的搜索天空图像的算法合成的结果对比。
最后总结一下这个算法,整体的方法将整个天空替换的过程考虑周到, 包括分割由粗粒度到细致的处理,以及搜索匹配天空的图像的算法,最后合成图像的风格迁移。
前文提到过这个算法很具有应用性质,那么有一个疑惑是在落地过程中,不知道多个步骤会不会带来计算负载耗时超长的问题。欢迎大家评论区指正和讨论!
后记:
这篇博文时隔两年九个月总算写完发出,没想到在学生时代一直期待要学习的图形类任务,在过去半年里我真的有机会开始好好学习。虽然时至今日还有很多知识都掌握的不完全,每天的时间管理也仍需加强,希望可以空出一些时间并配合好合适的规划,将待办事项一项项打勾。
世间际遇真是奇妙呀,也许一切自有其安排,别着急,慢慢来吧~ *^____________________^*