9ms 静默活体检测,小视开源工业级品质算法
小视科技团队开源的基于 RGB 图像的活体检测模型,是专门面向工业落地场景,兼容各种复杂场景下的模型。该自研的剪枝轻量级模型,运算量为 0.081G,在麒麟 990 5G 芯片上仅需 9ms。同时基于 PyTorch 训练的模型能够灵活地转化成 ONNX 格式,实现全平台部署。
如今,人脸识别已经进入我们生活中的方方面面:拿起手机扫脸付账、完成考勤、入住酒店等,极大地便利了我们的生活。
我们在享受技术带来方便的同时,也要应对其潜在的风险。一旦虚假人脸攻击成功,极有可能对用户造成重大损失。
如 2019 年,在拉斯维加斯举办的世界黑帽(Black Hat)安全大会上,腾讯公司的研究人员就曾演示用一副特制眼镜攻破苹果 Face ID。
更早之前,也有人曾使用 3D 打印「石膏」人脸攻击手机的人脸识别功能,成功破解多款人脸识别解锁功能。
图片来源:Forbes
为了抵御这种假脸攻击,小视科技团队开源了一个静默活体检测算法和可适用于安卓平台的部署源码,可兼容各种工业级复杂场景的活体检测。
活体检测技术主要是判别镜头前出现的人脸是真实的还是伪造的,其中借助其他媒介呈现的人脸都可以定义为虚假的人脸,包括打印的纸质照片、电子产品的显示屏幕、硅胶面具、立体的 3D 人像等。活体检测技术能够抵御各种假脸的攻击,为人脸识别保驾护航。
目前主流的活体解决方案分为配合式和非配合式活体,配合式活体需要用户根据提示做出相应的动作从而完成判别,而非配合式活体在用户无感的情况下直接进行活体检测,具有更好的用户体验。
非配合式活体根据成像源的不同一般分为红外图像、3D 结构光和 RGB 图像三种技术路线:红外图像滤除了特定波段的光线,天生抵御基于屏幕的假脸攻击;3D 结构光引入了深度信息,能够很容易地辨别纸质照片、屏幕等 2D 媒介的假脸攻击;RGB 图片主要通过屏幕拍摄出现的摩尔纹、纸质照片反光等一些细节信息进行判别。基于以上分析不难发现,基于 RGB 图片的活体检测与其他两种方法相比,仅能通过图像本身的信息进行判别,在实际的开放场景中面临着更大的挑战性。
小视科技团队开源的基于 RGB 图像的活体检测模型,是专门面向工业落地场景,兼容各种复杂场景下的模型。该自研的剪枝轻量级模型,运算量为 0.081G,在麒麟 990 5G 芯片上仅需 9ms。同时基于 PyTorch 训练的模型能够灵活地转化成 ONNX 格式,实现全平台部署。
活体任务的定义
基于 RGB 图像的活体检测是一个分类任务,目标是有效地区分真脸和假脸,但又有别于其他类似于物品分类的任务。其中的关键点在于攻击源分布过于广泛,如图 1 所示:不同的攻击媒介,不同设备的成像质量,不同的输入分辨率都对分类结果有着直接的影响。为了降低这些不确定因素带来的影响,小视科技团队对活体的输入进行了一系列限制:活体的输入限制在特定的分辨率区间;输入图片均为实时流中截取的视频帧。这些操作大大降低了活体模型在实际生产部署上失控的风险,提升了模型的场景鲁棒性。
图 1 现实场景中活体数据分布图
基于成像介质种类的不同,小视科技团队将样本分为真脸、2D 成像(打印照片,电子屏幕)以及 3D 人脸模具三类,根据上述的准则整理和收集训练数据。活体检测的主要流程如图 2 所示。
图 2 开源活体 Pipeline
开源模型技术路线
小视科技团队采用自研的剪枝轻量级网络作为 backbone 训练模型,使用 Softmax + CrossEntropy Loss 作为训练分类的监督。使用不同尺度的图片作为网络的输入训练数据,增加模型间的互补性,从而进行模型融合。考虑到用于真假脸判别的有效信息不一定完全分布在脸部区域,可能在取景画面的任何地方(如边框,摩尔纹等),小视科技团队在 backbone 中加入了 SE(Squeeze-and-Excitation)的注意力模块,动态适应分散的判别线索。同时小视科技团队也通过实验发现真假脸在频域中存在明显的差异,为此引入傅里叶频谱图作为模型训练的辅助监督,有效提升了模型精度。
自研的轻量级剪枝网络
小视科技团队使用自研的模型剪枝方法,将 MoboileFaceNet 的 flops 从 0.224G 降低到了 0.081G,剪枝的网络结构如图 3 所示。模型观测误检率在十万一对应的真脸通过率,在精度没有明显损失的情况下,模型前向运行的速度提升了 40%。
表 1 模型性能对比表
图 3 剪枝模型通道示意图
注意力机制
考虑到用于真假脸判别的有效信息不一定完全分布在脸部区域,也有可能在取景画面的任何地方(如边框,摩尔纹等)。小视科技团队在 backbone 中加入了 SE(Squeeze-and-Excitation)的注意力模块,动态适应分散的判别线索,热力图如图 4 所示。对于假脸,模型更关注于边框信息和屏幕的摩尔纹信息,对于真脸更加关注脸部以及周围的信息。
图 4 活体模型热力图
数据预处理
使用人脸检测器获取图像中的人脸框坐标,按照一定比例 (scale) 对人脸框进行扩边,图 5 展示了部分 patch 的区域,为了保证模型的输入尺寸的一致性,将 patch 区域 resize 到固定尺寸。
图 5 Patch 示例图
傅里叶频谱图
将假脸照片与真脸照片转化生成频域图,对比发现假脸的高频信息分布比较单一,仅沿着水平和垂直方向延伸,而真脸的高频信息从图像的中心向外呈发散状,如图 6 所示。根据以上的实验,小视科技团队发现真脸和假脸的傅里叶频谱存在差异,从而引入了傅里叶频谱对模型训练进行辅助监督。
图 6 傅里叶频谱图
基于傅里叶频谱图的辅助网络监督
基于对于真脸和假脸在频域的观察分析,小视科技团队提出了基于傅里叶频谱图进行辅助网络监督的训练方法,整理架构图如图 7 所示。网络的主分支采用 Softmax+ CrossEntropy 作为网络的监督,如公式(1)所示。其中, f_j表示输出类别的第 j 个置信度, y_i 表示样本的真实标签,N 为训练样本的个数。
小视科技团队采用在线的方式生成傅里叶频谱图,使用 L2 Loss 作为损失函数。输入图片的尺寸为 3x80x80,从主干网络中提取尺寸为 128x10x10 特征图,经过 FTGenerator 分支生成 1x10x10 的预测频谱图 F_P 。通过傅里叶变换,将输入图片转化成频谱图,再进行归一化,最后 resize 成 1x10x10 尺寸得到 F_G ,使用 L2 Loss 计算两特征图之间差异,如公式(2)所示。
为了控制 L_FT在训练过程中对梯度的贡献作用,分别引入了平衡两个损失函数L_Softmax和L_FT,如公式(3)所示,其中。在实验中设置。
图 7 傅里叶频谱辅助监督训练架构图
其他模型策略
使用大体量网络 ResNet34 蒸馏剪枝网络 MiniFASNetV1 和 MiniFASNetV2,精度得到提升。
使用模型融合的机制,针对于不同输入尺度、不同网络结构以及不同迭代次数的模型进行融合,充分挖掘模型间对分类任务的互补性,提升模型精度。
实验结果
测试集建立
小视科技团队基于实际的生产场景建立了 100W 量级的测试集,从移动设备的视频流中实时获取图像。真脸数据包含了强光、暗光、背光、弱光以及阴阳脸等各种复杂场景。基于 2D 的假脸数据使用打印纸、铜版纸、照片纸以及电脑屏幕、平板 Pad 屏幕、手机屏幕,在不同的距离、角度和光线下进行采集。基于 3D 的假脸数据则采用头模、硅胶面具和纸质照片抠洞的人脸面具进行采集。
模型评价指标
小视科技团队采用 ROC 曲线作为模型的观测指标,控制十万一的误检率,保证模型在 97%+ 的通过率。与一般的分类任务不同,团队采用了 ROC 曲线而非分类精度作为度量指标,其原因是:生产落地场景对活体模型的误检控制具有很高的要求。
为了降低活体在应用场景发生误检的概率,小视科技团队控制模型误检率在十万一量级的同时,保证了较高的真脸通过率。团队将活体定义为三分类任务,为了适应 ROC 曲线的评价指标,将真脸以外的类别都定义成假脸,从而解决了使用 ROC 曲线适应多分类的问题。
最终的开源融合模型,包含了两个剪枝网络的单模型,在测试集上的观测指标如表 2 所示。开源模型误检控制在 1e-5 的情况下,真脸通过率能够达到 97.8%。未开源的高精度模型在相同的误检率下,真脸通过率达到 99.5%。
表 2 模型观测指标
速度指标
开源融合模型在不同芯片上速度指标如表 3 所示,在麒麟 990 5G 上仅需要 19ms。
表 3 模型测试速度
安卓端体验 APK DEMO 演示
为了方便开发者更好地体验该项静默活体检测技术,小视科技团队准备了用于测试的安卓端 APK,不仅可以直观地感受该项技术达到的效果,还可以实时观测速度、置信度等相关指标。
静默活体检测算法项目地址:
https://github.com/minivision-ai/Silent-Face-Anti-Spoofing
安卓平台部署源码项目地址:
https://github.com/minivision-ai/Silent-Face-Anti-Spoofing-APK
下载上述所有代码和体验安卓APK,请在我爱计算机视觉公众号后台回复“小视活体”。
线上分享
7月23日20:00-21:00,小视科技副总裁、AI研究院院长胡建国将在52CV技术交流群里线上分享,为大家详解这一工业级静默活体检测算法,期待与广大业内开发者和爱好者共同交流。
识别下方二维码,或添加微信(Gentle-Word),备注“活体检测”,进群一起看直播。
我爱计算机视觉
微信号:aicvml
QQ群:805388940
微博知乎:@我爱计算机视觉
投稿:amos@52cv.net
网站:www.52cv.net
在看,让更多人看到
9ms 静默活体检测,小视开源工业级品质算法相关推荐
- 错过直播不用急,回顾小视科技工业级静默活体检测算法解读,视频已备好
上周发布的『9ms 静默活体检测,小视开源工业级品质算法』得到很多小伙伴的喜欢. 23日晚间,小视科技副总裁.AI研究院院长胡建国在52CV技术交流群里进行了线上分享,为大家详解这一工业级静默活体检测 ...
- c#和java部署pytorch同事识别两个图片_人脸识别漏洞频出?这里有个开源静默活体检测算法,超低运算量、工业级可用...
小视科技团队开源的基于 RGB 图像的活体检测模型,是专门面向工业落地场景,兼容各种复杂场景下的模型.该自研的剪枝轻量级模型,运算量为 0.081G,在麒麟 990 5G 芯片上仅需 9ms.同时基于 ...
- 人脸识别漏洞频出?这里有个开源静默活体检测算法,超低运算量、工业级可用...
来源:机器之心 本文约3259字,建议阅读7分钟. 本文介绍小视科技团队开源的基于 RGB 图像的活体检测模型,是专门面向工业落地场景,兼容各种复杂场景下的模型.该自研的剪枝轻量级模型,运算量为 0. ...
- 工业级静默活体检测开源算法技术解析记录
工业级静默活体检测开源算法技术解析(小视科技分享) 视频链接: https://www.bilibili.com/video/BV1qZ4y1T7CH 相关背景 定义:无感鉴别镜头前人脸的真伪,人脸识 ...
- 活体识别6:小视科技开源的静默活体检测
说明 该项目为小视科技的静默活体检测项目.开源地址在 https://github.com/minivision-ai/Silent-Face-Anti-Spoofing. 由于不是论文衍生项目,所以 ...
- 38、静默活体检测测试及ncnn、mnn部署
基本思想:因为最近需要搞个Android端的活体检测,github了一下,git到小视科技公司的一个开源项目,听了大佬的介绍,因此测试了一下,效果还可以,于是进行了模型转换和ncnn.mnn部署 本实 ...
- 静默活体检测+人脸检测+人脸识别结合在NCNN模型下的推理(Windows下的VS环境)
前言: 涉及到三个模型 静默活体检测模型<2M,人脸检测模型<2M ,人脸识别<5M(模型大小) 至于NCNN不必多说,全C++实现,不依赖第三方库实现,在第三方移动端CPU运 ...
- Android NDK开发——人脸检测与静默活体检测
前言 1.开发环境是win10,IDE是Android studio 北极狐,用到的库有NCNN,OpenCV. 2.NCNN库可以用官方编译好的releases库,也可以按官方文档自己编译. 3.O ...
- 基于深度学习的人脸检测与静默活体检测——C++实现
前言 1.系统环境是win10,显卡RTX3080;cuda10.2,cudnn7.1;OpenCV4.5,ncnn版本是20210525;C++ IDE vs2019. 2.使用NCNN作模型推理加 ...
最新文章
- 基于SharePoint 2013的论坛解决方案[开源]
- 近世代数--群同构--第三同构定理
- Netty时间轮调度原理分析,再不了解你就out啦
- Oracle 11G 安装详解
- 如何创建一个自定义的`ErrorHandlerMiddleware`方法
- WordPress主题制作常用代码集合
- java volatile实例_Java的Volatile实例用法及讲解
- python if else_菜鸟笔记015 Python If ... Else
- mac使用nvm安装node进行多版本管理
- 电容电感充放电时间计算
- 邱锡鹏神经网络怎么样,邱锡鹏神经网络答案
- 基于51单片机机械臂控制系统
- pwm波控制舵机原理(转)
- Unity Spine SkeletonGraphic 动画重复播放 过度残影透明渐变Bug 解决方案
- Win7不显示移动硬盘盘符的解决方法
- 会说话的TOM猫的原理是什么
- 温水煮青蛙,我还能活多久
- 用 Python 爬取电影,这些电影真的很不错
- python和按键精灵自动化测试_按键精灵对APP自动化测试(上)
- Win7服务器没及时响应,Win7无法停止服务提示“服务没有及时响应启动或控制请求”怎么办?...
热门文章
- 机器学习AUC指标的理解
- Yolo 训练 Error in load_data_detection() - OpenCV 解决办法之一
- 混合云平台打破数据壁垒
- 弘辽科技:淘宝超级推荐怎么添加宝贝?效果怎么样?
- 35岁+程序员就该被辞退?或者主动离职,提前退休?就问凭什么,还不学起来等着被裁吗?
- 狂神说Java:Spring
- 猜字小游戏(JAVA)
- 前台页面访问,java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.jsp报错
- CAD 开发寻找最短距离算法
- java保证线程安全的方式有哪些?