注:本文无任何商业用途
1. 前言
在之前一些厂商的人像背景虚化效果中,能够明显看到其是对人像进行了分割,之后再单独将背景进行虚化,最后将人像区域与虚化之后的背景融合起来(这里面需要处理很多画质相关的细节问题)。其效果在目前看来已经有了较大的进步,下图是最新发布的VIVO X70处理出来的虚化结果(注:图片来源于网络,侵删):
可以看到其参照莱卡相机的虚化效果,对应对输入的图像进行虚化处理,这样的效果在外行人看来已经像那么回事了(尽管还会存在一些badcase,但是相信明天会更好。。。)。
单反相机拍摄的背景虚化效果一直是手机相机希望达到的,现在已经有一些工作围绕这个主体展开,并且也取得了相当不错的效果,比如上文中提到的VIVO和Google Pixel 2等。就技术角度来讲现在的背景虚化算法包含了基于传统的图像滤波器背景虚化,以及基于深度学习的背景虚化上来了。但是其背景虚化的终极目标还是希望达到单反相机的效果,下图展示真实的单反相机背景虚化样张(注:图片源自网络,侵删):
对此也有一些学者开展这方面的研究以及相关的竞赛,如:AIM 2020,其包含的挑战内容就包含:
对此,本篇文章从深度学习的角度对bokeh effect的生成进行了研究,在研究的过程中找到一些文章,这里对其进行简要说明,希望对大家在进行该项目的时候在思维上有所启发。
PS: 下面文献中的一些方法没有开放完全代码,需要复现需慎重,但是可以提供一些思路作为参考。
2. 文献
2.1 PyNet
论文名称:《Rendering Natural Camera Bokeh Effect with Deep Learning》
参考代码:PyNET-PyTorch
这篇文章使用未虚化的图像与虚化的图像构建pair对,之后使用一个U型的编解码网络完成对虚化的拟合。在这个过程中为了提升虚化效果的鲁棒性,还可以选择使用深度估计作为额外的guidance,使得最后生成的结果更加准确。下图是其网络结构图:
其监督的损失函数使用的是L1、SSIM和content-loss(style transfer中的content loss)组成,不过在不同的输出stage上略有不同,其损失函数的组合形式为:
L l e v e l i = α i L L 1 + β i ( 1 − L S S I M ) + σ i L c o n t e n t \mathcal{L}_{level_i}=\alpha_i\mathcal{L}_{L1}+\beta_i(1-\mathcal{L}_{SSIM})+\sigma_i\mathcal{L}_{content} Lleveli=αiLL1+βi(1−LSSIM)+σiLcontent
PS: 具体的实现细节可以参考其放出的代码实现,不过需要留意的是其训练的过程是有点繁琐。。。
2.2 BGGAN
论文名称:《BGGAN:Bokeh-Glass Generative Adversarial Network for Rendering Realistic Bokeh》
参考代码:null
这篇文章使用的是级联的双U型结构去优化bokeh效果,其网络结构也很简单,可以参考下图:
其对应的损失函数先是包含了bokeh预测结果的L1、SSIM和content-loss。这里需要指出的一点是其content-loss使用了L1的形式:
L c o n t e n t = 1 H W C ∑ i = 1 H ∑ j = 1 W ∑ k = 1 C ∣ ∣ F ( G ( I )