NORMFACE:L2 hypersphere embedding for face Verification

2023-05-16

https://github.com/happynear/NormFace
本文的思想很简单,就是通过验证研究正则化的本质,来设计网络结构。
提取问题:
1,为什么用classificatin  loss,尤其是softmax loss训练cnn  特征的时候,特征正则化这么有效果?
2,为什么用softmax loss  来直接优化余弦相似度会导致 网络不能收敛?
3,怎么优化余弦相似度?
3.1   L2 正则化层。
现象:下图就是LeNET的特征减少到2个点,然后选择10000个2维的特征点投影到平面。
problem: 从左边的图中可以看见,按照欧式距离的度量方法来计算,那么f1和f2的欧式距离是小于f2和f3的欧式距离,naive  idea,f1和f2的相似度远大于f2和f3 的相似度,但是事实上不是如此。所以能不换个度量方式呢?比如余弦的角度作为一种不错的度量方式,也是很多先前的工作采用的度量方式。这样就存在一个gap,也就说在test的时候采用正则化的方式(余弦公式),但是train 的时候就没有采用。
identity:上面是直观的说明这个问题,那么从数学的角度解释上面现象的本质。1:softmax是本质上就是在做最大化似然函数的操作(文中另有公式证明在特征正确分类的情况下,该特征的权值增大将不会影响,分类结果。,因此softnax 的特征分布就是radial 形状的),但是这个属性我们并不需要,因此就需要normalization,来减少radial形状的影响;2:考虑bias term 的影响,并且考虑该是否增加。比较一下下面两张图,观察做了正则化前后的特征分布的变化,很显然,在做了正则化之后,特征点就分布到整个空间。
solution:现在需要做的事情就是train和test的时候给设计特征的正则化的操作。所以模型设计一个正规化层。定义就如下:
其中e的是一个正的数值主要目的就是X是0向量,其中x既可以代表f,也可以代表W的一组参数。在反向传播的过程中,关于x的梯度 如下:

 
推到就省略了。下次补上。
 
我个人觉得上面文中有些推导存在逻辑上面问题。
3.3 模型正则化后,不能模型不能收敛的问题。
problem:通过上面知道normalization layer,我们将直接优化余弦相似度:
 
但是作者实验后发现,在经过几千部的迭代之后, 模型的loss 减少的很小,而且收敛到一个很大的数值。
wy: 最主要的原因是经过正则化之后,d的数值范围是在[-1,1]之间,然而一般情况下(就是不做正则化),他这个数值停留在[-20,20]或者[-80,80]的取值范围内部。这个小范围的问题将会组织概率P接近1,举个极端的例子,的数值很小,比如当n=10的时候,P=0.45;当n=1000的时候,p=0.007,即使其他的样本在他的对立面。既然softmax loss 针对the  groud  truth 标签的梯度是 1-  Py,模型将经常尝试给大的梯度给完好分类的样本,但是那些比较不容易分类的样本可能不能得到大的梯度。(这又是为什么呢?)
定理:

 假设数据集的每一类都是拥有相同的样本,而且所有样本都是正确分类。如果我们能正则化特征和权值,softmax loss 将会有一个比更加小的bound,如上。
这个bound 预示了一个问题,如果我仅仅正规化特征和权值到1,softnax loss 在训练数据也将会陷入比较大的数值。举个真实的例子,我们在casia-webface dataset 上面训练模型。loss 将会从9.27降到8.5,但是loss of bound 是8.27,这个就非常接近真实的数值。也预示着bound  是很紧的。

 
不解释,自己看上面把。

 4,重新设计度量学习。
 


 

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

