人脸识别“SphereFace: Deep Hypersphere Embedding for Face Recognition”

2023-05-16

在开放集中进行人脸识别,理想的特征最大的类内差距应小于最小的类间差距。作者提出了angular softmax(A-Softmax)损失函数学习angularly discriminative features。在球面流形中增加判别约束,符合人脸分布在流形上的假设。此外,角度的边距使用参数m进行量化。改方法只改了损失函数,使用经典的CNN结构上训练人脸识别模型,在Megaface上获得排名第一。

一、复习一下人脸识别相关内容:
人脸识别分为人脸认证和人脸验证,人脸人证将人脸分类到某个ID,人脸验证时输入一对人脸,判断是否为同一个ID。人脸识别可以在闭集合和开放集合上测试,如下图所示。
这里写图片描述
在闭集合上测试,所有的需要测试的ID在训练集中都存在,这相当于将测试人脸分类到某个ID,人脸验证相当于对一对人脸分别识别,判断id是否为同一个。在开放集合中,测试id与训练id不重叠,此时一般提取人脸特征,人脸认证相当于probe和gallery中每个人脸进行验证。开放集合人脸识别是距离学习问题,核心是学习好的特征。好的特征使得最大的类内差距小于最小的类间差距。

二、softmax损失的问题
softmax损失仅学习分辨性不够强的特征,一些方法结合softmax loss和contrastive loss,center loss。FaceNet使用了triplet losss。center loss仅能使得类内紧凑。contrastive loss和triplet loss需要pair/triplet 挖掘过程,耗时。所有的这些方法都使用欧式距离。

三、改进的softmax损失
softmax 损失学习到的特征呈角度分布,说明欧式距离损失和softmax损失相容度不好。论文提出了角度距离。以二分类问题为例,softmax 损失决策边界为:
(W1W2)x+b1b2=0
论文约束 ||W1||=||W2||=1 , b1=b2=0 ,决策边界成为:
||x||(cos(θ1)cos(θ2))=0 ,
其中 θi Wi 和x之间的 夹角,新的决策边界只依赖 θ1 θ2 ,改进后的softmax损失可以直接优化角度,CNN可以学到呈角度分布的特征。这样第i类的特征相比其他类具有较小的 θi

接下来将损失改到angular softmax,引入整数m,量化决策边界。对二分类问题,类别1和类别2的决策边界不一样,分别为:
||x||(cos(mθ1)cos(θ2))=0
||x||(cos(θ1)cos(mθ2))=0
m控制角度距离的尺寸,二分类问题可扩展到多分类问题,通过优化A-Softmax,决策区域分的更开,拉大了类间距离,压缩了类内距离。几种损失函数学到的特征分布如下图所示,
这里写图片描述

A-Softmax具有清晰的几何标识,学到的特征构建了一个角度距离判别法,等价于球流形上的geodesic距离,鉴于A-Softmax loss与球流形之间的联系,论文提出的方法成为SphereFace。欧拉距离损失,改进Softmax损失,A-Softmax损失的几何标识如下图所示,第一行为2D特征约束,第二行为3D特征约束。
这里写图片描述

论文使用的几种CNN网络:
这里写图片描述

实验结果
使用WebFace训练,训练使用的数据量是0.49M,与DeepFace,FaceNet,VGGFace相比很小。
引入整数m对识别结果的影响:
这里写图片描述

在LFW和YTF数据集上的对比:
这里写图片描述

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

