人脸识别概述[L-softmax | 人脸验证 | DeepFace | FaceNet | Triplet loss]

2023-05-16

文章目录

  • 思维导图
  • 疑问
    • 用softmax分类做人脸识别,怎么应用呀
  • 概念区分
  • 主流方法
    • 损失函数
      • Softmax loss
      • 基于欧式距离的损失函数
        • 对比损失(Contrastive Loss)
        • 三元组损失(Triplet Loss)
      • angular/cosine-margin-based loss
        • L-softmax
    • 里程碑的论文
      • DeepFace
      • DeepID
      • DeepID2
      • FaceNet
  • 参考

思维导图

在这里插入图片描述
在线的导图浏览:人脸识别思维导图

疑问

用softmax分类做人脸识别,怎么应用呀

在闭集上人数是定的,然后用softmax按照分类来训练模型。
在开集上用softmax之前的作为特征,用来比较特征向量之间的距离来确定是否为同一个人。

概念区分

人脸检测:是目标检测领域,给一张那个图片,框出里面人脸的位置
人脸对齐:是关键点检测,由人脸检测得到的人脸区域,进行关键点回归,得到描述五官的若干个关键点。
人脸识别:又包括人脸验证(一对一验证是否是同一个人)和人脸辨识(一对多,从一个数据库里搜索是否有这个人)

主流方法

人脸识别的流程:
在这里插入图片描述
首先,人脸检测器用于定位人脸,然后利用人脸对齐得到一个规范化的人脸,再经过活体检测,最后是人脸识别的方法。训练时选择一种网络结构和损失函数得到一个判别性强的模型,然后用于测试。
主要的思路:
在人脸识别领域,CNN网络结构主要用做表示学习,提取人脸的一个特征向量表示。随着新的backbone的出现而更新。关键的核心是怎么样得到一个具有判别性的向量表示,也就是说怎么让同一个人的不同图片的向量表示尽可能接近,而不同人的图片之间的向量表示尽可能远。所以人脸识别最重要的就是如何设计损失函数。目前,人脸识别已经超过人类水平,接近饱和了。
LFW数据集上的方法性能&架构&损失函数
在这里插入图片描述

损失函数

Softmax loss

softmax loss实际上就是softmax + 交叉熵损失
在这里插入图片描述
其中 f f f一般是最后的全连接层的输出 f = W T x f=W^Tx f=WTx,把它展开成模和角度的形式就是下面这种形式:
在这里插入图片描述
基于softmax loss用于人脸识别,是最初的方法。这种方法只能保证让组间具有区分性,对组内的约束很弱。

基于欧式距离的损失函数

对比损失(Contrastive Loss)

在这里插入图片描述
其中 d = ∣ ∣ a n − b n ∣ ∣ 2 d=||a_n−b_n||^2 d=anbn2,代表两个样本特征的欧氏距离,y为两个样本是否匹配的标签,y=1代表两个样本相似或者匹配,y=0则代表不匹配,margin为设定的阈值。这样就能达到我们的扩大组间、距离缩小组内距离的目标。

三元组损失(Triplet Loss)

训练的三元组包括(A,P,N): Anchor, positive and negative. 训练的目的就是让Anchor和positive(属于同一个人)尽可能的近,而让Anchor和negative(不属于同一个人)尽可能的远。
在这里插入图片描述

angular/cosine-margin-based loss

L-softmax

基于上面的softmax loss的缺点,L-softmax增加了一个超参数m(代表分类的间隔):
在这里插入图片描述
m = 1 m=1 m=1时,公式退化为softmax loss,随着 m m m越大,那么公式约束的margin就越大。达到增大组间距离的目的,进而使组内距离压缩。如下图所示:
在这里插入图片描述

里程碑的论文

DeepFace