NORMFACE:L2 hypersphere embedding for face Verification 的相关文章

  • python 人脸识别和手势识别应用(face++)开发

    一 基础认识 本项目使用的是face 43 43 平台 xff0c 人脸识别 43 手势识别双确认显示 python编程 xff0c 代码简介 xff0c 方便扩展 该项目适用于Windows系统和Linux系统 xff0c 但必须安装相应
  • 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
  • Tips for Qt

    Based on Qt 5 14 0 Qt Creator 4 11 0 1 在UI设计界面添加控件后 xff0c 要编译一下 xff0c 再到编辑界面写代码 xff0c 否则系统不识别新添加的控件 2 多看帮助文档 xff0c 好多开发时
  • Arduino for ESP32-----ESP-NOW介绍及使用

    ESP NOW ESP NOW介绍ESP NOW支持以下特性ESP NOW技术也存在以下局限性获取ESP32的MAC地址ESP NOW单向通信 One way communication ESP32单板间的双向通信一对多通信 xff08 一
  • 翻译-Frustum PointNets for 3D Object Detection from RGB-D Data

    Frustum PointNets for 3D Object Detection from RGB D Data 摘要介绍相关工作从RGB D数据中检测三维物体基于前视图图像的方法 xff1a 基于鸟瞰图的方法 基于3D的方法 点云的深度
  • stable diffusion实践操作-embedding(TEXTUAL INVERSION)

    系列文章目录 本文专门开一节写图生图相关的内容 在看之前 可以同步关注 stable diffusion实践操作 文章目录 系列文章目录 前言 1 embeddding的功能 2 如何去下载 https civitai com models
  • 为什么想来我们公司工作?- 面试常见问题解析

    在面试的过程中 你的面试官可能会问你这样一个问题 你为什么想在我们公司工作 这是面试最常见的问题之一 这个问题看似简单 但回答时一定要提前有所准备 一般来说 面试官在面试时提问这个问题是希望通过应聘者的回答来衡量应聘者对他们公司的感兴趣程度
  • 让 AI 真正读懂人类语言,5分钟搞懂 word embedding 技术

    大家好啊 我是董董灿 在学习自然语言处理 NLP Natural Language Processing 时 最先遇到的一个概念 可能就是词嵌入 word embedding 了 词嵌入 是让AI真正理解人类自然语言的技术 看完本文再回过头
  • 14.CAPE:Camera View Position Embedding for Multi-View 3D Object Detection笔记

    14 CAPE Camera View Position Embedding for Multi View 3D Object Detection CAPE 用于多视图三维物体检测的相机视图位置嵌入 CVPR2023 文章结构 摘要 1 引
  • Dlib库中实现正脸人脸关键点(landmark)检测的测试代码

    Dlib库中提供了正脸人脸关键点检测的接口 这里参考dlib examples face landmark detection ex cpp中的代码 通过调用Dlib中的接口 实现正脸人脸关键点检测的测试代码 测试代码如下 referenc
  • matlab for循环坑

    matlab 用 for 嵌套循环遍历数组时 可能有 bug matlab octave 环境 linux Matlab R2018a 1 windows GNU Octave version 5 2 0 以 for x vector 的形
  • torch rnn网络中,embedding.weight会反向更新吗?

    结论 在 PyTorch 中 如果在训练中使用了 embedding 层 那么 embedding weight 会被反向更新 这是因为在训练过程中 模型的参数会根据损失函数的反向传播进行更新 而 embedding 层的参数 embedd
  • 在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
  • Golang 嵌入结构类型

    我有这些类型 type Value interface type NamedValue struct Name string Value Value type ErrorValue struct NamedValue Error error
  • android:使用ActivityGroup嵌入活动

    我正处于构建应用程序的概念化 设计阶段 但遇到了一些障碍 本质上 我正在寻找一种将一个活动嵌入到另一个活动的 UI 中的方法 类似于 TabHost TabActivity 的方式 屏幕顶部将有一个窗口 其中包含其他活动 其下方将是独立于上
  • 如何在张量流中使用非常大(>2M)的词嵌入?

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

    是否可以将 Lua 嵌入到 Python 3 x 中 如果是这样 我如何在我的 Python 程序中运行和执行 Lua 脚本 语言之间的交互有多好 例如 Lua 是否可以访问 Python 的所有变量和类以及 Python 是否可以访问 L
  • 如何在 Angular 模板中嵌入 GitHub gist?

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

随机推荐