PortraitFCN算法详解

论文题目:Automatic Portrait Segmentation for Image Stylization
论文链接:论文链接
代码链接:代码链接

一、人像分割基础知识
1. 人像分割是什么?
简单来讲,所谓的人像分割就是将输入的包含人像的图片中属于人像的像素点分割出来,输入的是一张包含人像的彩色图片;输出是一张二值图片,属于人像的像素点用白色表示,不属于人像的像素点用黑色表示。具体的效果如图1所示:图1中的左图表示的是输入的包含人像的待分割图片,图1中的右图表示的是人像分割算法处理后的效果(二值图)。
PortraitFCN算法详解_第1张图片

2. 人像分割与语义分割的联系和区别?
联系:人像分割和语义分割都属于图像分割这个大领域, 人像分割属于语义分割的一个小分支;人像分割一般都是在语义分割的结果上进行精细分割获得的。
区别:人像分割是在语义分割的基础上面就人像的一些细节信息分割出来,具体包括头发丝等等,如图1所示,人像分割的结果可以明显的观察到人像的头发丝,而普通的语义分割算法是做不到这一点的;

3. 人像分割的应用场景有哪些?PortraitFCN算法详解_第2张图片
图2展示了人像分割算法的一些应用场景。图2a表示的是原始的输入图片;图2b表示的是人像分割算法处理后的结果;图2c表示的是根据人像分割的结果2b从原始图像中获得人像图片后对其进行灰度化处理后的效果;图2d表示的是对原始图像中除人像之外的区域进行模糊后并叠加人像分割图像的结果,即所谓的背景模糊;图2e表示的是对原始图像中的人像更换背景的效果,人像分割在现实场景中具有很多应用,具体包括:背景虚化、人像风格化、更换背景、增加特效等等。

二、PortraitFCN人像分割算法框图详解
PortraitFCN算法详解_第3张图片
图3展示了PortraitFCN人像分割算法的整体框图,以下将围绕这个框图对该算法进行理解,具体的细节请看下一部分的讲解。

PortraitFCN人像分割算法实现步骤:

  1. 输入待分割的人像图像,对其做预处理操作;
  2. 将与除磷后的图像输入到预训练好的人脸检测器中,获得一张所谓的大头照,仅仅包含人体的上半身,即图3b所示;
  3. 根据候选的位置模板计算出一个平均模板和一个归一化的x和y坐标;
  4. 根据平均模板和归一化的坐标对大头照进行人像对齐操作;
  5. 将对齐后的人像大头照输入到PortraitFCN+网络中,需要注意的是输入是一个5通道的变量,包括RGB+Mean Mask+Normalized x and y,PortraitFCN+网络是一个基于FCN的改进网络,使用卷积+反卷积的结构,输出最终的人像分割结果。

三、PortraitFCN人像分割算法细节详解
1. 归一化的X和Y通道是如何获得的?(位置通道)
这个通道的目的是为了对与人脸相关的像素的位置进行编码。即找到算法需要进行优化的区域,因为对于大头照而言,对于人体的其它而言,比如胳膊、手等一般的语义分割算法就能处理的很好,人像分割算法更关注于如何对那些语义分割算法处理不好的细节进行很好的处理,因此找到待优化的区域变得至关重要。
为了获得归一化的X和Y通道,我们需要执行以下的步骤:1. 使用预训练好的人脸检测器检测出图像中的人脸;2. 使用预训练好的人脸关键点检测算法检测出人脸的关键点;3. 根据过滤的特征和候选的位姿计算出一个变换关系T,即通过对检测到的人脸的关键点和标准模板人脸的关键点计算出这个变换关系;4. T(X)和T(Y)则为我们的结果,表示的是该像素距离人脸中心之间的偏差值。

