MindSpore:不用摘口罩也知道你是谁
【本期推荐专题】从三大主流前端技术出发,看看它们各自特性,以及如何从业务特性出发,选择合适的框架。
摘要:我们基于 MindSpore 设计了一种人脸识别算法,以解决口罩遮挡场景下的人脸识别问题。该算法的开源代码已经在 MindSpore 上首发了。
本文分享自华为云社区《不用摘口罩也知道你是谁,MindSpore训练口罩人脸识别模型》,原文作者:chengxiaoli。
人脸识别的目标是确定人脸图像的身份。随着智慧城市的建设,人脸识别的应用场景越来越多样,比如嫌疑人追踪、定位走失的老人儿童等。随着新型冠状病毒在全球范围内的爆发,为了公共卫生安全,越来越多的人在公共场所佩戴口罩以降低感染传染性疾病的风险。
传统的人脸分析方法主要提取整张脸部的全局特征进行分析,口罩遮挡场景下,面部的部分重要部位(比如下颌等)被口罩覆盖住,提取整张脸的全局特征将会引入大量噪声。因此,口罩遮挡场景下的人脸分析任务亟需新的解决方案。我们基于 MindSpore 设计了一种人脸识别算法,以解决口罩遮挡场景下的人脸识别问题。该算法的开源代码已经在 MindSpore 上首发了。
论文:
Feifei Ding, Peixi Peng, Yangru Huang, Mengyue Geng andYonghong Tian. Masked Face Recognition with Latent Part Detection. ACMMultimedia 2020.
https://dl.acm.org/doi/pdf/10.1145/3394171.3413731
开源地址:
https://gitee.com/mindspore/mindspore/tree/master/model_zoo/research/cv/MaskedFaceRecognition
算法框架
目前还没有针对口罩人脸的大规模的训练数据集,为解决训练数据不足的问题,我们基于已有的公开人脸数据集生成口罩人脸数据作为训练数据。流程如下:
(1)采用已有的人脸关键点检测算法(比如 Dlib)检测出无遮挡人脸图片上的多个关键点位置;
(2)标注出口罩佩戴区域(鼻尖以下区域)的关键点位置;
(3)在口罩示例图片(比如 N95 口罩)上手动标注关键点,并和人脸口罩佩戴区域的关键点一一对应;
(4)根据口罩示例图片的关键点位置,对其做三角剖分,将口罩示例图片划分为多个小三角形;
(5)根据口罩示例图片和人脸图片的关键点对应关系,将口罩示例图片上的每个小三角形区域仿射变换到人脸图片上,并进行平滑操作,生成口罩人脸图片。
我们在人脸公开数据集 WebFace 上生成了 8 种不同风格的口罩人脸,将其与原始未佩戴口罩的人脸图片混合,作为训练数据。
算法框架如图所示,考虑到口罩人脸中的许多重要信息被口罩遮挡,我们提出了基于潜在区域检测的二分支网络模型以提取更具判别力的特征。其中,局部分支对潜在区域提取局部特征,全局分支对原图提取全局特征。
我们将潜在区域定义为未被口罩遮挡的人脸区域,用
表示,其中
为待学习的参数。受空间转换网络(STN)的启发,我们对
区域内的特征进行有限制的仿射变换,使其转变为原图大小,公式如下:
其中,目标框定义为
H 和 W 分别为原图的长和宽。通过该公式可以得到
可以通过 STN 的仿射变换矩阵的参数
转化得到,由此可以检测出潜在区域。根据潜在区域和原图坐标的对应关系,采用双线性插值将其扩充为和原图一样的大小。
网络模型为二分支网络,一分支对潜在区域提取局部特征,另一分支对原图提取全局特征,两分支共享网络参数。各分支采用分类损失函数进行优化,对于局部分支,额外引入 LPD 损失函数:
其中,
为鼻尖关键点的纵坐标。引入该损失函数的目的是规范网络对潜在区域的定位,使其尽可能在人脸鼻尖以上的区域,因为根据先验知识,口罩往往会遮挡鼻尖以下的脸部区域。在测试阶段,将全局特征与局部特征结合作为最终的特征表达。
实验结果
我们搜集了实际的口罩人脸数据集 PKU-Masked-Face Dataset 作为测试集,该测试集共有 10301 张属于 1018 个不同身份的人脸图片。大多数身份有至少 5 张佩戴口罩和 5 张不佩戴口罩的共计 5 个视角的人脸图片,5 个视角分别为:正面、左面、右面、俯视、仰视。口罩人脸图片作为查询图像库,正常人脸图片作为待匹配图像库。
测试集链接:
https://pkuml.org/resources/pku-masked-face-dataset.html
基于 MindSpore 实现的算法模型实验结果如下表所示,其中 Baseline 为采用 WebFace 原始数据训练的 ResNet50 基准模型,MG 是采用 WebFace 增强数据训练的 ResNet50 模型,LPD 为我们提出的潜在区域检测模型。
MindSpore 代码实现
二分支网络结构代码:
其中 global_out 和 partial_out 分别对应对原图提取的全局特征和潜在区域提取的局部特征,两部分共用特征提取主干层。
潜在区域检测 LPD 模块的具体实现:
其中输入为原始图片,输出为未被遮挡人脸区域边界坐标。
相关训练与推理代码:
https://gitee.com/mindspore/mindspore/tree/master/model_zoo/research/cv/MaskedFaceRecognition
该代码基于 MindSpore 框架实现,运行的硬件环境为 Ascend910。算法解决了口罩遮挡场景下的人脸识别问题,对基准模型性能提升明显,实验结果如上表达到业界领先水平。
版权声明: 本文为 InfoQ 作者【华为云开发者社区】的原创文章。
原文链接:【http://xie.infoq.cn/article/a4e76444a4c492650ddaff1e5】。文章转载请联系作者。
评论