sphereface:deep hypersphere embedding for face recognition

2023-05-16

SphereFace算法详解_AI之路-CSDN博客_sphereface论文:SphereFace: Deep Hypersphere Embedding for Face Recognition 论文链接:https://arxiv.org/abs/1704.08063这篇是CVPR2017的poster,主要提出了A-softmax loss(angular softmax loss)用来改进原来的softmax loss。A-softmax loss简单讲就是在https://blog.csdn.net/u014380165/article/details/76946380?spm=1001.2014.3001.5501

        这篇文章相当于把之前lsoftmax的理论应用到了人脸的领域,并且给出了很强的理论支撑。尤其是他在几何空间上对度量学习的人脸识别有很强的解释性。整体上就是引入了||w||=1和b=0的lsoftmax,使得类别预测仅取决于W和x之间的角度,对角度引申出来的决策边界加上margin,指导loss学习更好的边界,从而增加类间距,缩小类内距。

1. Abstract

        在适当的度量空间中,have smaller maximal intra-class distance than minimal inter-class distance,最小的类间距要大于最大类内距。因此提出了angular softmax(A-softmax),enables CNNs to learn angularly discriminative features.让cnn学习角度判别特征。A-Softmax loss can be viewed as imposing discriminative constraints on a hypersphere manifold, which intrinsically matches the prior that faces also lie on a manifold.A-softmax loss可被视为对超球面流形施加区别性约束,其本质是与同样位于流形上的先验face相匹配。听起来差点意思,其实就是对决策边界施加了一个m,让model学了一个分的更开的边界,m就是区别性约束,而linear出的特征映射到高维的超球面上就是一块一块的区域。

2.Introduction

        上图讨论了开集和闭集测试,左边是闭集测试,就是测试的数据是在训练集中出现过的,有id的,本质就是一个分类任务,右边是开集测试,测试的数据在训练集中没有出现,因为在训练集上训练的model的能力更多体现在特征提取上,在face vertification中是提取两张不在训练集中的图片的到的特征做距离计算,进而判断是否是同一个人,本质上是一个度量学习问题,the key is to learn discriminative large-margin features.关键是找出特征之间有判别力的边界,这也是作者为什么要加m的原因,加大决策边界。

        对于开集问题,理论上是最大类内距离要小于最小类间距离,However, learning features with this criterion is generally difficult because of the intrinsically large intra-class variation and high interclass similarity that faces exhibit.通常这很难,数据集和现实情况中都不会有这么好的情况。怎么办?we propose to incorporate angular margin instead.加一个angular margin.通过优化A-softmax,决策区域变得更加分离,同时扩大类间margin和压缩类内的angular分布。

2.Deep hypershere embedding

2.1 revisiting the softmax loss

以一个二分类为例,softmax loss得到的后验概率为(此时是linear层+softmax,还未进入交叉熵):

其中x是输入的特征向量,W是linear层的权重,b是linear层的偏置,若预测为类1,则p1>p2,若预测为p2,则p1<p2。p的分母是一致,大小则取决于分子,都是e的指数函数,是递增的,因此属于那个类别取决于wx+b的值,此时决策边界就是(p1=p2)

 将上式中的Wx写成向量乘法分解的形式,则是

 此时的角是在W和x之间的角度。将权重进行归一化并且偏置为0,即

 p1和p2用的是同一个x,则最终结果只取决于角度,决策边界变成了

将W归一化(W模为1),偏置为0,就是上面的过程就是作者提到的modified softmax loss.它鼓励第i类特征比其他特征具有更小的角度 (更大的余弦距离),这使得W和特征之间的角度成为可靠的分类度量。因为cos是递减函数,类和类之间的角度越小,则两者之间余弦距离越大,就是同一类的扇形角越小,类间越紧凑。

上面讨论的是softmax的形式,下面给出softmax loss的形式:

 

Although we can learn features with angular boundary with the modified softmax loss, these features are still not necessarily discriminative. Since we use angles as the distance metric, it is natural to incorporate angular margin to learned features in order to enhance the discrimination power.至此,modified softmax loss的形式就给出了,即W归一化,b=0,它具备了学习angular边界特征能力,但是这些特征仍然不具有判别性,以前只是在欧式空间计算距离,现在变成了计算角度的边界。