DeepFace是CNN用于人脸识别的开山之作,主要在人脸对齐和人脸表示方面提出了新方法。
人脸对齐
论文使用的方法是基于基准点的3D建模方法,把人脸转为3D的正脸。这一步的作用就是使用3D模型来将人脸对齐,从而使CNN发挥最大的效果。
人脸表示
网络结构用了AlexNet的架构,loss是softmax,最终输出当前人脸属于哪个人的标签信息。
在这里插入图片描述
全连接层将上一层的每个单元和本层的所有单元相连,用来捕捉人脸图像不同位置的特征之间的相关性。其中,第7层(4096-d)被用来表示人脸。最后4030-d的输出是针对特定的SFC数据集的(有4030个人脸)。
DeepFace在LFW数据集上可以达到97.35%

DeepFace与之后的方法的最大的不同点在于,DeepFace在训练神经网络前,使用了对齐方法。论文认为神经网络能够work的原因在于一旦人脸经过对齐后,人脸区域的特征就固定在某些像素上了,此时,可以用卷积神经网络来学习特征。
针对同样的问题,DeepID和FaceNet并没有对齐,DeepID的解决方案是将一个人脸切成很多部分,每个部分都训练一个模型,然后模型聚合。FaceNet则是没有考虑这一点,直接以数据量大和特殊的目标函数取胜。

DeepID

人脸表示
对一张人脸图像提取五官的patch加上不同的尺度和颜色总共得到60个不同的patch,送到60个如下图所示的卷积网络中(60个网络分别训练)得到60个2160维的向量(每个patch得到一个160维的向量,水平反转之后再得到一个160维的向量)。把这602*160的向量连接起来就是人脸的向量表示。
在这里插入图片描述
人脸验证
该部分的神经网络的输入是60组(前面60个ConvNets的输出),每一组640维,(人脸验证,需要输入两张人脸图片,来判定这两张人脸图片是不是来自同一个人),每一张face patch包括做侧面和右侧面,320维,故每一组共640维。采用Joint Bayesian 来进行人脸的验证。
在这里插入图片描述

缺点

  • 很难训练

DeepID2

DeepID2的创新点在于在学习特征的时候,该网络不仅考虑分类准确率,还考虑类间差距。具体的做法就是在目标函数中添加一项类间差距。该添加的创新就在于类间差距是在两个样本间进行衡量的,因而添加类间差距后,训练过程需要变化。
网络模型:
equation1
学习算法:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190730203839720.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODA5NTkyMQ==,size_16,color_FFFFFF,t_70
用人脸辩识(face identification)使模型学习到强的组间信息,尽可能区分不同的人。用人脸验证(face verification )尽可能缩小组内距离,让同一个人的表示更接近。
人脸辩识(face identification)的交叉熵损失:
在这里插入图片描述
人脸验证(face verification )的对比损失(Contrastive Loss):
在这里插入图片描述
在LFW数据集上达到了 **99.15%**的性能。
优点:

  • 组合使用了交叉熵损失和对比损失,使组内距离尽可能的小

FaceNet

网络模型用了ZFNet或GoogLeNet,训练的时候用三元组的损失函数。测试的时候输出最终的向量表示,用来计算和其他图片的距离。
在这里插入图片描述
主要才用了triple loss,选择一个图片Anchor,Positive和Anchor来自同一个人的不同图片,Negative和Anchor来自不同的人。模型训练的目标就是让A和P之间尽可能的小,而A和N之间尽可能的大
在这里插入图片描述
关键的细节
三元组的选择对模型的收敛非常重要,怎么选择三元组?每次都应该挑选hard positive(同一个人中与Anchor最不相似的图片)和 hard negative(不同人中和Anchor最相似的图片),实际上每次都是挑选的semi-hard example(以防止在训练中很快地陷入局部最优)。

优点:

  • 该模型的优点是只需要对图片进行很少量的处理(只需要裁剪脸部区域,而不需要额外预处理,比如3d对齐等),即可作为模型输入。同时,该模型在数据集上准确率非常高。
  • FaceNet并没有像DeepFace和DeepID那样需要对齐。
  • FaceNet得到最终表示后不用像DeepID那样需要再训练模型进行分类,直接计算距离就好了,简单而有效。
  • 采用了三元组损失函数

