MindSpore:不用摘口罩也知道你是谁
【本期推荐专题】从三大主流前端技术出发,看看它们各自特性,以及如何从业务特性出发,选择合适的框架。

摘要:我们基于MindSpore设计了一种人脸识别算法,以解决口罩遮挡场景下的人脸识别问题。该算法的开源代码已经在MindSpore上首发了。
本文分享自华为云社区《不用摘口罩也知道你是谁,MindSpore训练口罩人脸识别模型》,原文作者:chengxiaoli。
人脸识别的目标是确定人脸图像的身份。随着智慧城市的建设,人脸识别的应用场景越来越多样,比如嫌疑人追踪、定位走失的老人儿童等。随着新型冠状病毒在全球范围内的爆发,为了公共卫生安全,越来越多的人在公共场所佩戴口罩以降低感染传染性疾病的风险。
传统的人脸分析方法主要提取整张脸部的全局特征进行分析,口罩遮挡场景下,面部的部分重要部位(比如下颌等)被口罩覆盖住,提取整张脸的全局特征将会引入大量噪声。因此,口罩遮挡场景下的人脸分析任务亟需新的解决方案。我们基于MindSpore设计了一种人脸识别算法,以解决口罩遮挡场景下的人脸识别问题。该算法的开源代码已经在MindSpore上首发了。
- 论文:
Feifei Ding, Peixi Peng, Yangru Huang, Mengyue Geng and Yonghong Tian. Masked Face Recognition with Latent Part Detection. ACM Multimedia 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。算法解决了口罩遮挡场景下的人脸识别问题,对基准模型性能提升明显,实验结果如上表达到业界领先水平。
MindSpore:不用摘口罩也知道你是谁的更多相关文章
- split-brain 脑裂问题(Keepalived)
脑裂(split-brain)指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏.对于无状 ...
- 动态追踪技术 Dynamic Tracing
https://openresty.org/posts/dynamic-tracing/ 工欲性能调优,必先利其器(2)- 火焰图| PingCAP https://pingcap.com/blog- ...
- 《VR入门系列教程》之19---GearVR开发初识
本章我们来介绍一下如何在移动VR设备的佼佼者GearVR上进行开发,之前我们在桌面端的VR开发想法可以直接应用在移动端,但是仍然会有些不一样的技术需要注意.这次,我们仍然采用Unity3D引擎构建示例 ...
- LRU算法实现,HashMap与LinkedHashMap源码的部分总结
关于HashMap与LinkedHashMap源码的一些总结 JDK1.8之后的HashMap底层结构中,在数组(Node<K,V> table)长度大于64的时候且链表(依然是Node) ...
- 外包公司中的"炼狱",极度摧残,避免踩坑。
引言 前些天羊了,一直没有更新.今天给大家聊聊两家外包公司,遇到的小伙伴避免踩坑. 咱不说那些虚的,什么尽量不要去外包公司,尽可能找甲方,这些谁都知道,肯定是因为一些原因(比如学历.项目经验.技术有待 ...
- opencv提取截获图像(总结摘来)
opencv提取截获图像(总结摘来) http://blog.csdn.net/wuxiaoyao12/article/details/7305865 版权声明:本文为博主原创文章,未经博主允许不得转 ...
- 日均百万 PV 的站点如何做性能监测?试试「3M口罩」!
对很多开发者而言,如果网站的日流量达到百万级别,峰值 PV 也突破了 3 万,这样的站点在线下测试的时候总是让人心力交瘁.... 生产环境下的性能监测问题更是尤其让人头疼! 开发同学在想,运维人员也在 ...
- Delphi 中DataSnap技术网摘
Delphi2010中DataSnap技术网摘 一.为DataSnap系统服务程序添加描述 这几天一直在研究Delphi 2010的DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7 ...
- [摘]HttpContext, HttpRequest, HttpResponse, HttpRuntime, HttpServerUtility
[摘]http://www.cnblogs.com/fish-li/archive/2011/08/21/2148640.html HttpRuntime HttpRuntime公开了一个静态方法 U ...
- 使用SVG中的Symbol元素制作Icon【摘转】
以下为内容摘抄和转摘记录: 为什么要用svg ? SVG优势 随着高清屏幕的普及,相比使用png等位图而言,使用SVG等矢量图形是一种全新的设计方式.更重要的是相比位图而言,SVG有着无可比拟的优势. ...
随机推荐
- OpenResty入门之压测篇:压测工具界的 “悍马” wrk 审核中
在上篇文章 每个后端都应该了解的 OpenResty 入门以及网关安全实战 中,我向大家介绍了 OpenResty 的入门使用是 WAF 防御实战,这篇文章将给大家继续介绍 OpenResty 入门之 ...
- hammer.js学习
demo:https://github.com/fei1314/HammerJs/tree/master 知识点: hammer--手势识别:点击.长按.滑动.拖动.旋转.缩放 方法: tap 快速的 ...
- 聊聊RNN与seq2seq
seq2seq模型也称为Encoder-Decoder模型.顾名思义,这个模型有两个模块--Encoder(编码器)和Decoder(解码器).编码器对输入数据进行编码,解码器对被编码的数据进行解码. ...
- DS必背合集
Data Structure必背合集 一.链表.栈和队列 1.简述说明数据的存储结构: 答: (1)顺序存储:逻辑上相邻的两个元素的物理位置也相邻. 优点:能够随机存取. 缺点:插入删除需要移动大量的 ...
- 带您了解 O2OA 流程中的人工活动处理方式
这次咱们来介绍 O2OA (翱途) 开发平台流程引擎中的人工活动的处理方式和逻辑,O2OA (翱途) 主要采用拖拽可视化开发的方式完成流程的设计和配置,不需要过多的代码编写,业务人员可以直接进行修改操 ...
- 题解 CF1292A
题目大意: 给你 \(2\times n\) 的迷宫,初始时没有任何障碍,给定 \(q\) 次询问,每次询问给予坐标 \((x,y)\),问将坐标 \((x,y)\) 反转状态(即无障碍变有障碍,有障 ...
- LeetCode-Java:88合并两个有序数组
题目: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目. 请你 合并 nums2 到 nums1 中 ...
- docker构建打包java项目
docker构建打包java项目 简介 本项目用于 研究和实践 docker的工作流部署发布 查看github源码 技术栈 spring-web (RESTAPI 请求交互) redis (用于实验 ...
- .NET开源且好用的权限工作流管理系统
前言 系统权限管理.工作流是企业应用开发中很常见的功能,虽说开发起来难度不大,但是假如从零开始开发一个完整的权限管理和工作流平台的话也是比较耗费时间的.今天推荐一款.NET开源且好用的权限工作流管理系 ...
- Unicode编码解码
一.Unicode概述 Unicode是一种字符编码标准,旨在解决不同字符集之间的兼容性问题.它为全球所有语言提供了一种统一的编码方式,使得各种字符能够在计算机系统中正确显示和处理.Unicode字符 ...