参考代码: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=21∣∣sp−G(αg)∣∣2
对于上文提到人像分割数据上预训练与channel-wise的attention对性能的影响见小表所示(还有semantic与detail分支带来的影响):
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=md∣∣dp−αg∣∣1
其中, m d m_d md是半透明区域的掩膜,在文章提到其是在标注alpha中提取出半透明区域,之后经过形态学腐蚀和膨胀操作得到的。其中 m d = 1 m_d=1 md=1代表半透明区域,使用到的形态学操作kernel大小在GitHub的issue中提到为5~10。
2.4 Semantic-Detail Fusion
这里将