参考

https://zhuanlan.zhihu.com/p/34404607
Deep Face Recognition: A Survey

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

人脸识别概述[L-softmax | 人脸验证 | DeepFace | FaceNet | Triplet loss] 的相关文章

  • 论文阅读笔记之——Contextual Loss

    给出几篇论文的链接 xff08 https arxiv org pdf 1803 02077 pdf https arxiv org pdf 1803 04626 pdf xff09 无论是风格转换的任务中 xff0c 还是超分辨率重建的任
  • pytoch人工神经网络基础:最简单的分类(softmax回归+交叉熵分类)

    softmax回归分类原理 对于回归问题 xff0c 可以用模型预测值与真实值比较 xff0c 用均方误差这样的损失函数表示误差 xff0c 迭代使误差最小训练模型 那么分类问题是否可以用线性回归模型预测呢 最简单的方法就是用softmax
  • softmax激活函数与softmax损失函数

    一 softmax 激活函数 在二分类任务中 xff0c 输出层使用的激活函数为 sigmoid xff0c 而对于多分类的情况 xff0c 就需要用到softmax 激活函数给每个类都分配一个概率 多分类的情况下 xff0c 神经网络的输
  • 关于softmax损失函数的推导

    关于softmax损失函数的推导 某人问我softamx损失函数的推导 索性就写一下 定义softmax损失函数的输入为 X N C 和 Y N C 其中N代表输入的数据的个数 C代表类别的个数 X指的是神经网络的输出 Y代表的是0 1矩阵
  • A-Softmax的keras实现-《SphereFace: Deep Hypersphere Embedding for Face Recognition》

    A Softmax的keras实现 参考文档 xff1a https www cnblogs com heguanyou p 7503025 html 注 xff1a 主体完成 xff0c 调试中 xff0c 先行记录 xff0c 待续 已
  • OHEM loss 源代码

    import numpy as np import torch import torch nn as nn class OhemCELoss nn Module def init self thresh ignore lb 61 255 s
  • 【旋转框目标检测】2201_The KFIoU Loss For Rotated Object Detection

    paper with code paper code Jittor Code https github com Jittor JDet PyTorch Code https github com open mmlab mmrotate Te
  • 2021CVPR-Cross Modal Focal Loss for RGBD Face Anti-Spoofing

    用于RGBD人脸反欺骗的交叉模式焦损 摘要 xff1a 自动检测呈现攻击的方法对于确保面部识别技术的可靠使用至关重要 文献中提供的大多数用于呈现攻击检测 PAD 的方法都无法将其推广到看不见的攻击 近年来 xff0c 人们提出了多通道方法来
  • 机器学习20:基于ResNet50和FaceNet实现人脸识别

    说明 这是优达学城的一个机器学习作业项目 我觉得还比较典型综合了几个常见的深度学习技术 值得分享一下 实现包括 数据增广 迁移学习 网络模型构建 训练 评估方法等 这里只是做了一个迁移学习的实现 重在实践过程 其原理没做分析 缺点 由于训练
  • Softmax的实现

    详解 https zhuanlan zhihu com p 25723112
  • 关于深度学习中的分类器

    因为之前一直都是用caffe做图像去噪 增强方面的工作 没太接触分类 上个学习会上通过报告学习了下关于分类的相关基础知识 为接下来分类的相关工作研究奠定下基础 基础之分类器 1 SVM 线性核SVM 一般应用于多分类 分类的结果 如3分类
  • 真正的非零预测的损失惩罚更高

    我正在构建一个深度回归网络 CNN 来从图像 7 11 预测 1000 1 目标向量 目标通常由大约90 为零并且只有10 非零值 目标中 非 零值的分布因样本而异 即不存在全局类别不平衡 使用均方误差损失 这导致网络仅预测零 我对此并不感
  • 是否有可能在 O(n) 时间内找到给定数组中的所有三元组?

    给定一个数字数组 找到满足给定条件的所有三元组 健康 状况 a i lt a j lt a k where I lt j lt k 有可能在O n 时间内解决这个问题吗 这不是家庭作业 输出的大小 最坏情况 是复杂性的下限 由于可能存在 O
  • Pytorch 中 [-1,0] 的维度范围是多少?

    所以我正在努力理解 Pytorch 中有关集合的一些术语 我不断遇到同样类型的错误range我的张量不正确 当我尝试谷歌寻找解决方案时 解释往往更加令人困惑 这是一个例子 m torch nn LogSoftmax dim 1 input
  • CS231n:如何计算Softmax损失函数的梯度?

    我正在观看斯坦福 CS231 用于视觉识别的卷积神经网络的一些视频 但不太明白如何使用计算 softmax 损失函数的解析梯度numpy From 这个堆栈交换 https math stackexchange com questions
  • CNN 上的快速损失收敛意味着什么?

    我正在两个不同的深度学习库 Caffe e Tensorflow 中训练两个 CNN AlexNet e GoogLeNet 该网络由每个图书馆的开发团队实施 here https github com BVLC caffe tree ma
  • 如何有条件地为张量赋值[屏蔽损失函数]?

    我想创建一个 L2 损失函数 忽略标签值为 0 的值 gt 像素 张量batch 1 包含标签 同时output是净输出的张量 两者的形状均为 None 300 300 1 labels mask tf identity batch 1 l
  • 将特征矩阵转换为 C++ 形式的三元组

    我认为 Eigen 使用压缩方法来存储稀疏矩阵 有什么方法可以从 std vectors 中提取特征稀疏矩阵的三重格式向量 Thanks 更多信息 三元组格式的示例 矩阵的三元组格式 A 3 0 4 0 0 0 1 0 0 2 0 5 4
  • Android:在应用程序中间时从 3G 切换到 WIFI = 网络连接丢失

    我在使用 HTC Legend Android 2 2 时遇到了一个恼人的问题 在 Xperia Galaxy Nexus 等上没有看到此问题 当我在 3G 连接上启动应用程序 获取一些数据 然后进入手机设置并启用 WIFI 时 手机会自动
  • ffmpeg 无损质量转换

    当文件类型不是 flv mp4 webm 时 我需要将所有视频转换到我的视频播放器 在网站中 当我使用时 ffmpeg i filename mkv sameq ar 22050 filename mp4 h264 0x645ee0 解码

