当前位置: 首页 > 编程日记 > 正文

人脸识别模型的动手实践!

作者:宋志龙

来源:Datawhale

人脸识别已经成为生活中越来越常见的技术,其中最关键的问题就是安全,而活体检测技术又是保证人脸识别安全性的一个重要手段,本文将向大家简单介绍活体检测,并动手完成一个活体检测模型的训练,最终实现对摄像头或者视频中的活体进行识别。

我们可以达成的效果

01

人脸识别的技术关键——活体检测

一般提到人脸识别技术,即指人脸比对或人脸匹配,即将待识别的人脸和系统中已经提前录入的人脸信息(如身份证照片)进行特征的比对,而在使用神经网络提取特征进行比对之前,需要首先对识别到的人脸进行活体检测,以确定摄像头前的人是个活人。因此整个人脸识别过程一般为(并非一定要这样):人脸检测 -> 关键点检测 -> 人脸对齐 -> 活体检测 -> 人脸特征提取 -> 人脸比对。

模型简介

本项目使用基于resnet18的二分类模型对RGB图像进行活体、非活体的分类识别, 网络结构如图所示,有关于resnet的知识可自行查阅。

数据集简介

本项目数据集使用中科院大型人脸活体检测数据库CASIA-SURF,这是一个包含大量不同年龄段人的多模态(RGB, Depth,IR)的数据集,其中包含大量真实活体人脸样本,也包含了对应的攻击样本(数据集已上传至开源数据平台Graviti)。

如图所示,图例中的攻击样本是以打印出来的人脸作为攻击样本,或者露出五官中的部分结合打印人脸一起作为攻击样本,当然还有别的攻击样本制作的形式。因此模型训练的目标就是要在遇到这些攻击样本的时候能够正确识别出它不是一个活体。

其中,RGB表示RGB图片,Depth表示深度图,IR表示近红外图。三个模态的数据可以都用来训练,以使模型适应不同图像采集设备的需求。为了简单,本项目仅使用RGB图像训练。

数据集目录结构如图所示:

Training中为训练集图片,Val为验证集图片,train_list.txt为训练集各个样本的路径及标签,val_private_list.txt为验证集各个样本的路径及标签,val_public_list.txt本项目暂时不用

代码简介

项目环境:python 3.7.4 、pytorch 1.4.0、其余的opencv、numpy啥的看缺啥装啥吧。。。

项目代码目录如图所示(代码地址见文末):

其中,alive_detect为自定义的文件夹,里面存放了一些测试视频,人脸检测模型权重等等文件。

loss文件夹内存放了一些损失函数的实现 model文件夹内存放了一些模型的实现

models文件夹是模型训练过程中权重的保存路径 process文件夹内存放了一些关于数据处理相关的代码

metric.py实现了一些指标的计算

utils.py实现了一些训练或测试用到的小功能函数

train_CyclicLR.py是训练代码,执行这个代码即可启动训练

train_Fusion_CyclicLR.py是多模态数据的训练代码。即同时使用上述数据集中的三种模态的数据进行训练

face_recognize.py是使用训练好的模型进行活体检测测试的代码

项目代码中给出了训练好的模型权重示例,models/baseline_color_32/checkpoint/global_min_acer_model.pth。

执行脚本face_recognize.py,即可调用训练好的模型完成活体检测。

02

训练过程示例

以resnet18模型为例,使用数据集中的RGB图片进行训练,输入模型尺寸大小为32。

开始训练:

cd alive_recognize_project#开启训练
#--model baseline , 以resnet18为例,可选其他模型,自行探索
#--image_size 32 , 输入活体检测模型的人脸图像大小为32
#--cycle_num 5,训练5个cycle周期
#--cycle_inter 50, 每个cycle周期内训练50个epoch
#--mode train , 开启训练模型
python train_CyclicLR.py --model baseline --image_mode color --image_size 32 --cycle_num 5 --cycle_inter 50 --mode train 

