实时“头发-面部皮肤”分割与人脸肤色分类

  • 2020 年 2 月 11 日
  • 筆記

今天跟大家介绍一篇新出的文章 Real-time Segmentation and Facial Skin Tones Grading ,来自东北大学、北航、微软亚洲研究院、美到家APP的学者提出一种能够实时运行的“头发-面部皮肤”分割算法,并在此基础上构建了一个准确的人脸肤色分类方法。

该文作者信息:

在美妆类增强现实应用中,经常需要对用户“头发-面部皮肤”区域进行分割,而该文作者指出现今大多数分割算法更加关注的是分割精度,所以往往使用繁重的主干网,而巨大的计算量难以满足实际应用的需求。

作者在微软去年提出的高分辨率网络基础上提出融合高分辨率细节信息和低分辨率上下文信息的HLNet,取得了较好的精度-速度的平衡。在输入图像224×224大小的时候,可以在CPU上运行到16 fps。

算法处理结果:

上图是一个使用分割后的图像进行头发色彩渲染的例子,(a)为输入图像,(b)为该文发明的算法分割的结果再经过引导滤波得到的头发区域,(c)为头发色彩渲染的结果。可见,该文提出的算法较好的提取了头发区域,渲染的结果很真实,几乎没有瑕疵。

网络架构

该文在高分辨率网络HRNet技术上提出了本文的分割算法。

网络前三层,作者使用Fast-SCNN结合标准卷积和深度可分离卷积降低模型复杂度。

中间方框区域称为高、低分辨率特征信息交互模块(InteractionModule),融合高分辨率特征的细节信息和低分辨率特征丰富的上下文信息。作者不仅使用了标准卷积还使用了MobileNetV2中提出的逆残差模块,如下图:

随后作者使用 FFM Attention ,使模型聚焦于那些信息丰富的特征通道,而抑制那些不重要的通道。

最后的解码器部分是在28×28大小特征图上直接bilinear上采样,后接softmax分类层。

HLNet网络结构参数:

对于得到的分割结果,使用引导滤波进行后处理,以在保持边缘的同时抑制噪声。

人脸肤色分类

该文按照亚洲人审美的习惯,将人脸皮肤划分为瓷白,象牙白,中度,淡黄色和黑色 5 种肤色。如下图:

在肤色分类时,作者是在HLNet分割结果基础上提取人脸皮肤区域,然后提取颜色矩特征(color moment features)结合传统机器学习方法随机森林(Random Forest Classifier)进行分类。

面部区域提取方法:

值得一提的是,作者发现:在颜色分类方面,使用低级的颜色特征+传统机器学习方法比使用深度学习方法更好。

实验结果

作者在有分割标注的三个人脸数据集上进行了实验。

下表展示了三个数据集上不同算法和不同度量标准的结果,可见HLNet大部分情况下都取得了不错的结果,甚至在Figaro1K数据集上比VGG的结果还要好。

而HLNet在CPU上仅需要63ms/图,在GPU上仅需要4.7+0.2ms /图,VGG在GPU上则需要64ms/图。

为了验证作者提出的算法的通用分割能力,作者又在CamVid交通场景分割数据集进行了评估,相比于轻量级分割算法,HLNet的速度更快。如下图:

肤色分类结果,使用不同的色彩空间和颜色特征:

可见颜色矩结合YCrCb色彩空间取得了更高的分类精度。

下图为论文展示的分割和头发色彩渲染的结果:

这是一篇非常具有工程参考价值的论文,尤其在美妆产品推荐、小视频直播等应用场景中。

作者已将代码开源,欢迎大家参考。

论文地址:

https://arxiv.org/abs/1912.12888

代码地址:

https://github.com/JACKYLUO1991/Face-skin-hair-segmentaiton-and-skin-color-evaluation