随机推荐

  • js实现数组去重-ES6实现

    方法一 xff1a function unique arr const res 61 new Map return arr filter a 61 gt res has a amp amp res set a 1 就这么短 xff0c 就可
  • vue 报错 Avoid mutating a prop directly since the value will be overwritten whenever the parent compo

    Vue报错 xff1a Avoid mutating a prop directly since the value will be overwritten whenever the parent component re renders
  • 老男孩全栈Python开发

    地址 视频地址 p34 28 05
  • js实现文件分片上传

    span class token operator lt span span class token operator span span class token constant DOCTYPE span html span class
  • python实战-VScode环境搭建

    环境搭建 xff08 VScode xff09 以前用的是pycharm的专业版 xff0c 后来搞得破解不了了 xff0c 花了几个小时研究了一下怎么用VScode来搭建python开发的环境 开始之前 xff1a 装好python环境确
  • nginx部署多个vue项目

    上一篇已经介绍了然后配置web项目 xff1b 今天由于公司需求 xff0c 需要在同一域名端口下 xff0c 部署两个项目 xff1b 今天花了一上午终于弄好了 xff0c 选择赶紧做一个笔记 如何连接阿里云服务器就不在这里说了 xff0
  • 汇编语言

    基础知识 1 1机器语言 计算机的机器指令是一列二进制数字 计算机将之为转变为一列高低电平 xff0c 以使计算机的电子器件受到驱动 xff0c 进行运算 1 2 汇编语言的产生 程序员 汇编指令 编译器 机器码 计算机 1 3 汇编语言的
  • Bootloader概述

    Bootloader概述 分类 xff1a 嵌入式 Bootloader概述 Bootloader的含义 PC机上 windows linux 引导过程简介 嵌入式Bootloader 介绍与分析 嵌入式bootloader 介绍 Boot
  • vue SEO优化

    第一 xff0c ssr vue官方文档给出的服务器渲染方案 xff0c 这是一套完整的构建vue服务端渲染应用的指南 xff0c 具体参考https cn vuejs org v2 guide ssr html 第二 xff0c vue
  • 阿里云ubuntu 16.0402 安装mysql

    参考文献 阿里云服务器Ubuntu 16 04 3安装mysql如何远程连接阿里云上mysql数据库 出错10061 阿里云ubuntu 16 0402 安装mysql 前提 xff1a 装上Xshell xff0c winscp等远程工具
  • 阿里云开发工具汇总

    阿里云Ubuntu16 04 安装pip span class token function wget span https bootstrap pypa io get pip py python get pip py 阿里云Ubuntu1
  • 基于机器学习的异常检测与分析技术

    传统的运维方式在监控 问题发现 告警以及故障处理等各个环节均存在明显不足 xff0c 需要大量依赖人的经验 xff0c 在数据采集 异常诊断分析 故障处理的效率等方面有待提高 本关键技术面对传统运维故障处理效率低 问题定位不准确 人力成本高
  • Mac系统 消除系统更新提示的小红点

    1 首先在系统偏好设置中将软件更新中 自动保持我的Mac运行最新版本勾掉 xff1b 2 打开终端输入如下指令 xff1a defaults span class token function write span com apple sy
  • VSCode远程连接Ubuntu问题1:The remote host may not meet VS Code Server‘s prerequisites for glibc and libstd

    VScode配置远程免密连接Ubuntu16 0 4 xff0c 一直以来使用正常 xff0c 今天使用VSCode报错 xff0c 错误具体信息如下 xff1a The remote host may not meet VS Code S
  • wsl上的ubuntu执行docker和docker-compose失败问题排查

    起因 中秋放假没有关机 xff0c 肥来之后wsl上的docker compose 和docker报错啦 表现 docker compose ps报错 root 64 YK PC 00036 docker compose ps bash m
  • GVIM设置默认字体、背景颜色以及行号

    GVIM设置默认字体 背景颜色以及行号 xff1a 1 打开terminal去到根目录下 2 输入gvim vimrc打开空白文件 3 依次输入 set nu set guifont 61 Monospace 15 colorscheme
  • 2019-3-27毕设之python小白第三课---调用API接口

    CN DBpedia的接口调用 Introduction to APIs Knowledge Works以REST API的方式对外提供服务 一站式解决您的语义分析诉求 从多个维度为您的应用场景提供海量背景知识 API包括CN dbpedi
  • Python 使用xlrd模块获取Excel中超链接的URL并下载到本地

    本文介绍了xlrd模块如何操作Excel 目录 一 xlrd模块介绍二 使用步骤1 引入库2 示例代码 一 xlrd模块介绍 1 xlrd是读取Excel表格数据的模块 2 高版本的xlrd目前去除了对xlsx格式的支持 xff0c 支持x
  • 查看树莓派实时温度

    打开终端 xff0c 使用指令查看CPU温度 xff0c 依次输入以下指令 xff1a 1 cd sys class thermal thermal zone0 cat temp 返回值 除以1000 51540 返回值除以1000为当前C
  • 人脸识别概述[L-softmax | 人脸验证 | DeepFace | FaceNet | Triplet loss]

    文章目录 思维导图疑问用softmax分类做人脸识别 xff0c 怎么应用呀 概念区分主流方法损失函数Softmax loss基于欧式距离的损失函数对比损失 xff08 Contrastive Loss xff09 三元组损失 xff08