人像抠图:算法概述及工程实现(一)

举报
杜甫盖房子 发表于 2021/04/29 21:01:49 2021/04/29
【摘要】 本文将从算法概述、工程实现、优化改进三个方面阐述如何实现一个实时、优雅、精确的视频人像抠图项目。 什么是抠图对于一张图I, 我们感兴趣的人像部分称为前景F,其余部分为背景B,则图像I可以视为F与B的加权融合:I=alpha∗F+(1−alpha)∗BI = alpha * F + (1 - alpha) * BI=alpha∗F+(1−alpha)∗B,而抠图任务就是找到合适的权重alpha...

本文将从算法概述、工程实现、优化改进三个方面阐述如何实现一个实时、优雅、精确的视频人像抠图项目。

什么是抠图

对于一张图I, 我们感兴趣的人像部分称为前景F,其余部分为背景B,则图像I可以视为F与B的加权融合: I = a l p h a F + ( 1 a l p h a ) B I = alpha * F + (1 - alpha) * B ,而抠图任务就是找到合适的权重alpha。值得一提的是,如图,查看抠图ground truth可以看到,alpha是[0, 1]之间的连续值,可以理解为像素属于前景的概率,这与人像分割是不同的。如图,在人像分割任务中,alpha只能取0或1,本质上是分类任务,而抠图是回归任务。

抠图ground truth:
抠图ground truth
分割ground truth:
分割ground truth

相关工作

我们主要关注比较有代表性的基于深度学习的抠图算法。目前流行的抠图算法大致可以分为两类,一种是需要先验信息的Trimap-based的方法,宽泛的先验信息包括Trimap、粗糙mask、无人的背景图像、Pose信息等,网络使用先验信息与图片信息共同预测alpha;另一种则是Trimap-free的方法,仅根据图片信息预测alpha​,对实际应用更友好,但效果普遍不如Trimap-based的方法。

Trimap-based

Trimap是最常用的先验知识,顾名思义Trimap是一个三元图,每个像素取值为{0,128,255}其中之一,分别代表前景、未知与背景,如图。

图片来源:Deep Image Matting论文插图

Deep Image Matting

多数抠图算法采用了Trimap作为先验知识。Adobe在17年提出了Deep Image Matting[^1],这是首个端到端预测alpha的算法,整个模型分Matting encoder-decoder stage与Matting refinement stage两个部分,Matting encoder-decoder stage是第一部分,根据输入图像与对应的Trimap,得到较为粗略的alpha matte。Matting refinement stage是一个小的卷积网络,用来提升alpha matte的精度与边缘表现。

图片来源:Deep Image Matting论文插图

网络训练时使用了两个loss:alpha prediction loss与compositional loss。alpha prediction loss是网络预测得到的alpha matte与ground truth的逐像素绝对差的可微近似: L α i = ( α p i α g i ) 2 + ϵ 2   , α p i , α g i [ 0 , 1 ] L_{\alpha}^i = \sqrt{(\alpha_p^i - \alpha_g^i)^2 + \epsilon^2} \ , \alpha_p^i, \alpha_g^i \in [0, 1] ;类似的,compositional loss通过预测alpha matte得到预测前景,与真实背景结合得到预测RGB图像,与ground truth RGB图像逐像素计算绝对差计算loss: L c i = ( c p i c g i ) 2 + ϵ 2 L_{c}^i = \sqrt{(c_p^i - c_g^i)^2 + \epsilon^2} 。训练时首先更新encoder-decoder部分,收敛后再更新后一部分,最后微调整个网络。这种分段训练的技巧在很多其他任务里也较为常见。

本文在当时达到了state-of-the-art,后续很多文章都沿用了这种“粗略-精细”的抠图思路,此外,由于标注成本高,过去抠图任务的数据是非常有限的。本文还通过合成提出了一个大数据集Composition-1K,将精细标注的前景与不同背景融合,得到了45500训练图像和1000测试图像,大大丰富了抠图任务的数据。

