《MODNet:Is a Green Screen Really Necessary for Real-Time Portrait Matting?》论文笔记

参考代码:MODNet

1. 概述

导读:这篇文章提出了一种trimap-free的matting方法,其matting的过程是一个将原图像拆分与组合的过程,这也是文章方法很大的优势。在文章中将matting的过程划分为三个部分:整图目标区域语义信息提取(semantic estimation)/半透明区域细节优化(detail prediction)/语义信息与细节信息的融合预测(semantic-detail)。一般的matting模型会在训练集上表现出过拟合的特性,导致其在真实的环境下性能表现不佳,对此文章引入了自监督的方式(文中的SOC策略)去引导产生更具泛化性能的matting模型。对于视频使用场景文章提出了对于当前帧与前后帧的补救融合策略(文中的ODF策略),进一步提升matting结果在视频场景下的稳定性。由于采用的backbone是MobileNet-V2(并没有使用depthwise中间结果),并且detail prediction/semantic-detail fusion部分采用的结构简单,因而整体的算法可以在1080Ti显卡上跑到63FPS(512*512的输入)的帧率。

下图展示的是文章方法的三个阶段:
在这里插入图片描述

2. 方法设计

2.1 网络结构

文章的网络结构见下图所示:
在这里插入图片描述
从图中可知网络整体上可以划分为3个部分:S(semantic etiolation)/D(detail prediction)/F(semantic-detail fusion)。

2.2 Semantic Estimation

这部分是由主干网络MobileNet-v2和解码器组成,输出的stride=16。这里需要注意的是主干网络和解码器需要在人像分割数据集上进行预训练,从而能够得到完善的语义信息。此外,文章还指出对于目标语义表达中某些channel是更加重要的,为了更加突出这些信息文章使用了channel-wise的attention操作(SE block)。因而这部分网络模块的输出描述为:
s p = S ( I ) s_p=S(I) sp=S(I)
由于这里监督目标是从alpha标注 α g \alpha_g αg经过 G ( α g ) G(\alpha_g) G(αg)操作(通过16x的下采样,之后经过高斯滤波)得到的,因而产生的回归目标是平滑的,因而这里语义提取的输出会经过sigmoid进行激活。因而这里的损失函数描述为:
L s = 1 2 ∣ ∣ s p − G ( α g ) ∣ ∣ 2 L_s=\frac{1}{2}||s_p-G(\alpha_g)||_2 Ls=21spG(αg)2
对于上文提到人像分割数据上预训练与channel-wise的attention对性能的影响见小表所示(还有semantic与detail分支带来的影响):
【表2】

2.3 Detail Prediction

这部分是用于去着力预测alpha图中的半透明区域,它抽取semantic分支中stride=2/4/8的特征和原始图像(会下采样之后融合)作为输入,之后经过网络D(由12个卷机组成,最大的channel数目为64),得到半透明区域的预测结果,因而这部分网络的输出描述为:
d p = D ( I , S ( I ) ) d_p=D(I,S(I)) dp=D(I,S(I))
这里使用L1损失函数进行监督,其具体表达式为:
L d = m d ∣ ∣ d p − α g ∣ ∣ 1 L_d=m_d||d_p-\alpha_g||_1 Ld=mddpαg1
其中, m d m_d md是半透明区域的掩膜,在文章提到其是在标注alpha中提取出半透明区域,之后经过形态学腐蚀和膨胀操作得到的。其中 m d = 1 m_d=1 md=1代表半透明区域,使用到的形态学操作kernel大小在GitHub的issue中提到为5~10。

2.4 Semantic-Detail Fusion

这里将 S ( I ) S(I) S(I)的输出(stride=16)上采样与 D ( I , S ( I ) ) D(I,S(I)) D(I,S(I))的输出进行concat,从而去预测最后整图的alpha预测 α p \alpha_p αp。这里使用的损失函数为:
L α = ∣ ∣ α p − α g ∣ ∣ 1 + L c L_{\alpha}=||\alpha_p-\alpha_g||_1+L_c Lα=αpαg1+Lc
其中, L c L_c Lc是组合损失函数。则整体网络的损失函数为:
L = λ s L s + λ d L d + λ α L α L=\lambda_sL_s+\lambda_dL_d+\lambda_{\alpha}L_{\alpha} L=λsLs+λdLd+λαLα
其中,损失之间的平衡系数为: λ s = λ α = 1 , λ d = 10 \lambda_s=\lambda_{\alpha}=1,\lambda_d=10 λs=λα=1,λd=10

3. 真实场景下的数据适应策略