2. 形状通道是如何获得的?
所谓的形状通道指的是Mean Mask通道,该通道可以大致指示出目标所在的区域,可以提供一个较好的初始化,便于获得最优解。
为了获得形状通道,我们需要执行以下的步骤:1. 在整个训练集中计算出一个对齐的平均掩模;2. 对于每一个训练人像掩模对{Pi, Mi},其中Pi表示当前人脸图像的关键点,Mi是通过变换关系T(Pi)得到的,最终的平均掩码M的表达式如下所示:M=∑iwi∘τi(Mi)∑iwiM=\frac{\sum i w_{i} \circ \tau _{i}(M_{i})}{\sum i w_{i}}M=∑iwi​∑iwi​∘τi​(Mi​)​其中wi是一个矩阵,表示的是经过变换后的Mi是否在图像的范围内,如果在图像的范围内为1表示,反之则用0表示。

3. 整个算法的突出点?
仔细观察整个人像分割算法的过程,我们会发现该算法基本上和FCN的思路类似,最大的贡献就是提出了添加位置通道和形状通道到输入图像中,从而构成一个5通道的输入,让网络更加关注于人脸周围的区域,从而获得更好的人像分割效果。

四、PortraitFCN人像分割算法效果展示

PortraitFCN算法详解_第4张图片

图4展示了PortraitFCN人像分割算法在测试图片上面的效果展示,图4中的第1列表示的是原始的输入图片,图4中的第2列表示的是人像分割的GT,图4中的第3列表示的是传统的FCN-8s算法分割后的效果,图4中的第4列表示的是Graph-cut算法的分割效果(传统算法中的state-of-art),图4中的第5列表示的是PortraitFCN算法的分割效果。相比于FCN和Graph-cut算法而言,PortraitFCN能够获得更好的分割效果,该算法分割出来的效果基本上和GT十分接近,而FCN和Graph-cut算法分割后的结果中会出现严重的人像缺失和背景干扰等问题。因此,PortraitFCN算法极大的提升了人像分割算法的性能,也是第一个使用神经网络获得最好的分割效果的算法,因此值得一读。

PortraitFCN算法详解_第5张图片为了证明该算法的有效性,作者将该算法应用在人像抠图中,即利用PortraitFCN算法生成人像二值mask之后,将该mask边界附近的10像素看做unknown区域,用灰色的粗线表示出来,即形成所谓的trimap图片;然后将原始图片和相应的trimap图片一起输入到KNN Matting算法中获得最终的人像抠图结果。图中展示的效果还可以,但是我们可以观察到图5a中左边区域的一些头发丝并没有被抠出来。

PortraitFCN算法详解_第6张图片
图6展示了PortraitFCN算法在不同图片上面的一些具体应用,整体来看,该算法的分割效果还不错,基本达到了可以在现实场景中应用的程度。通过图6大家也许能够理解一些图像处理软件中的魔法了吧,哈哈哈。

五、算法总结
看完了这篇文章的细节,你也许会感慨这篇文章的思路也就那样,很简单,也没有大多的心意,本文最大的创新点在于:首先,提出了位置通道和形状通道,并将其和原始的RGB一起输入到网络中获取特征;然后,本文作者发布了一个比较的人像分割数据集,人像分割任务一直不能取得很大的进步的原因其实也和数据集有关,对于人像分割的数据集需要精细到发丝,因此会耗费大量的人力和物力,这个数据集为后续的人像分割领域也做出了很大的贡献;最后,作者在FCN算法的基础上都能获得这么好的效果,如果使用当前较好的语义分割算法可能能够获得更好的效果,纵观后续的人像分割算法的思路,基本上都是在这篇论文的思路的基础之上进行改进和优化,使用传统的语义分割算法获得基本的分割结果后使用一个浅层的reefine网络来进一步对这个结果进行细化。因此,我认为这是一篇很值得去读的文章,可谓是人像分割的开山之作。

参考文献:
[1] 原始论文

注意事项:
[1] 该博客是本人原创博客,如果您对该博客感兴趣,想要转载该博客,请与我联系(qq邮箱:[email protected]),我会在第一时间回复大家,谢谢大家的关注。
[2] 由于个人能力有限,该博客可能存在很多的问题,希望大家能够提出改进意见。
[3] 如果您在阅读本博客时遇到不理解的地方,希望您可以联系我,我会及时的回复您,和您交流想法和意见,谢谢。

 

你可能感兴趣的:(【HSI图像分割】)