Background Matting

Background Matting[^2]是华盛顿大学提出的抠图算法,后续发布了Backgroun MattingV2,方法比较有创新点,并且在实际工程应用中取得了不错的效果。

Backgroun Matting不需要输入trimap,而是输入图像或视频与对应的无人物背景,大大降低了实际应用的难度。网络由一个监督网络和一个半监督网络组成,作者首先使用Adobe数据集训练监督网络。原图经过处理得到soft segmentation S,此外还通过临近帧生成辅助信息motion prior M,与背景图一起送入监督网络。输入首先通过Context Switching block,相当于一个编码器,优势在于可以使网络更倾向于忽略相似背景,关注人物分割特征,同时也会使网络更适应真实世界的输入。接下来通过残差与解码模块输出alpha matte与前景F,计算alpha、F与RGB的误差得到loss进行训练: L = α α 1 + ( α ) ( α ) 1 + 2 F F 1 + I α F ( 1 α ) B 1 L=\left\|\alpha-\alpha^{*}\right\|_{1}+\left\|\nabla(\alpha)-\nabla\left(\alpha^{*}\right)\right\|_{1}+2\left\|F-F^{*}\right\|_{1}+\|I-\alpha F-(1-\alpha) B\|_{1}

同时,由于Adobe的数据都是基于合成的,为了更好的适应真实输入,文中提出一个自监督网络训练 G R e a l G_{Real} 来对未标注的真实输入进行学习。 G R e a l G_{Real} 输入与 G A d o b e G_{Adobe} 相同,用 G A d o b e G_{Adobe} 输出的alpha matte与F来监督 G R e a l G_{Real} 的输出得到loss,此外, G R e a l G_{Real} 的输出合成得到的RGB还将通过一个鉴别器来判断真伪得到第二个loss,共同训练 G R e a l G_{Real}

图片来源:Background Matting: The World is Your Green Screen论文插图

文中列举了一些使用手机拍摄得到的测试结果,可以看到大部分情况结果还是很不错的。

图片来源:Background Matting: The World is Your Green Screen论文插图

Background Matting V2

Background Matting得到了不错的效果,但该项目无法实时运行,也无法很好的处理高分辨率输入。所以项目团队又推出了Background Matting V2[^3],该项目可以以30fps的速度在4k输入上得到不错的结果。

图片来源:Real-Time High-Resolution Background Matting官方代码仓图示

文章实现高效高分辨率抠图的一个重要想法是,alpha matte中大部分像素是0或1,只有少量的区域包含过渡像素。因此文章将网络分为base网络和refine网络,base网络对低分辨率图像进行处理,refine网络根据base网络的处理结果选择原始高分辨率图像上特定图像块进行处理。

图片来源:Real-Time High-Resolution Background Matting论文插图

base网络输入为c倍下采样的图像与背景,通过encoder-decoder输出粗略的alpha matte、F、error map与hidden features。将采样c倍得到的error map E c E_c 上采样到原始分辨率的 1 4 \frac{1}{4} E 4 E_4 ,则 E 4 E_4 每个像素对应原图4x4图像块,从 E 4 E_4 选择topk error像素,即为原始topk error 4x4图像块。在选择出的像素周围裁剪出多个8x8图像块送入refine网络。refine网络是一个two-stage网络,首先将输入通过部分CBR操作得到第一阶段输出,与原始输入中提取的8x8图像块cat后输入第二阶段,最后将refine后的图像块与base得到的结果交换得到最终的alpha matte和F。

图片来源:Real-Time High-Resolution Background Matting论文插图