对cycle_num和cycle_inter参数的说明,本项目学习率衰减策略采用周期性余弦衰减,cycle_num表示周期数,cycle_inter表示一个周期内训练的epoch数,即每经过cycle_inter个epoch,学习率从初始值下降到最低值,如下图所示。

然后就开始训练了,期间会打印出一些训练过程中的loss、acc、acer等信息,如需要别的日志信息可自行修改。

训练完成后的模型保存在路径models/baseline_color_32/checkpoint下,默认保存每个周期内最低acer模型、最后一个epoch训练结束的模型和全局最低acer模型,如下图所示。

在验证集上测试模型

python train_CyclicLR.py --mode infer_test --model baseline --image_mode color --image_size 32 --batch_size 8

验证集上结果,ACER=0.0358

模型效果测试

调用训练好的模型,对视频中的人脸进行活体检测。(也可以检测摄像头前的自己,本项目以视频文件为例)

测试脚本face_recognize.py参数:

--alive_detect_model:活体检测模型权重

--key_point_detect_model:关键点检测模型,路径为alive_detect/shape_predictor_68_face_landmarks.dat

--detect_vidio:待检测的视频片段存放路径

--detect_res:视频片段的检测结果存放路径

测试代码示例:

python face_recognize.py 
--alive_detect_model models/baseline_color_32/checkpoint/global_min_acer_model.pth 
--key_point_detect_model alive_detect/shape_predictor_68_face_landmarks.dat 
--detect_vidio alive_detect/video_demo.mov 
--detect_res alive_detect/res_video_demo.avi

注:--detect_res保存的视频文件默认avi格式,若需要保存其他格式可以自行修改代码。

测试结果示例:

扩展

关于模型训练,可继续调参以期在验证集获得更好的效果。关于数据集,可以使用全部三种模态的数据,使用FaceBagNet模型进行多模态人脸活体检测模型的训练。已经给出相关代码,可自行查看。

数据集获取:https://gas.graviti.cn/dataset/datawhale/CASIA-SURF

代码地址:

https://github.com/ZJUTSong/Alive_Detect

资讯

OpenAI以10亿美元出售「灵魂」

简历

海量秋招面试资料等你来拿!

资讯

英伟达用 AI 给自家纪录片配音

转载

用Python快速制作海报级地图

分享

点收藏

点点赞

点在看

相关文章:

Pyqt5学习系列

最近在学习Pyqt5做界面,找到了一个非常棒的博主的学习系列 在此记录下来: http://blog.csdn.net/zhulove86/article/category/6381941

编程方式刷新Squid缓存服务器的五种方法

网站进行内容更新是常有的事情,当被缓存的资源更新时,前端Squid 缓存服务器内容也必须要相应的更新,否则用户就可能会看到过期的数据。当没有程序支持时就需要每次登录到服务器上执行刷新操作,在服务器数量小的的时候这种方式还可…

Android 实时文件夹

实时文件夹是一种用来显示由某个ContentProvider提供的数据信息的桌面组件。要创建一个实时文件夹,必须要有两个方面的支持。 1,要定义一个用来创建实时文件夹的Activity。 2,所指定数据信息URI的ContentProvider必须支持实时文件夹时文件夹查…

《新程序员002》图书正式上市! 从“新数据库时代”到“软件定义汽车”

20年前,伴随着互联网打开信息化大门,技术人成为新时代的开拓者。在时代的召唤下,CSDN于2001年推出国内首个面向IT人员的专业杂志——《程序员》,成为一代代开发者的技术启蒙。20年后的今天,人工智能、云计算、大数据等…

Xtrabackup bug记录

xtrabackup 2.1.2 2.1.3 均出现以下问题: 123xtrabackup: warning: Log block checksum mismatch (block no 191401143 at lsn 3946288081920):expected 800836998, calculated checksum 800832263xtrabackup: warning: this is possible when the log block has n…

RHEL5上配置VNCSERVER

VNC一个远程显示系统,管理员通过它不仅仅可以在运行程序的本地机上察看桌面环境,而且可以从 Internet上的任何地方察看远程机器的运行情况,而且它具有跨平台的特性。 Linux 要使用远程桌面需要安装VNC,Centos5,RHCE5 已经自带了VN…