3.2 Introducting angular margin to softmax loss

        这一节其实就是引入了lsoftmax,A-softmax比lsoftmax就多了w归一化和b=0这两个约束条件。From the previous analysis of softmax loss,we learn that decision boundaries can greatly affect the feature distribution, so our basic idea is to manipulate decision boundaries to produce angular margin.从上面的分析可以知道,在softmax loss中,决策边界可以极大的影响特征分布,因此作者的想法就是操作决策边界以产生angular margin。

        若属于类别1,则从modifed softmax loss中需要cos(角1)>cos(角2)才能正确分类x,如果我们要求cos(m*角1)>cos(角2),m是一个大于2的正整数,那么为了正确分类x,改怎么办?It is essentially making the decision more stringent than previous,because we require a lower bound of cos(angle1) to be larger than cos(angle2). The decision boundary for class 1 is cos(m*angle1)=cos(angle2).它本质上使决策比之前更加严格,因为它需要一个更低的边界,cos(angel1)并且大于cos(angle2),此时的决策边界变成了cos(m*angle1)=cos(angle2),这个地方和lsoftmax是完全一致的,就是我在loss侧把决策边界拉的更开了,让模型学的时候把类间距离拉开,这样类内也更加内聚了。下面两个式子就是A-softmax的表达式。

         A-softmax从决策边界解释,A-Softmax loss adopts different decision boundary for different class (each boundary is more stringent than the original), thus producing angular margin.A-softmax对不同的类别采用不同的决策边界,每个边界比原始边界更加严格,从未产生angluar margin.

        From original softmax loss to modified softmax loss, it is from optimizing inner product to optimizing angles.From modified softmax loss to A-Softmax loss, it makes the decision boundary more stringent and separated. The angular margin increases with larger m and be zero if m=1.上图是三个loss的决策边界公式,原始的softmax loss到modified softmax loss,从优化内积到优化角度,从modified softmax loss到A-softmax loss,使得决策边界更加严格和分离。

现在来解释一下这个图,linear层的输出设为2,即将所有的特征都放在二维平面上看,ace是原始2维平面的,bdf是映射到球面,黄和紫代表两个类别,ab是softmax loss的结果,可见分类边界并不好,学到的特征也无法通过angle来做分类,modified softmax loss可以通过角度来区别,A-softmax则划分的更好,可以进一步的通过angular margin来区别学到的特征。

3.3 hypersphere interpretation of A-softmax loss

作者给了个几何上的解释,A-softmax在超球面上就是一块一块类似圆的区域,投影到2d平台就是一个类似放射状的球形。

3.4 properties of A-softmax loss

给了两个证明,第一是二分类任务最小的m是:

 多分类任务最小的m是:

 作者建议m取4.

4.experiments

 这个图是作者在CASIA Webface数据集上选了6个类训练的A-softmax结果图,linear输出的特征维度是3(可视化到球面上),可以看到m越大,球面上对应的小圆越来越分离和紧凑,这对应了A-softmax的几何意义,第二行上,随着m的增加负样本和正样本之间的angle也越变越大。

整篇文章来说,意义上就是引入了w=1,b=0的lsoftmax在人脸识别的问题上,论文写的很好,A-softamx分析了具有普遍意义的规律,在角度上多一个m,增加类和类之间的决策边界,让loss学一个更难的决策边界,从而促使每个模型学习的每个类间距离越大,类内距离越小。

更新:实测a-softmax和l-softmax都很难收敛,在分类任务上相较于lmcl(large margin cosine loss)要收敛的多,不建议在工程上用这两个loss,尤其是现在有更好的loss的情况下(在解决类间距类内距问题上)。

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

