人脸识别(Face Recognition)简要综述
文章目录
- 人脸识别在计算机视觉中的位置
- 早期方法
- Face Recognition with Local Binary Patterns(【ECCV 2004】)
- LBP的feature map计算方法:
- 除此以外LBP算子还有改进版本:
- LBP的特点
- 从LBP的得到的“图片”到“向量”
- 数据集
- 一些较新的文章
- FaceNet(【CVPR 2015】)
- Finding Tiny Faces with GAN(【CVPR 2018】)
- Masked Face Recgonition with latent part(【ACM MM 2020】)
- MagFace(【CVPR 2020 Oral】)
- 参考文献
所谓人脸识别,就是在图像和视频中检测人脸,并与人脸数据库中进行实时对比,从而实现身份识别。单纯的人脸识别目前已经比较成熟了,需要与其他的方向融合(如3D视觉、图形学)或者结合一些新的场景(如口罩、大尺度相片),比较能做出新的东西
人脸识别在计算机视觉中的位置
如果将计算机视觉分为四类基本任务,那么人脸识别可以认为是目标分类的延申任务
早期方法
人脸识别的方法框架大体上并没有发生变化,都是首先进行人脸检测,然后做特征提取,再训练一个分类器。
许多人认为,人脸识别任务中特征提取(在这个任务中更确切地可以说是–人脸表征)是最重要最核心地一步
以下以一种基于LBP的方法为例进行说明
Face Recognition with Local Binary Patterns(【ECCV 2004】)
1994年有人提出了LBP特征。局部二值模式(Local Binary Patter, LBP)是一种用来描述图像局部纹理特征的算子,LBP特征具有灰度不变性和旋转不变性等显著优点,它将图像中的各个像素与其邻域像素值进行比较,将结果保存为二进制数
而在2004年则有人提出可以用其来做人脸识别的特征提取
常见的特征提取算子有:PCA、LDA、BIC、HoG(行人检测常见HoG+SVM)、Haar(人脸检测常见)等
常见的分类器有:SVM、kNN、kMeans等
在文章中,作者使用LBP来提取特征,使用kNN来做分类器
LBP算子的简单介绍
LBP的feature map计算方法:
原始的LBP算子定义为在33的窗口内,以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。这样,33邻域内的8个点经比较可产生8位二进制数(通常转换为十进制数即LBP码,共256种),即得到该窗口中心像素点的LBP值,并用这个值来反映该区域的纹理信息。如下图所示:
除此以外LBP算子还有改进版本:
1)圆形LBP算子 2)LBP等价模式
LBP的特点
因为LBP计算特征图是通过与旁边的元素对比获得,整个图片的灰度变化是"同步"变化,因此LBP特征图对于光照变化是鲁棒的
从LBP的得到的“图片”到“向量”
上述提取的局部二值模式算子在每个像素点都可以得到一个局部二值模式“编码”,那么,对一幅图像(记录的是每个像素点的灰度值)提取其原始的LBP算子之后,得到的原始LBP特征依然是“一幅图片”(记录的是每个像素点的局部二值模式值)
局部二值模式的应用中,如纹理分类及人脸分析等,一般都不将局部二值模式图谱作为特征向量用于分类识别,而是采用局部二值模式特征谱的统计直方图作为特征向量用于分类识别。
也就是: 原图–>LBP特征图–>统计直方图得到特征向量。(这个特征向量的意思不是线代里面那个,就是指特征的意思)
经过文章作者的测试,有如下的结论
- LBP相比于PCA、LDA等应用于人脸识别方法而言,更加简单有效。LBP本身是一种纹理提取算法,但是在人脸识别中却很有用
- 对于人险识别而言,仅仅通过单个简单的分类器是难以达到很高的准确度的
- 对于LBP而言,还可以使用AdaBoost等方法组合出一个较强的分类器进行分类
数据集
下面地这张图说明了CNN时代最常用的人脸识别数据集
一些较新的文章
前面说到,人脸识别的步骤无非如下几个:
人脸识别的方法框架大体上并没有发生变化,都是首先进行人脸检测,然后做特征提取,再训练一个分类器
在深度学习时代,只不过在这三个基本步骤上加了更多花样,如更新的检测方法、以神经网络为基础的特征提取算法、和新设计的损失函数。
例如,常用以CNN为基础的网络来提取特征,新设计损失函数如triplet
对于基于 CNN 的人脸识别方法,影响准确度的因素主要有三个:训练数据、CNN 架构和损失函数。
在深度学习时代,一些最经典的人脸识别算法比较如下
From: https://sci-hub.wf/10.1007/978-981-13-7123-3_3
FaceNet(【CVPR 2015】)
这篇文章截至2022-3-27,引用次数已经达到了一万多,是近些年来人脸识别领域的经典之作
FaceNet的重要点:
- 将人脸映射到128维向量空间中。相比其他网络动辄几百上千维,向量嵌入地更加紧凑了。不过该文章只给出了人脸嵌入到128维向量。FaceNet 没有定义任何新的算法来进行分类,而只是创建了嵌入,因此可以后续用于人脸识别、验证和聚类。
FaceNet 使用深度卷积神经网络 (CNN)。网络经过训练,使得Embedding向量之间的平方 L2 距离对应于人脸相似度。
- 新设计了一个Triplet损失函数,这个triplet已经成为了人脸识别领域的经典之作。之所以叫triplet,是因这个损失函数的自变量包含三个部分: 某个特定人脸(称为anchor)、与该人匹配的人脸(称为正样本positive)、与该人不匹配的人脸(称为负样本negative)
上图即给出了triplet的计算过程,这个损失函数的输入是一个anchor与一个正样本+一个负样本合并计算而来
这张图是经过triplet损失函数训练前后,希望得到的结果: 即训练后anchor与正样本比较近,而离负样本比较远
三元组损失函数可以正式定义为
∑iN[∥f(xia)−f(xip)∥22−∥f(xia)−f(xin)∥22+α]+\sum_{i}^{N}\left[\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{p}\right)\right\|_{2}^{2}-\left\|f\left(x_{i}^{a}\right)-f\left(x_{i}^{n}\right)\right\|_{2}^{2}+\alpha\right]_{+} i∑N[∥f(xia)−f(xip)∥22−∥f(xia)−f(xin)∥22+α]+
只要记住公式背后 的直觉, 然后就很容易记住了。
xi−x_{\mathrm{i}} \quad-xi− It represents an image
f(xi˙)f\left(x_{\dot{i}}\right)f(xi˙) - It represents the embedding of an image
α\alphaα– It represents the margin between positive and negative pairs
- FaceNet 使用 2 种类型的 CNN作为backbone,即 Zeiler & Fergus 架构和 GoogLeNet 风格的 Inception 模型。
FaceNet是一个通用框架,可以用于人脸验证(Face Verification)、人脸识别(Face Recognition)、人脸聚类(Face Clustring)
任务 | 解释 | Embedding空间任务 |
---|---|---|
Face Verification | 两张脸是同一个人吗 | 距离是否超过阈值 |
Face Recognition | 这张脸是谁的 | kNN |
Face Clustering | 找出相似的人 | kMeans |
Finding Tiny Faces with GAN(【CVPR 2018】)
//TODO
Masked Face Recgonition with latent part(【ACM MM 2020】)
//TODO
MagFace(【CVPR 2020 Oral】)
//TODO
参考文献
- LBP算子介绍
- wiki–局部二值特征
- FaceNet详解
- FaceNet详细介绍
- 人脸识别技术全面总结:从传统方法到深度学习
人脸识别(Face Recognition)简要综述相关推荐
- CV之FR:计算机视觉之人脸识别(Face Recognition)方向的简介、使用方法、案例应用之详细攻略
CV之FR:人脸识别之人脸特征提取算法相关思路配图.论文集合 目录 人脸识别(Face Recognition)方向的简介 FR相关论文集合 FR相关算法配图集合 人脸识别(Face Recognit ...
- CV之FR:计算机视觉之人脸识别(Face Recognition)方向的简介、代码实现、案例应用之详细攻略
CV之FR:计算机视觉之人脸识别(Face Recognition)方向的简介.代码实现.案例应用之详细攻略 目录 人脸识别简介 1.人脸识别的任务 2.人脸识别常用数据集 3.损失函数 4.网络模型 ...
- 人脸识别face recognition
0 简介 人脸识别大致分为如下三个部分: 人脸检测 face detection 人脸对齐 face alignment 人脸识别 face recognition,包括: face verifica ...
- 人脸识别2:InsightFace实现人脸识别Face Recognition(含源码下载)
人脸识别2:InsightFace实现人脸识别Face Recognition(含源码下载) 目录 人脸识别2:InsightFace实现人脸识别Face Recognition(含源码下载) 1. ...
- 人脸识别 Face Recognition 入门
人脸识别 Face Recognition 入门概述 总述 传统特征方法 深度学习方法 损失函数演进 基于欧几里德和距离的损失 基于角度/余弦边距的损失 SoftMax 损失及其变体 一级标题 二级标 ...
- 人脸识别 | Facial recognition详细介绍
人脸识别 | Facial recognition 人脸识别是身份识别的一种方式,目的就是要判断图片和视频中人脸的身份时什么. 本文将详细介绍人脸识别的4个特点.4个步骤.5个难点及算法的发展轨迹. ...
- 人脸识别3:C/C++ InsightFace实现人脸识别Face Recognition(含源码)
人脸识别3:C/C++ InsightFace实现人脸识别Face Recognition(含源码) 目录 1. 前言 2. 项目安装 (1)项目结构 (2)配置开发环境(OpenCV+OpenCL+ ...
- 人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码)
人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码) 目录 人脸识别4:Android InsightFace实现人脸识别Face Recognit ...
- 人脸识别Face Recognition综述
综述:https://arxiv.org/pdf/2009.13290.pdf 人脸识别整个系统一般由三个关键要素构成:人脸检测(face detection).人脸预处理(face preproce ...
- AI实战:深度学习之人脸识别 Face recognition
前言 人脸识别是机器视觉最成熟.最热门的领域,近几年,人脸识别已经逐步超过指纹识别成为生物识别的主导技术. 人脸识别是基于人的脸部特征信息进行身份识别的一种生物识别技术.用摄像机或摄像头采集含有人脸的 ...
最新文章
- Zend Studio 10正式版破解(2013-02-26更新)
- 在不是Thread类的子类中,如何获取线程对象的名称呢?
- access在sql中横向求和_access在sql中横向求和_求和还用Sum函数就out了,快捷键Alt+=一秒搞定,操作简单更高效......
- plc采用计算机结构如何理解,PLC的基本结构
- strings命令(Win、Linux均可适用)
- SparkSQL:SparkSQL CLI Application report for application_15_0022 (state: ACCEPTED)
- Qemu 简述 | 转
- Araxis Merge for Mac(可视化文件比较合并工具)支持m1
- Android实现圆角和圆形
- git命令行命令(1)
- Android pdfviewer的公章注释问题
- Unity简单实现调用电脑打印机打印图片功能
- 计算机系统的结构分类,图解计算机结构与系统分类!!
- 阿里图标库《保留彩色》
- 校园网网络命令拓扑命令+详解集合
- 【Python计算机视觉】图像到图像的映射(单应性变换、图像扭曲)
- 局域网服务器共享文件夹设置,局域网共享设置如何操作?怎么实现局域网文件夹共享?...
- 电商平台如何实现分账功能
- Android手机安装原版BT5[ARM]
- 本地自签https证书
热门文章
- 获取斗鱼直播间的弹幕信息
- 如何打开损坏的PDF文件查看内容并修复
- 打开计算机网络自动连接,电脑如何自动连接上网 开机自动拨号连接宽带的方法【步骤】...
- 副业真没想你的这么容易做!
- ERROR: Command errored out with exit status 1
- 郭德纲相声清晰版 高速下载【全部更新】
- 多糖类水凝胶构建制备介绍(瑞禧多糖水凝胶简述)
- video标签隐藏右下角的三个点
- “2020 博客之星”年度总评选 TOP 200 名单已出,速来认领!
- 深入理解Builder模式(转载)