网络训练时计算多种loss:对于alpha matte计算 L α = α α 1 + α α 1 L_{\alpha}=\left\|\alpha-\alpha^{*}\right\|_{1}+\left\|\nabla \alpha-\nabla \alpha^{*}\right\|_{1} ,对于前景F计算 L F = ( α > 0 ) ( F F ) ) 1 \left.L_{F}=\|\left(\alpha^{*}>0\right) *\left(F-F^{*}\right)\right) \|_{1} ,对于error map定义ground truth error map为 E = α α E^{*}=\left|\alpha-\alpha^{*}\right| ,计算error map loss为: L E = E E 2 L_{E}=\left\|E-E^{*}\right\|_{2} ,总的base网络loss为: L base  = L α c + L F c + L E c L_{\text {base }}=L_{\alpha_{c}}+L_{F_{c}}+L_{E_{c}} 。refine网络loss为: L r e f i n e = L α + L F L_{refine} = L_\alpha + L_F

此外文章还发布了两个数据集:视频抠图数据集VideoMatte240K与图像抠图数据集PhotoMatte13K/85。VideoMatte240K收集了484个高分辨率视频,使用Chroma-key软件生成了240000+前景和alpha matte对。PhotoMatte13K/85则是在良好光照下拍摄照片使用软件和手工调整的方法得到13000+前景与alpha matte数据对。大型数据集同样是本文的重要贡献之一。

图片来源:VideoMatte240K数据集图示

图片来源:PhotoMatte85数据集图示

此外还有一些文章如Inductive Guided Filter[^4]、MGMatting[^5]等,使用粗略的mask作为先验信息预测alpha matte,在应用时也比trimap友好很多。MGMatting同时也提出了一个有636张精确标注人像的抠图数据集RealWorldPortrait-636,可以通过合成等数据增广方法扩展使用。

Trimap-free

实际应用中先验信息获取起来是很不方便的,一些文章将先验信息获取的部分也放在网络中进行。

Semantic Human Matting

阿里巴巴提出的Semantic Human Matting[^6]同样分解了抠图任务,网络分为三个部分,T-Net对像素三分类得到Trimap,与图像concat得到六通道输入送入M-Net,M-Net通过encoder-decoder得到较为粗糙的alpha matte,最后将T-Net与M-Net的输出送入融合模块Fusion Module,最终得到更精确的alpha matte。

图片来源:Semantic Human Matting论文插图

网络训练时的alpha loss分为alpha loss与compositional loss,与DIM类似,此外还加入了像素分类loss L t L_t ,最终loss为: L = L p + L t = L α + L c + L t L = L_p + L_t=L_\alpha + L_c + L_t 。文章实现了端到端Trimap-free的抠图算法,但较为臃肿。此外文章提出Fashion Model数据集,从电商网站收集整理了35000+标注的图片,但并没有开放。

Modnet

modnet[^7]认为神经网络更擅长学习单一任务,所以将抠图任务分为三个子任务,分别进行显式监督训练和同步优化,最终可以以63fps在512x512输入下达到soft结果,因此在后续的工程实现中我也选择了modnet作为Baseline。

图片来源:Is a Green Screen Really Necessary for Real-Time Portrait Matting?论文官方代码库图示

网络的三个子任务分别是Semantic Estimation、Detail Prediction和Semantic-Detail Fusion,Semantic Estimation部分由backbone与decoder组成,输出相对于输入下采样16倍的semantics,用来提供语义信息,此任务的ground truth是标注的alpha经过下采样与高斯滤波得到的。 Detail Prediction任务输入有三个:原始图像、semantic分支的中间特征以及S分支的输出 S p S_p ,D分支同样是encoder-decoder结构,值得留意的该分支的loss,由于D分支只关注细节特征,所以通过ground truth alpha生成trimap,只在trimap的unknown区域计算 d p d_p α g \alpha_g L 1 L_1 损失。F分支对语义信息与细节预测进行融合,得到最终的alpha matte与ground truth计算 L 1 L_1 损失,网络训练的总损失为: L = λ s L s + λ d L d + λ α L α L=\lambda_sL_s + \lambda_dL_d+\lambda_{\alpha}L_{\alpha}