往往处于下面的原因导致训练的数据分布与真实使用时的数据分布存在偏差,进而影响到实际matting的性能。

  • 1)训练的时候前景是与背景进行随机匹配的,这就便会造成合成图像的不自然;
  • 2)参与训练的前景数据往往在受控制的环境下拍摄得到的(如摄影棚)但是真实的场景下有任意可能情况(光照/阴影/天气)的影响;

对此,文章首先提出了一种自监督的策略SOC,并对视频场景下的matting提供了一种补救策略。

3.1 SOC策略

在真实图片的matting结果中上面说到的 s p , d p , α p s_p,d_p,\alpha_p sp,dp,αp可能是存在不一致的结果的,但是由于 s p s_p sp部分的网络是经过语义分割数据前期训练过的,因而产生的结果也相对更加准确,进而文章根据自监督方法将这几个部分进行关联,从而通过自监督的方式增强matting的稳定性。对于未标注过的图片 I ˉ \bar{I} Iˉ,输入模型之后得到三个预测结果:
s p ˉ , d p ˉ , α p ˉ = M ( I ˉ ) \bar{s_p},\bar{d_p},\bar{\alpha_p}=M(\bar{I}) spˉ,dpˉ,αpˉ=M(Iˉ)
而对于监督的部分是将matting的结果 α p ˉ \bar{\alpha_p} αpˉ分别与语义的预测结果 s p ˉ \bar{s_p} spˉ,detail的预测结果 d p ˉ \bar{d_p} dpˉ进行匹配(相信它们拥有更高的置信度),因而一致性监督的损失函数描述为:
L c o n s = 1 2 ∣ ∣ G ( α p ˉ ) − s p ˉ ∣ ∣ 2 + m d ˉ ∣ ∣ α p ˉ − d p ˉ ∣ ∣ 1 L_{cons}=\frac{1}{2}||G(\bar{\alpha_p})-\bar{s_p}||_2+\bar{m_d}||\bar{\alpha_p}-\bar{d_p}||_1 Lcons=21G(αpˉ)spˉ2+mdˉαpˉdpˉ1
其中, m d ˉ \bar{m_d} mdˉ是根据 α p ˉ \bar{\alpha_p} αpˉ确定的半透明区域mask。

文章的方法创建了两个matting网络 M , M ‘ M,M^{‘} M,M,其中 M ‘ M^{‘} M是固定的,对于半透明区域的监督形式为:
L d d = m d ˉ ∣ ∣ d p ‘ ˉ − d p ˉ ∣ ∣ 1 L_{dd}=\bar{m_d}||\bar{d_p^{‘}}-\bar{d_p}||_1 Ldd=mdˉdpˉdpˉ1
在一个epoch结束之后会将 M ‘ = M M^{‘}=M M=M,从而实现更新。这里需要注意的是其训练的超参数与之前的不同,需要读者在论文中寻找详细的超参数设置(在5.3节)

PS: 注意这里的SOC起作用的前提是semantic分支的结果是正确的(这是前提),要是semantic分支的结果都是烂的,那么就很难抢救了。。。(issue29-Q2

3.2 OFD策略

这部分主要是为了提升视频matting结果的稳定性,防止在某一帧上出现异常的预测结果,令当前帧与前后帧为 α t − 1 , α r , α t + 1 \alpha_{t-1},\alpha_r,\alpha_{t+1} αt1,αr,αt+1,则像素在位置 i i i处满足下列条件(C)的时候会触发一致性约束:

  • 1) ∣ α t − 1 i − α t + 1 i ∣ ≤ ξ |\alpha_{t-1}^i-\alpha_{t+1}^i|\le \xi αt1iαt+1iξ
  • 2) ∣ α t i − α t − 1 i ∣ > ξ |\alpha_t^i-\alpha_{t-1}^i|\gt\xi αtiαt1i>ξ ∣ α t i − α t + 1 i ∣ > ξ |\alpha_t^i-\alpha_{t+1}^i|\gt\xi αtiαt+1i>ξ

其中, ξ = 0.1 \xi=0.1 ξ=0.1。而满足上述条件的像素点经过一致性约束准则进行修正:
α t i = { ( α t − 1 i + α t + 1 i ) / 2 , if C α t i , otherwise \alpha_t^i = \begin{cases} (\alpha_{t-1}^i+\alpha_{t+1}^i)/2, & \text{if C} \\ \alpha_t^i, & \text{otherwise} \end{cases} αti={ (αt1i+αt+1i)/2,αti,if Cotherwise
也就是下图中的这样:
在这里插入图片描述

4. 实验结果

之前的一些方法在文章数据集上的性能表现:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m_buddy/article/details/114107591