转自:http://blog.csdn.net/sinat_27614125/article/details/71104183?locationNum=16&fps=1 略删改。

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的欧式距离,请注意左图中心位置f1,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的是一个正的数值主要目的防止被除数为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  是很紧的。

下图给出解决办法,就是将特征和权值归一化到l,而不是1.

4,重新设计度量学习(注意,这里实际上是将下面两种损失函数的欧式距离评价,优化成归一化特征和权值的方式,使其在分类任务中也可以做识别任务)

补充:constrastice loss

Contrastive Loss (对比损失)

在caffe的孪生神经网络(siamese network)中,其采用的损失函数是contrastive loss,这种损失函数可以有效的处理孪生神经网络中的paired data的关系。contrastive loss的表达式如下:

其中,代表两个样本特征的欧氏距离,y为两个样本是否匹配的标签,y=1代表两个样本相似或者匹配,y=0则代表不匹配,margin为设定的阈值。

这种损失函数最初来源于Yann LeCun的Dimensionality Reduction by Learning an Invariant Mapping,主要是用在降维中,即本来相似的样本,在经过降维(特征提取)后,在特征空间中,两个样本仍旧相似;而原本不相似的样本,在经过降维后,在特征空间中,两个样本仍旧不相似。

观察上述的contrastive loss的表达式可以发现,这种损失函数可以很好的表达成对样本的匹配程度,也能够很好用于训练提取特征的模型。当y=1(即样本相似)时,损失函数只剩下,即原本相似的样本,如果在特征空间的欧式距离较大,则说明当前的模型不好,因此加大损失。而当y=0时(即样本不相似)时,损失函数为,即当样本不相似时,其特征空间的欧式距离反而小的话,损失值会变大,这也正好符号我们的要求。

这张图表示的就是损失函数值与样本特征的欧式距离之间的关系,其中红色虚线表示的是相似样本的损失值,蓝色实线表示的不相似样本的损失值。

triplet loss 请参考FaceNet论文。

下图时经过归一化

人脸识别之人脸验证(五)--NormFace相关推荐

  1. 人脸识别:人脸数据集

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 人脸识别功能实现的原理介绍与算法介绍 人脸识别:人脸数据集 A ...

  2. 基于insightface实现的人脸识别和人脸注册

    本教程的人脸识别是使用的是insightface库进行开发的,该库使用的框架为ONNX,使用的是Anaconda环境. 代码地址:点击下载 安装环境 安装insightface ,安装命令如下. py ...

  3. Android 百度人脸识别、人脸采集、文字识别(身份证),人证对比

    Android 百度人脸识别.人脸采集.文字识别(身份证),人证对比 Android 拍照.图片压缩(兼容7.0) 由于公司的项目赶在 "某某打车" 事件期间,所以你懂得.老板说要 ...

  4. 人脸识别,人脸对比技术及案例实现方案

    人脸识别,人脸对比技术及案例实现方案 一.各个人脸识别公司.系统简介 1.1 虹软 1.2 Face++旷视 1.3 云脉 1.4 腾讯AI 1.5 1MB轻量级人脸检测模型 1.6 SeetaFac ...

  5. python人脸识别、人脸关键点检测、性别检测

    python人脸识别.人脸关键点检测.性别检测 文章目录 根据人脸预测年龄性别和情绪 (python + keras)(三) 一款入门级的人脸.视频.文字检测以及识别的项目. age-gender-e ...

  6. 调用远程摄像头进行人脸识别_人脸识别技术植入手机APP

    随着物联网技术的日益成熟,我们看到已经有很多APP用到了人脸识别技术,特别是金融和互联网领域的应用纷纷加入了人脸识别.表示,人脸识别技术基于人的脸部特征信息进行身份识别,为互联网金融等行业解决在线多维 ...

  7. android 人脸识别边框_android Arcface人脸识别框/人脸抓拍框/人脸追踪框

    为什么要改? 先来看看sdk demo中提供的人脸框样式,这个框看上去并不是非常美观(个人觉得) 再看看下面这个框是不是就要顺眼一点 怎么换? 先来看看原始的画法: @Override public ...

  8. Android自定义人脸识别框,android自定义虹软人脸识别框/人脸抓拍框/人脸追踪框...

    有一两个月没有更新博客了,最近一直在忙人脸识别的项目,先将项目中更改虹软人脸框的方法抽取出来,希望对大家有所帮助. 尊重原创,转载请注明出处: http://blog..net/qq137722697 ...

  9. android 人脸识别边框_android自定义Arcface人脸识别框/人脸抓拍框/人脸追踪框

    为什么要改? 先来看看sdk demo中提供的人脸框样式,这个框看上去并不是非常美观(个人觉得) 在这里插入图片描述 再看看下面这个框是不是就要顺眼一点 在这里插入图片描述 怎么换? 先来看看原始的画 ...

  10. Python | 人脸识别系统 — 人脸比对 代码部分

    本博客为人脸识别系统的人脸比对代码解释 人脸识别系统博客汇总:人脸识别系统-博客索引 项目GitHub地址:Su-Face-Recognition: A face recognition for us ...

最新文章

  1. php查找多个字符串替换,php 替换多个字符串
  2. springboot事务回滚源码_Spring Boot中的事务是如何实现的
  3. 【PMP】知识点总结20170528
  4. 漫画:优秀的程序员具备哪些属性?
  5. ABAP--Smart Forms多语言翻译
  6. 计算机d盘无法格式化,电脑D盘无法格式化怎么办 D盘无法格式化问题解决办法...
  7. 2018蓝桥杯省赛---java---B---1(第几天)
  8. [html] 跨域通信有哪些方式?
  9. 手机客户端应用功能测试方法总结
  10. python后端数据发送到前端_python后端开发使用flask接收前端数据,处理后返回结果...
  11. MYSQL锁机制---MyISAM表锁
  12. 麻省理工18年春软件构造课程阅读06“规格说明”
  13. python尺与米的转换_在线长度换算-公里换算-米换算-纳米换算-长度单位在线换算工具...
  14. java 开根号_Java实现开根号运算(不使用数组和String)
  15. 线性表_顺序存储结构和链式存储结构的优缺点比较
  16. 证件照缩小为20k大小
  17. 【光学】基于matlab相互垂直的光波叠加仿真【含Matlab源码 2071期】
  18. ATL SERVER
  19. 高版本linux安装gamit,Ubuntu Linux下安装GAMIT10.6
  20. 计算机c盘用户爆满,电脑C盘爆满怎么办 这招让你一键清除十几G内存_TOM科技

热门文章

  1. 吴孟达版《高等工程数学》第四章+matlab实践
  2. AXI CDMA Linux user space example on Zynq UltraScale+ RFSoC
  3. SecureCRT + SecureFX 8.1 Bundle安装注册教程(完美版)
  4. 《程序员练习生》第7期 珍爱生命远离编程
  5. Android Studio DeviceFileExplorer 看不到文件列表问题
  6. 表格一分为二html,jsp中,td单元格怎么斜着一分为二
  7. 常用的css特效(一)
  8. 分布式多通道相机同时拍照系统
  9. 介绍一些老鸟知道,新鸟不知道的技巧
  10. 浪涌-雷击浪涌的防护