图片来源:Is a Green Screen Really Necessary for Real-Time Portrait Matting?论文插图

此外,modnet认为模型在某些场景中实际结果不理想是因为分支预测不一致导致的,因此为了适应真实图像域,modnet基于子目标一致性提出了自监督的SOC策略。具体来说对于未标注的图像,经由网络得到了semantics、details、alpha matte三个输出,文章倾向于认为semantics是更可信的结果,因此计算一致性损失: L cons  = 1 2 G ( α p ) s p 2 + m a s k α p d p 1 L_{\text {cons }}=\frac{1}{2}\left\|G\left(\alpha_{p}\right)-s_{p}\right\|_{2}+mask\left\|\alpha_{p}-d_{p}\right\|_{1} ,强制alpha语义与 s p s_p 一致,细节与 d p d_p 一致。在semantics结果比较理想时,这种方法还是比较有效的。

图片来源:Is a Green Screen Really Necessary for Real-Time Portrait Matting?论文插图

最后,文章还提出了一种使视频结果在时间上更平滑的后处理方式OFD,在前后两帧较为相似而中间帧与前后两帧距离较大时,使用前后帧的平均值平滑中间帧,但该方法会导致实际结果比输入延迟一帧。

图片来源:Is a Green Screen Really Necessary for Real-Time Portrait Matting?论文插图

此外, U 2 U^2 -Net、SIM等网络可以对图像进行显著性抠图,感兴趣的话可以关注一下。

数据集

评价指标

常用的客观评价指标来自于2009年CVPR一篇论文[^8],主要有:

  • SAD:绝对差和, S A D = i α i α i SAD=\sum_i|\alpha_i-\alpha_i^*|
  • MSE:均方误差, M S E = 1 n i ( α i α i ) 2 MSE=\frac{1}{n}\sum_i(\alpha_i-\alpha_i^*)^2
  • Gradient error:梯度误差, G r a d i e n t   e r r o r = ( α i α i ) q Gradient\ error = \sum(\nabla\alpha_i-\nabla\alpha_i^*)^q
  • Connectivity error:连通性误差, C o n n e c t i v i t y   e r r o r = i ( φ ( α i , Ω ) φ ( α i , Ω ) ) Connectivity \ error=\sum_{i}\left(\varphi\left(\alpha_{i}, \Omega\right)-\varphi\left(\alpha_{i}^{*}, \Omega\right)\right)

此外,可以在paperwithcode上查看Image Matting任务的相关文章,在Alpha Matting网站上查看一些算法的evaluation指标。下一篇文章将会分享baseline改进与工程落地的方法~

[^1]: Xu, Ning, et al. “Deep image matting.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2017
[^2]:Sengupta, Soumyadip, et al. “Background matting: The world is your green screen.” Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020.
[^3]:Lin, Shanchuan, et al. “Real-Time High-Resolution Background Matting.” arXiv preprint arXiv:2012.07810 (2020).
[^4]:Li, Yaoyi, et al. “Inductive Guided Filter: Real-Time Deep Matting with Weakly Annotated Masks on Mobile Devices.” 2020 IEEE International Conference on Multimedia and Expo (ICME). IEEE, 2020.
[^5]: Yu, Qihang, et al. “Mask Guided Matting via Progressive Refinement Network.” arXiv e-prints (2020): arXiv-2012.
[^6]: Chen, Quan, et al. “Semantic human matting.” Proceedings of the 26th ACM international conference on Multimedia. 2018.
[^7]: Ke, Zhanghan, et al. “Is a Green Screen Really Necessary for Real-Time Human Matting?.” arXiv preprint arXiv:2011.11961 (2020).
[^8]:Rhemann, Christoph, et al. “A perceptually motivated online benchmark for image matting.” 2009 IEEE Conference on Computer Vision and Pattern Recognition. IEEE, 2009.

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

举报
请填写举报理由
0/200