【本期推荐专题】从三大主流前端技术出发,看看它们各自特性,以及如何从业务特性出发,选择合适的框架。

摘要:我们基于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:不用摘口罩也知道你是谁的更多相关文章

  1. split-brain 脑裂问题(Keepalived)

    脑裂(split-brain)指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏.对于无状 ...

  2. 动态追踪技术 Dynamic Tracing

    https://openresty.org/posts/dynamic-tracing/ 工欲性能调优,必先利其器(2)- 火焰图| PingCAP https://pingcap.com/blog- ...

  3. 《VR入门系列教程》之19---GearVR开发初识

    本章我们来介绍一下如何在移动VR设备的佼佼者GearVR上进行开发,之前我们在桌面端的VR开发想法可以直接应用在移动端,但是仍然会有些不一样的技术需要注意.这次,我们仍然采用Unity3D引擎构建示例 ...

  4. LRU算法实现,HashMap与LinkedHashMap源码的部分总结

    关于HashMap与LinkedHashMap源码的一些总结 JDK1.8之后的HashMap底层结构中,在数组(Node<K,V> table)长度大于64的时候且链表(依然是Node) ...

  5. 外包公司中的"炼狱",极度摧残,避免踩坑。

    引言 前些天羊了,一直没有更新.今天给大家聊聊两家外包公司,遇到的小伙伴避免踩坑. 咱不说那些虚的,什么尽量不要去外包公司,尽可能找甲方,这些谁都知道,肯定是因为一些原因(比如学历.项目经验.技术有待 ...

  6. opencv提取截获图像(总结摘来)

    opencv提取截获图像(总结摘来) http://blog.csdn.net/wuxiaoyao12/article/details/7305865 版权声明:本文为博主原创文章,未经博主允许不得转 ...

  7. 日均百万 PV 的站点如何做性能监测?试试「3M口罩」!

    对很多开发者而言,如果网站的日流量达到百万级别,峰值 PV 也突破了 3 万,这样的站点在线下测试的时候总是让人心力交瘁.... 生产环境下的性能监测问题更是尤其让人头疼! 开发同学在想,运维人员也在 ...

  8. Delphi 中DataSnap技术网摘

    Delphi2010中DataSnap技术网摘 一.为DataSnap系统服务程序添加描述 这几天一直在研究Delphi 2010的DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7 ...

  9. [摘]HttpContext, HttpRequest, HttpResponse, HttpRuntime, HttpServerUtility

    [摘]http://www.cnblogs.com/fish-li/archive/2011/08/21/2148640.html HttpRuntime HttpRuntime公开了一个静态方法 U ...

  10. 使用SVG中的Symbol元素制作Icon【摘转】

    以下为内容摘抄和转摘记录: 为什么要用svg ? SVG优势 随着高清屏幕的普及,相比使用png等位图而言,使用SVG等矢量图形是一种全新的设计方式.更重要的是相比位图而言,SVG有着无可比拟的优势. ...

随机推荐

  1. 从基础到实践,回顾Elasticsearch 向量检索发展史

    本文分享自华为云社区<Elasticsearch向量检索的演进与变革:从基础到应用>,作者: 汀丶. 1.引言 向量检索已经成为现代搜索和推荐系统的核心组件. 通过将复杂的对象(例如文本. ...

  2. Web Woeker和Shared Worker的使用以及案例

    目录 1.前言 2.介绍 Web Worker 3.使用须知及兼容性 3.1.使用须知 3.2.兼容性 4.使用 Web Worker 4.1.创建 Web Worker 4.2.与主线程通信 4.3 ...

  3. C++11 列表初始化都做了什么?

    类的成员变量的初始化细节 首先,来看两个问题: 类的构造函数中,成员变量的列表初始化是如何实现的? 为什么列表初始化效率上优于在构造函数中为成员变量赋值? (后文中,将 "在构造函数中为成员 ...

  4. 在Map或者Collection的时候,不要用它们的API直接修改集合的内容(否则会出现 java.util.ConcurrentModificationException 异常)

    http://www.iteye.com/topic/124788 http://www.blogjava.net/EvanLiu/archive/2008/08/31/224453.html

  5. 【pwn】[SWPUCTF 2021 新生赛]nc签到 --shell过滤字符

    附件下载打开: import os art = '''    ((  "####@@!!$$    ))       `#####@@!$$`  ))    ((  '####@!!$:  ...

  6. 本地训练,开箱可用,Bert-VITS2 V2.0.2版本本地基于现有数据集训练(原神刻晴)

    按照固有思维方式,深度学习的训练环节应该在云端,毕竟本地硬件条件有限.但事实上,在语音识别和自然语言处理层面,即使相对较少的数据量也可以训练出高性能的模型,对于预算有限的同学们来说,也没必要花冤枉钱上 ...

  7. python进程状态

    思考 为啥我VS编辑器里一直在import中报错,但是写到笔记本里就可以直接用 之前俄罗斯方块也是同样问题 安装 pip install transitions 代码 from transitions ...

  8. CTA策略介绍

    CTA策略更多的时候是一种投资方法,更准确的说,主要投资于衍生品的.比较系统化规则化的投资方法都可以称作CTA投资,它并不拘泥于量化或是主动,其具有相当的生命力,会长期存在. CTA策略的收入来源是多 ...

  9. 什么是cursor?怎么使用cursor?

    Cursor 在Android查询数据时就是通过Cursor类来实现的.当我们使用SQLiteDatabase.query()方法时,就会得到Cursor对象,Cursor所指向的就是每一条数据. 举 ...

  10. 黑客玩具入门——9、Burp Suite

    Burp Suite是一款集成化的渗透测试工具,包含了很多功能,可以帮助我们快速完成对web应用程序的渗透测试和攻击.Burp Suite是由Java语言编写,因为Java是可以跨平台的,所以Burp ...