sphereface:deep hypersphere embedding for face recognition 的相关文章

  • TypeError: unsupported operand type(s) for +: 'float' and 'decimal.Decimal'

    TypeError unsupported operand type s for 43 39 float 39 and 39 decimal Decimal 39 浮点型和双精度类型 相加报错 from decimal import Dec
  • 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 报错
  • ChkBugReport工具for Android

    关于这个工具 xff0c 找到的资料都比较旧了 xff0c 貌似是索尼移动的开发人员开发的 xff0c 2014年左右的文章比较多 xff0c 应该是那个时候索尼移动还是比较鼎盛的时期吧 现在已经很少看到关于这个工具的文章了 xff0c G
  • gitpush出现remote: Support for password authentication was removed on August 13, 2021.

    git push 报错 xff1a Username span class token keyword for span span class token string 39 https github com 39 span span cl
  • [AR论文阅读] Tracking Requirements for Augmented Reality

    论文作者 xff1a RONALD AZUMA年份 xff1a 1993论文主题 xff1a 阐述AR系统对6DoF跟踪性能的技术要求 要点 xff1a 三个核心要求 xff1a 高精度 xff0c 低延迟 xff0c 大范围 跟踪精度指标
  • 【STL十八】算法——不修改序列的操作(for_each、count、find、equal、search)

    STL十八 算法 不修改序列的操作 xff08 for each count find equal search xff09 一 简介二 头文件三 分类四 不修改序列的操作1 for each2 count count if3 find f
  • java 优化双重for循环

    首先我们要有两个对象分别是 学生信息 和 学生住宿信息 span class token keyword class span span class token class name Student span span class toke
  • Keras—embedding嵌入层的使用

    最近在工作中进行了NLP的内容 使用的还是Keras中embedding的词嵌入来做的 Keras中embedding层做一下介绍 中文文档地址 https keras io zh layers embeddings 参数如下 其中参数重点
  • Go语言学习15-基本流程控制

    基本流程控制 流程控制对比 Go 和 C 基本流程控制 1 代码块和作用域 2 if 语句 3 switch语句 3 1 表达式switch语句 3 2 类型switch语句 4 for 语句 4 1 for 子句 4 2 range 子句
  • Java 控制结构练习题

    练习1 某人有100 000元 每经过一次路口 需要交费 规则如下 1 当现金 gt 50000时 每次交5 2 当现金 lt 50000时 每次交1000 编程计算该人可以经过多少次路口 要求 使用while break方式完成 publ
  • 教妹学Java(十五):for循环详解

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

    题目 题目 输入两个正整数m和n 求其最大公约数和最小公倍数 比如 12和20的最大公约数是4 最小公倍数是60 说明 break关键字的使用 代码一 package l2 for 题目 输入两个正整数m和n 求其最大公约数和最小公倍数 比
  • lua_open 使用 luaJIT 返回 null

    使用最近的luaJITlua open回报null 常规 lua 库不会发生这种情况 lua State L lua open std cout lt lt L lt lt std endl Output 0x0 我怎样才能让 luaJIT
  • 防弹 Groovy 脚本嵌入

    我正在开发一个服务器应用程序 可以通过用户提供的 Groovy 脚本进行扩展 显然 我想确保这些脚本在非常严格的沙箱中运行 它们不能破坏核心应用程序代码或消耗太多资源以使服务器超载 我研究了各种可能性 最终的解决方案可能是这些的组合 在非常
  • 如何对 NetworkX 中创建的图 g 进行聚类?

    我正在尝试将聚类应用于数据集 在此之前 我必须将图划分为 n 个簇 但我不知道该怎么做 Suppose 边缘列表你的未加权的 and 不定向的 graph保存在文件edges txt中 您可以按照以下步骤对图的节点进行聚类 Step 1 g
  • 在c++中嵌入python:选择python版本

    我已经寻找问题的答案很长一段时间了 但我找到的答案似乎都不能解决我的问题 我正在尝试使用 Python 提供的功能 Python h Py xxx 函数等 将 Python 嵌入到我的 C 代码中 但是 我在让我的 C 程序调用正确的 Py
  • 插件“geocoder”使用已弃用的 Android 嵌入版本

    当我跑步时pub get 我面临以下错误 The plugin geocoder uses a deprecated version of the Android embedding To avoid unexpected runtime
  • Go 中创建复杂结构层次结构的惯用方法是什么?

    我正在用 Go 编写一个解释器 并且正在寻找存储 AST 的惯用方式 我阅读了 Go 编译器源代码 似乎他们使用带有空方法的接口来表示 AST 例如 我们有以下层次结构 Object Immovable Building Mountain
  • 初始化词汇表外 (OOV) 标记

    我正在为 NLP 任务构建 TensorFlow 模型 并且使用预训练的 Glove 300d 词向量 嵌入数据集 显然 有些标记无法解析为嵌入 因为它们没有包含在词向量嵌入模型的训练数据集中 例如罕见的名字 我可以用 0 向量替换这些标记
  • 以编程方式嵌入 Java h2 数据库

    目前我们使用HSQLDB http www hsqldb org 作为嵌入式数据库 但随着数据量的增长 我们会寻找内存占用更少的数据库 德比 JavaDB http developers sun com javadb 目前不是一个选项 因为