人脸识别“SphereFace: Deep Hypersphere Embedding for Face Recognition” 的相关文章

  • ideaskin软件下载_Idea for android app

    App idea generator free app for inspiring and giving idea to make an app This app will show three random words on the sc
  • RS雷达转Velodyne雷达数据Failed to find match for field ‘intensity‘

    目录 xff1a 问题分析解决 问题 因为目前很多SLAM框架支持的激光雷达都是Velodyne型号的 xff0c 对于速腾RS雷达的使用者来说 xff0c 需要对数据进行转换 xff0c 其实现在速腾的雷达已经支持输出XYZI和XYZIR
  • C++调试报错 no match for operator...operand types

    在调试C 43 43 代码遇到一个小错误 xff0c 但是也比较常见 xff0c 报错如下 xff1a error span class token operator span no match span class token keywo
  • RuntimeError: Error compiling objects for extension手把手带你解决(超详细)

    我在执行python setup py build develop的时候 xff0c 编译出错 xff0c 显示RuntimeError Error compiling objects for extension 我在网上找了一些帖子 xf
  • DeepLiDAR: Deep Surface Normal Guided Depth Prediction for Outdoor Scene from Sparse LiDAR

    DeepLiDAR复现 一 下载二 配置环境依赖三 数据集准备四 预处理1 表面法线 surface normal https github com valgur surface normal 2 运行设置 xff08 1 xff09 报错
  • Deep Compression阅读理解及Caffe源码修改

    更新 xff1a 没想到这篇文章写出后有这么多人关注和索要源码 xff0c 有点受宠若惊 说来惭愧 xff0c 这个工作当时做的很粗糙 xff0c 源码修改的比较乱 xff0c 所以一直不太好拿出手 最近终于有时间整理了一下代码并开源出来了
  • Trajectory generation for quadrotor while tracking a moving target in cluttered environment

    四旋翼在杂波环境下跟踪运动目标的轨迹生成 摘要1 文章主要贡献2 前言2 1 轨迹公式2 2 实现结构 3 跟踪轨迹生成3 1 标称路径点生成3 2 可行路径点生成3 3 安全飞行走廊生成3 4 代价函数3 5 强制约束3 6 求解跟踪轨迹
  • 翻译-Frustum PointNets for 3D Object Detection from RGB-D Data

    Frustum PointNets for 3D Object Detection from RGB D Data 摘要介绍相关工作从RGB D数据中检测三维物体基于前视图图像的方法 xff1a 基于鸟瞰图的方法 基于3D的方法 点云的深度
  • nn.Embedding

    在PyTorch中 针对词向量有一个专门的层nn Embedding 用来实现词与词向量的映射 nn Embedding具有一个权重 weight 形状是 vocab size embedding dim Embedding层的输入形状是b
  • Go语言学习15-基本流程控制

    基本流程控制 流程控制对比 Go 和 C 基本流程控制 1 代码块和作用域 2 if 语句 3 switch语句 3 1 表达式switch语句 3 2 类型switch语句 4 for 语句 4 1 for 子句 4 2 range 子句
  • Python 的 map、列表推导、循环效率比较

    话不多说 直接上代码 1 准备数据 三个列表 import time x x1 x2 for i in range 1000000 x append i x1 append i x2 append i 2 开始表演 2 1 for循环 st
  • 教妹学Java(十五):for循环详解

    你好呀 我是沉默王二 一枚颜值与才华俱在的程序员 本篇教程通过我和三妹对话的形式来谈一谈 for while do while 循环之间的差别 以及重点介绍一下 for 循环 while do while 会在接下来的教程中单独介绍 教妹学
  • matlab for循环坑

    matlab 用 for 嵌套循环遍历数组时 可能有 bug matlab octave 环境 linux Matlab R2018a 1 windows GNU Octave version 5 2 0 以 for x vector 的形
  • 防弹 Groovy 脚本嵌入

    我正在开发一个服务器应用程序 可以通过用户提供的 Groovy 脚本进行扩展 显然 我想确保这些脚本在非常严格的沙箱中运行 它们不能破坏核心应用程序代码或消耗太多资源以使服务器超载 我研究了各种可能性 最终的解决方案可能是这些的组合 在非常
  • torch rnn网络中,embedding.weight会反向更新吗?

    结论 在 PyTorch 中 如果在训练中使用了 embedding 层 那么 embedding weight 会被反向更新 这是因为在训练过程中 模型的参数会根据损失函数的反向传播进行更新 而 embedding 层的参数 embedd
  • 嵌入式 Facebook Like-Box 不允许我设计它。为什么?

    我正在尝试在我的网站页面上放置一个 Facebook Like Box 然后通过我自己的 CSS 对其进行样式设置 主要是为了增加 div stream content 的高度 这个想法是让 FB feed 充当新闻 feed 但我不希望用
  • 如何在 RNN 中嵌入句子序列?

    我正在尝试制作一个 RNN 模型 在 Pytorch 中 它需要几个句子 然后将其分类为Class 0 or Class 1 为了解决这个问题 我们假设句子的 max len 为 4 max amount of time steps 为 5
  • 嵌入层 Keras 的可变长度输入

    我有一个可变大小的文本语料库 我正在尝试使用 keras 中的嵌入层将文本输入 LSTM 模型 我的代码看起来像这样 import numpy as np from keras layers import Embedding Input L
  • 如何在张量流中使用非常大(>2M)的词嵌入?

    我正在运行一个具有非常大的词嵌入 gt 2M 词 的模型 当我使用 tf embedding lookup 时 它需要一个很大的矩阵 当我运行时 我随后出现了 GPU 内存错误 如果我减小嵌入的大小 一切都会正常 有没有办法处理更大的嵌入
  • 如何在 Angular 模板中嵌入 GitHub gist?

    角度忽略script其模板中包含标签 但加载 GitHub gist 需要它们 执行此操作的最佳做 法是什么 使用iframe 创造script动态标记 或者是其他东西 一种方法是创建一个iframe with script里面并在你希望你

随机推荐