勒索软件层出不穷,Veeam “3-2-1-1-0”助力构建数据防护

随着 AI、IoT、云原生等前沿技术的发展,近年来勒索病毒的攻击手段不断升级,赎金也越来越高:例如今年美国最大燃油管道受攻击导致美国17个州和华盛顿特区进入紧急状态,2020 年 Ripple20 0day 漏洞曝光,波及数亿台联网设…

大数据架构和模式(一)——大数据分类和架构简介

概述 大数据可通过许多方式来存储、获取、处理和分析。每个大数据来源都有不同的特征,包括数据的频率、量、速度、类型和真实性。处理并存储大数据时,会涉及到更多维度,比如治理、安全性和策略。选择一种架构并构建合适的大数据解决方案极具挑…

Windows 7 开发新特性

10月25日在西安举行的Windows 7 社区发布活动中我讲了Session1 -- Windows 7 概览。参会的人员达到62人,这个参加人数超过了我的预期,非常开心. 主要讲了一下内容: 一 构建于稳固的基础平台 1 . 改进的基础平台 兼容性: 兼容基于Windows Vista构建的应用程序与设备 …

GitHub 的 AI 编程工具漏洞高达 40% ,再次陷入争议……

整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 在近日发表的一篇论文中,研究人员对 GitHub Copilot 人工智能编程辅助工具进行了深入调查。结果发现,仍处于测试预览阶段的 Copilot 具有高达 40% 的错误代码率,意味…

centos中mysql重置密码

1 . 用空密码方式使用root用户登录 MySQL; mysql -u root 2. 修改root用户的密码; mysql> update mysql.user set passwordPASSWORD(’新密码’) where User’root’; mysql> flush privileges; mysql> quit 3. 重新启动MySQL&#xff…

Centos 内存占满 释放内存

2019独角兽企业重金招聘Python工程师标准>>> 一台服务器,今天用 free -m 查看,发现内存跑满了。 再 top,然后按下shiftm,也就是按内存占用百分比排序,发现排在第一的进程,才占用0.9%&#xff0c…

Android开发实践:为什么要继承onMeasure()

首先,我们写一个自定义View,直接调用系统默认的onMeasure函数,看看会是怎样的现象: 12345678910111213141516171819202122package com.titcktick.customview; import android.content.Context; import android.util.AttributeSet;…

Android_CodeWiki_01