随机推荐

  • OpenFlow网络、OpenFlow交换机及OpenFlow协议的知识总结

    目录 OpenFlow起源与发展 OpenFlow网络 1 OpenFlow交换机 xff1a 2 FlowVisor xff1a 3 Controller xff1a OpenFlow交换机 分类 安全通道 流表 OpenFlow协议 x
  • 【高效运维】Jenkins之uni-app自动化部署

    目录 一 前言二 使用 Pipeline 创建任务1 创建一个流水线任务2 配置流水线 xff08 1 xff09 配置构建触发器 xff08 2 xff09 配置流水线 xff08 Pipeline script from SCM xff
  • Windows下安装Redis7.0.8

    目录 一 下载二 解压三 启动服务四 客户端连接测试五 把 redis 安装到服务1 安装2 启动服务3 停止服务4 卸载服务 一 下载 官网上没有 windows 版本的 redis 下载 xff0c 需要到 github 下载 xff1
  • 若依微服务版之集成Mybatis-Plus和Lombok

    目录 一 修改根目录 pom xml二 修改 ruoyi common core 的 pom xml三 去掉 nacos 配置文件中的 mybatis 配置 xff0c 添加 mybatis plus 配置四 添加配置类并注入五 注入类六
  • Windows下安装JDK

    目录 一 下载二 安装三 设置环境变量1 新增环境变量 JAVA HOME2 新增环境变量 CLASS PATH3 环境变量 PATH 添加变量值 四 验证 一 下载 下载链接 xff1a https www oracle com java
  • CentOS7下安装superset

    目录 一 前言二 安装 Miniconda1 下载2 安装3 加载环境变量配置文件4 取消激活 base 环境 三 创建 Python3 9 环境1 配置 conda 国内镜像2 创建 superset 环境并指定 Python3 93 激
  • Java--a++与 ++a 与 a=a+1 与a+=1

    a 43 43 等效 a 61 a 43 1 43 43 a 等效 a 43 61 1 计算顺序的区别 xff1a a 43 43 是先参加程序的运行再 43 1 xff0c 而 43 43 a则是先 43 1再参加程序的运行 举例 xff
  • 数据仓库系列文章二:浅谈企业数据仓库总线矩阵

    Kinball在 数据仓库工具箱 一书中 xff0c 详细阐述维度建模思想 xff0c 并给出维度建模的众多实践 维度建模的核心内容和建设过程在实践中已经被大家所熟知 xff0c 网上教程也很多 xff0c 本文不做赘述 本文重点谈一谈企业
  • Java中 List、Set、Map 之间的区别

    小博此篇记录了开发过程中常用的几种集合详解 xff0c 三者的区别对比均从IDEA相关层次图里面所得知 xff0c 基于JDK8 xff0c 如有错误欢迎批评指正 List 列表 List的元素以线性方式存储 xff0c 可以存放重复对象
  • DuiLib介绍及其消息处理剖析

    DirectUI技术 DirectUI意为直接在父窗口上绘图 Paint on parent dc directly 即子窗口不以窗口句柄的形式创建 windowless xff0c 只是逻辑上的窗口 xff0c 绘制在父窗口之上 微软的
  • xargs命令

    原作者地址 xff1a https www cnblogs com chyingp p linux command xargs html 感谢原作者 Linux基础 xff1a xargs命令 简介 xargs可以将输入内容 xff08 通
  • 为何HBase速度很快?

    为何HBase速度很快 xff1f HBase能提供实时计算服务主要原因是由其架构和底层的数据结构决定的 xff0c 即由LSM Tree Log Structured Merge Tree 43 HTable region分区 43 Ca
  • VirtualBox虚拟机不能ping通宿主机的解决方法

    解决VirtualBox虚拟机不能ping通宿主机的问题 问题描述 在VirtualBox虚拟中 xff0c 无法ping通宿主机 xff0c 宿主机可以ping通虚拟机 虚拟机的网络已经设置为 桥接网卡 xff0c 也可以正常上网 问题原
  • CMake 使用方法 & CMakeList.txt

    cmake 简介 CMake是一个跨平台的安装 编译 工具 可以用简单的语句来描述所有平台的安装 编译过程 他能够输出各种各样的makefile或者project文件 能测试编译器所支持的C 43 43 特性 类似UNIX下的automak
  • Hadoop安装目录

    root software hadoop 2 6 0 cdh5 15 1 etc hadoop 第一步骤 vi core site xml lt configuration gt lt property gt lt name gt fs d
  • 前端之浏览器

    你会不会和我一样 xff0c 开发了N年 xff0c 真要讲起浏览器 xff0c 发现自己一无所知 常用那几种浏览器测试 xff1f IE Safari Chrome Mozilla Firefox Opera 主流浏览器的内核有哪些 xf
  • Navicat远程连接Linux环境下MySQL(错误error:1045/1251/2003(10038)/2059)解决方案

    Navicat远程连接Linux环境下MySQL 错误error 1045 1251 2003 10038 2059 解决方案 心路历程 因为之后要学习有关数据库开发的课程 xff0c 我们需要部署云服务器并添加mysql功能 xff0c
  • MAX30102 血氧调试笔记

    一 血氧测量原理 1 1 PPG波形介绍 血氧饱和度 xff08 英语 xff1a Oxygen saturation xff09 xff0c 或称血氧浓度 xff0c 是指血中氧饱和血红蛋白相对于总血红蛋白 xff08 不饱和 43 饱和
  • HBase - Filter - 过滤器的介绍以及使用 | 那伊抹微笑

    博文作者 xff1a 那伊抹微笑 csdn 博客地址 xff1a http blog csdn net u012185296 itdog8 地址链接 http www itdog8 com thread 214 1 1 html 博文标题
  • sphereface:deep hypersphere embedding for face recognition

    SphereFace算法详解 AI之路 CSDN博客 sphereface 论文 xff1a SphereFace Deep Hypersphere Embedding for Face Recognition 论文链接 xff1a htt