目录
1.Trimap和Strokes
2. 相关数据集
3.论文算法调研
3.1 Deep Image Matting
3.2 Semantic Image Matting
3.3 Background Matting
3.4 Background Matting V2
3.5 Semantic Human Matting
3.6 HAttMatting
3.7 MMNet:Towards Real-Time Automatic Portrait Matting on Mobile Devices
3.8 Fast Deep Matting for Portrait Animation on Mobile Phone
3.9 MODNet: Trimap-Free Portrait Matting in Real Time
1.Trimap和Strokes
Trimap和Strokes都是一种静态图像抠图算法,现有静态图像抠图算法均需对给定图像添加手工标记以增加抠图问题的额外约束。
- Trimap,三元图,是对给定图像的一种粗略划分,即将给定图像划分为前景、背景和待求未知区域
- Strokes则采用涂鸦的方式在图像上随意标记前景和背景区域,剩余未标记部分则为待求的未知区域
Trimap是最常用的先验知识,多数抠图算法采用了Trimap作为先验知识,顾名思义Trimap是一个三元图,每个像素取值为{0,128,255}其中之一,分别代表前景、未知与背景,如图
2. 相关数据集
- Adobe Composition-1K
- matting_human_datasets : https://github.com/aisegmentcn/matting_human_datasets
- VideoMatte240K
- PhotoMatte85
- RealWorldPortrait-636
- https://github.com/thuyngch/Human-Segmentation-PyTorch
- Automatic Portrait Segmentation for Image Stylization: 1800 images
- Supervisely Person: 5711 images
3.论文算法调研
3.1 Deep Image Matting
Paper:https://arxiv.org/pdf/1703.03872.pdf
GitHub: https://github.com/Joker316701882/Deep-Image-Matting
Adobe在17年提出了Deep Image Matting,这是首个端到端预测alpha的算法;整个模型分Matting encoder-decoder stage与Matting refinement stage两个部分,Matting encoder-decoder stage是第一部分,根据输入图像与对应的Trimap,得到较为粗略的alpha matte。Matting refinement stage是一个小的卷积网络,用来提升alpha matte的精度与边缘表现。
说明:网络输入是一个patch图像(经过crop)和相应的 trimap, 通过concat, 共4通道输入网络,推理时也要提供trimap图,现实中不太方便
3.2 Semantic Image Matting
Paper: https://arxiv.org/abs/2104.08201
Github: https://github.com/nowsyn/SIM
与Deep Image Matting类似,需要加入trimap进行抠图
3.3 Background Matting
Paper:https://arxiv.org/abs/2004.00626
GitHub: https://github.com/senguptaumd/Background-Matting
这篇文章要介绍的是一篇基于深度学习的无交互的抠图方法。它的特点是不需要Trimap图,但要求用户手动提供一张无前景的纯背景图,如图1所示,这个方法往往比绘制三元图更为简单,尤其是在视频抠图方向 。这个要求虽然不适用于所有场景,但在很多场景中纯背景图还是很容易获得的。
说明: 不需要Trimap图,但需要提供一张无前景的纯背景图
3.4 Background Matting V2
Paper: https://arxiv.org/abs/2012.07810
GitHub: https://github.com/PeterL1n/BackgroundMattingV2
Background Matting得到了不错的效果,但该项目无法实时运行,也无法很好的处理高分辨率输入。所以项目团队又推出了Background Matting V2,该项目可以以30fps的速度在4k输入上得到不错的结果。
说明: 与Background Matting类似,V2不需要Trimap图,但需要提供一张无前景的纯背景图
3.5 Semantic Human Matting
Paper: https://arxiv.org/pdf/1809.01354.pdf
GitHUb: https://github.com/lizhengwei1992/Semantic_Human_Matting
阿里巴巴提出的Semantic Human Matting:
- 首次实现无需Trimap方式生成alpha图
- 提出了新的fusion的策略,用概率估计alpha matte
- 构造了新的数据集
将网络分成两个部分。
- TNet: 对前景、背景、未知区域做像素级别的分类(相当于预测Trimap了)。
- MNet: 将TNet的输出当做输入,生成更加精细的alpha matte。
- 两个网络的输出经过Fusion Module生成最终的结果
T-Net对像素三分类得到Trimap,与图像concat得到六通道输入送入M-Net,M-Net通过encoder-decoder得到较为粗糙的alpha matte,最后将T-Net与M-Net的输出送入融合模块Fusion Module,最终得到更精确的alpha matte。
3.6 HAttMatting
Paper: https://wukaoliu.github.io/HAttMatting/
GitHub:https://github.com/wukaoliu/CVPR2020-HAttMatting (仅有效果图,连测试模型都没有,存在很大的质疑)
Attention-Guided Hierarchical Structure Aggregation for Image Matting
这也是一篇不需要提供trimap或者其他交互的抠图方法(可认为是自动化抠图),核心思想是抑制高级特征中的冗余语义,并消除空间线索中无用的背景细节,然后对其进行聚合以预测准确的alpha 通道。
为此,该文使用通道注意力(channel-wise attention)模型来蒸馏金字塔特征,并对空间线索使用空间注意力(spatial attention ),以同时消除前景以外的图像纹理细节。
说明:该文声称可以无trimap或者其他交互辅助的条件下,进行完全自动化抠图!! 实质上,存在很多矛盾,就比如上去,上述效果图,模型怎么知道要抠图是那个球球,而不是那条马呢?
更多质疑:[质疑][CVPR2020]只有强者才能“抠”脚 - 知乎
3.7 MMNet:Towards Real-Time Automatic Portrait Matting on Mobile Devices
Paper: https://arxiv.org/abs/1904.03816
Github: https://github.com/hyperconnect/MMNet
Mobile Matting Network (MMNet)采用了标准的编码-解码框架。其中,编码器通过多次下采样,逐步减小输入特征的尺寸,在捕获更高级语义信息的同时,也在丢失空间/位置信息。另一方面,解码器对特征图进行上采样,逐步恢复空间/位置信息,同时使其放大为原先的输入分辨率。另外,作者将来自跳连接的信息与上采样信息相串联,还采用了增强块来改善解码效果。如此,输出的alpha抠图就能与原始图像的尺寸保持一致了。MMNet的具体结构图1所示。
说明:17年的Paper,无需Trimap,在移动设备上实现了实时自动抠图功能,网络的体积较小, 效果有待验证
3.8 Fast Deep Matting for Portrait Animation on Mobile Phone
Paper: https://arxiv.org/abs/1707.08289
GitHub: https://github.com/huochaitiantang/pytorch-fast-matting-portrait
网络由两个阶段组成。
第一阶段是人像分割网络,它以一幅图像为输入,获得一个粗二进制mask。第二阶段是feathering模块(羽化模块),将前景/背景mask细化为最终的alpha matte。第一阶段用轻全卷积网络快速提供粗二进制mask,第二阶段用单个滤波器细化粗二进制mask,大大降低了误差。
说明:无需Trimap,输入RGB图像,输出是matte, 效果有待验证
3.9 MODNet: Trimap-Free Portrait Matting in Real Time
Paper: https://arxiv.org/pdf/2011.11961.pdf
Github: https://github.com/ZHKKKe/MODNet
在线体验:Portrait Matting
MODNet模型学习分为三个部分,分别为:语义部分(S),细节部分(D)和融合部分(F)。
- 在语义估计中,对high-level的特征结果进行监督学习,标签使用的是下采样及高斯模糊后的GT,损失函数用的L2-Loss,用L2loss应该可以学到更soft的语义特征;
- 在细节预测中,结合了输入图像的信息和语义部分的输出特征,通过encoder-decoder对人像边缘进行单独地约束学习,用的是交叉熵损失函数。为了减小计算量,encoder-decoder结构较为shallow,同时处理的是原图下采样后的尺度。
- 在融合部分,把语义输出和细节输出结果拼起来后得到最终的alpha结果,这部分约束用的是L1损失函数。
个人觉得结构设计上较为清晰,监督信息与方式利用合理
说明:无需Trimap, MODNet整体Matting效果,相当不错