记录常用代码片,以备不时之需..wkakak,开始: 1、 精确获取屏幕尺寸(例如:3.5、4.0、5.0寸屏幕) 1 public static double getScreenPhysicalSize(Activity ctx) { 2 DisplayMetrics dm new Displ…

centos vnc配置笔记

1.首先查询是否安装VNC Serverrpm -qa |grep vnc如果有类似于:vnc-server-的值返回说明已经安装了vnc-server如果没有安装采用yum安装yum -y install vnc2.配置VNC用户如果以root登录的话,输入vncpasswd Password:Verify:设置root用户的VNC登录用户名和密…

普通大学生和大厂的距离有多长?

随着夏季的离去,金九银十招聘季已经悄然而至,现在正处于大厂招聘高峰期,是找工作的好时机。对于程序员这个行业来说,进大厂意味着高工资、高福利以及巨大的晋升空间,这是普通公司无法提供的,因此&#xff0…

ovirt官方安装文档 附录F

附录F:在单独的机器上安装Websocket代理 websocket代理允许用户通过noVNC和SPICE HTML5控制台连接到虚拟机。noVNC客户端使用websocket传递VNC数据。但是,QEMU中的VNC服务器不提供websocket支持,因此必须在客户端和VNC服务器之间放置一个webs…

CentOS重启启动Apache,VNC

centos 重启 apache #service httpd restart 重启 VNC #service vncserver restart 重启mysql # /etc/init.d/mysqld start 重启nginx #/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

调侃 -- 刚入职时的单纯

借个漫画调侃下刚入职时傻傻的想法当然也不是说排斥加班,既然选择了这个行业,也做好了加班的准备还好现在的公司不怎么加班,相比某些企业简直不能算是加班对于哪些上班好几年的老员工,下班后仍能坚持在工位上做下去,我…

AI市场扩大催生多样化标注需求

爱数智慧创始人兼CEO张晴晴在服贸会论坛上做主题分享 9月3日,由中国信通院云计算与大数据研究所,亚太工程组织联合会主办的《2021中国智能产业论坛》在2021服贸会上成功举办,论坛现场,北京爱数智慧创始人兼CEO张晴晴做《多模态标…

五、DNS与bind

DNS服务可以为用户提供域名和IP之间的自动转换。通过DNS,用户只需输入机器的域名即可访问相关的服务,而无需使用那些难以记忆的IP地址。DNS帮助用户在互联网上寻找路径,在互联网上的每一个计算机都拥有一个唯一的地址,称作IP地址。…

Nutch 二次开发之parse正文内容

关于nutch的基础知识能够參考lemo的专栏 nutch支持二次开发,为了满足搜索的准确率的问题,考虑只将网页正文的内容提取出来作为索引的内容,相应的是parse_text的数据。我使用的事nutch1.4 版本号,在cygwin下运行crawl命令进行爬取。…

翼方健数曹华:构建数据和计算互联网的必由之路

智能时代,数据无疑是最活跃的生产要素,它将决定未来的生产力和生产关系。其中,共享和保护数据,促进数据流通,并最大化数据价值是业内技术发展所关注的焦点。 诞生在这一背景下的隐私计算技术正在蓬勃发展,…

vi常用命令以及 冒号输入

按i进入输入模式 输入: 按ESC结束输入 按:w保存退出 pageup上翻页 pagedown下翻页 :w保存 :q!不保存 :wq保存离开 i o a编辑模式 ESC一般模式 dd 删除光标所在整行 yy 复制光标所在整行

Zabbix(六):项目实战之--自动发现nginx调度器及后端web服务集群、自定义参数监控...

项目: 1.自动发现nginx调度器及后端apache构建的web服务集群; 2.使用自定义参数监控调度器上nginx服务的相关统计数据及速率数据; 3.使用自定义参数监控后端apache服务的相关统计数据及速率数据;(选做) 4.制定出nginx调度器及后端…

ONNX 浅析:如何加速深度学习算法工程化?

AlphaGo击败围棋世界冠军李世石以来,关于人工智能和深度学习的研究呈现井喷之势。各种新的算法和网络模型层出不穷,令人眼花缭乱。与之相随的,深度学习的训练和推理框架也在不断的推陈出新,比较著名的有:微软的CNTK、G…

如何在OS X中打印到PDF文件

如何在OS X中打印文件到PDF文件?其实不需要安装任何其他软件,OS X本身支持打印到PDF文件这个功能。具体操作详见下面文章:Want to save a document or web page as a PDF file, but you don’t own Adobe Acrobat? No problem, you can prin…

Joomla和Drupal简介

Joomla!是一套在国外相当知名的内容管理系统。Joomla!是使用PHP语言加上MySQL数据库所开发的软件系统,可以在Linux、 Windows、MacOSX等各种不同的平台上执行。目前是由Open Source Matters(见扩展阅读)这个开放源码组织进行开发与支持&#…

AD RMS高可用(三)部署RMS根群集服务器

1) 在rms服务器上点击“添加角色和功能”,开始rms组件的添加 2) 选择“基于角色或基于功能安装”,点击”下一步“。 3) 选择第一台rms服务,点击”下一步“。 4) 勾选”ADRMS”角色,同时会添加iis服务。点击”下一步“。 5) 保持默…

AI 复活「她」! GPT-3 帮美国小哥复刻逝去未婚妻,但又夺走她……

整理 | 禾木木 出品 | AI科技大本营(ID:rgznai100) 今年 7 月,一名33岁的美国小哥 Joshua Barbeau 在未婚妻去世后,根据她在 Facebook 和 twitter 上的文本在另一名开发人员的帮助下成功在 GPT-3 上微调,能够复刻出未…