转载请注明出处:

http://www.cnblogs.com/darkknightzh/p/8858998.html

论文:

Ring loss: Convex Feature Normalization for Face Recognition

https://arxiv.org/abs/1803.00130v1

理解的不对的地方请见谅

Ring loss将特征限制到缩放后的单位圆上,同时能保持凸性,来得到更稳健的特征。

该损失函数作为辅助的损失,结合Softmax或者A-softmax等损失函数,来学习到特征的模,因而唯一的超参数就是ring loss的权重。论文中在权重为0.01时效果最好。

论文中指出,arcface,cosface等在训练时,损失函数之前将特征进行了归一化,但网络实际上并未学习到归一化的特征。如下图所示,a为训练样本的特征分布,b为测试样本的特征分布,训练样本特征均集中在一定的夹角范围内。但是对于测试样本中模比较小的,其变化范围比较大。

令F为深度模型,x为输入图像,则F(x)为特征。可优化下面的损失函数:

$\min {{L}_{s}}(F(x))\text{  s}\text{.t}\text{. }{{\left\| F(x) \right\|}_{2}}=R$

R为归一化后特征的模。由于模的等式限制,导致实际上该损失函数是非凸的(这句话不太确定怎么翻译,反正是非凸)。

因而Ring loss定义如下:

${{L}_{R}}=\frac{\lambda }{2m}\sum\limits_{i=1}^{m}{{{({{\left\| F({{x}_{i}}) \right\|}_{2}}-R)}^{2}}}$

相应的梯度计算如下:

$\frac{\partial {{L}_{R}}}{\partial R}=-\frac{\lambda }{m}\sum\limits_{i=1}^{m}{({{\left\| F({{x}_{i}}) \right\|}_{2}}-R)}$

$\frac{\partial {{L}_{R}}}{\partial F({{x}_{i}})}=\frac{\lambda }{m}(1-\frac{R}{{{\left\| F({{x}_{i}}) \right\|}_{2}}})F({{x}_{i}})$

上式中R为特征模的长度,类似于cosface及arcface中使用到的s,只不过s是提前设定的(将特征的模归一化,并放大到该值),如30,而此处的R是通过训练学到的。m为batchsize, 为Ring loss的权重。实际使用时,可以结合softmax loss/A-softmax loss。Softmax/A-softmax loss为主损失函数,Ring loss为辅助损失函数。论文中 为0.01时,训练效果最好。

下图是一个简单的例子,其中绿色点为初始化的点,蓝色的为目标类别,红色的为经过20次训练后,特征的分布。a为使用softmax的结果;b为使用ring loss,权重为1;c为使用ring loss,权重为10。可见,使用softmax后,特征收敛到比较大的范围。由于使用ring loss时,设置的特征模长为1,因而b能收敛到比较合理的位置(特征较集中)。当权重太大时,softmax起的作用很小,导致特征收敛到单位圆上,如c所示。因而需要合理的权重来平衡辅助损失函数ring loss和主损失函数。

论文中在MsCeleb1M(31000人,3.5M图像)上训练64层的resnet网络,性能比较好。

我这边在pytorch中进行了实现,初始化时R为0-30之间的随机数,在casia上训练resnet20的网络,效果稍微好于直接使用softmax训练后的模型(softmax的dir78%,ring loss的dir:不到80%。这两个模型均使用了batchnorm,否则dir没有这么高。。。)。

(原)Ring loss Convex Feature Normalization for Face Recognition的更多相关文章

  1. 深度挖坑:从数据角度看人脸识别中Feature Normalization,Weight Normalization以及Triplet的作用

    深度挖坑:从数据角度看人脸识别中Feature Normalization,Weight Normalization以及Triplet的作用 周翼南 北京大学 工学硕士 373 人赞同了该文章 基于深 ...

  2. A Theoretical Analysis of Feature Pooling in Visual Recognition

    这篇是10年ICML的论文,但是它是从原理上来分析池化的原因,因为池化的好坏的确会影响到结果,比如有除了最大池化和均值池化,还有随机池化等等,在eccv14中海油在顶层加个空间金字塔池化的方法.可谓多 ...

  3. 【CV论文阅读】+【搬运工】LocNet: Improving Localization Accuracy for Object Detection + A Theoretical analysis of feature pooling in Visual Recognition

    论文的关注点在于如何提高bounding box的定位,使用的是概率的预测形式,模型的基础是region proposal.论文提出一个locNet的深度网络,不在依赖于回归方程.论文中提到locne ...

  4. Paper reading: High-Fidelity Pose and Expression Normalization for Face Recognition in the Wild(HPEN)

    1. Introduction 人脸识别受到各种因素影响,其中最重要的两个影响是 pose 和 expression, 这两个因素会对 intra-person 变化产生极大的影响, 有时候甚至会超过 ...

  5. Large Margin Softmax Loss for Speaker Verification

    [INTERSPEECH 2019接收] 链接:https://arxiv.org/pdf/1904.03479.pdf 这篇文章在会议的speaker session中.本文主要讨论了说话人验证中的 ...

  6. (转载)人脸识别中Softmax-based Loss的演化史

    人脸识别中Softmax-based Loss的演化史  旷视科技 近期,人脸识别研究领域的主要进展之一集中在了 Softmax Loss 的改进之上:在本文中,旷视研究院(上海)(MEGVII Re ...

  7. 人脸识别的LOSS(上)

    超多分类的Softmax 2014年CVPR两篇超多分类的人脸识别论文:DeepFace和DeepID Taigman Y, Yang M, Ranzato M A, et al. Deepface: ...

  8. 【原】Coursera—Andrew Ng机器学习—编程作业 Programming Exercise 1 线性回归

    作业说明 Exercise 1,Week 2,使用Octave实现线性回归模型.数据集  ex1data1.txt ,ex1data2.txt 单变量线性回归必须实现,实现代价函数计算Computin ...

  9. [论文理解]Focal Loss for Dense Object Detection(Retina Net)

    Focal Loss for Dense Object Detection Intro 这又是一篇与何凯明大神有关的作品,文章主要解决了one-stage网络识别率普遍低于two-stage网络的问题 ...

随机推荐

  1. 使用vmware提示无法打开内核设备 \\.\Global\vmx86: 系统找不到指定的文件

    问题描述 打开虚拟机时候提示 “vmware没有正常关闭,再次打开使用时蓝屏,在安全模式下再次打开不会蓝屏,但提示“无法打开内核设备 \\.\Global\vmx86: 系统找不到指定的文件,你想要安 ...

  2. c3p0和QueryRunner的结合使用,让开发更加简便

    1:DBUtils中的QueryRunner的使用: 1.1:QueryRunner中提供了对SQL语句操作的api: 1.2:主要有三个方法: 1.2.1:query():用于执行select(查询 ...

  3. 表达式树ExpressionTrees

    简介 表达式树以树形数据结构表示代码,其中每一个节点都是一种表达式,比如方法调用和 x < y 这样的二元运算等.你可以对表达式树中的代码进行编辑和运算.这样能够动态修改可执行代码.在不同数据库 ...

  4. json文本和json对象之间的转换

    在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如: //JSON字符串: var str1 = '{ ...

  5. 谈谈java多线程(一)

    其实很早就想写一些java多线程方面的文章,只是奈何这东西看着简单,但要真要理解和正确使用可能还需要花费一定的精力,虽然平时的工作中会用到这方面的知识,可是更多的只是为了完成工作,至于详细的东西,也没 ...

  6. SSL/TLS中间人攻击

    准备:kali.xp kali ip:192.168.14.157 目标ip:192.168.14.158 目标网关:192.168.14.2 使用工具:ettercap.sslstrip.arpsp ...

  7. NetworkX

    常用网站: 官方文档 Github (latest development) NetworkX官方介绍: ======== NetworkX (NX) is a Python package for ...

  8. vuex数据持久化存储

    想想好还是说下vuex数据的持久化存储吧.依稀还记得在做第一个vue项目时,由于刚刚使用vue,对vue的一些基本概念只是有一个简单的了解.当涉及到非父子组件之间通信时,选择了vuex.只是后来竟然发 ...

  9. String、StringBuffer和StringBulder

    String:不可改变的Unicode字符序列. 池化思想,把需要共享的数据放在池中,用一个存储区域来存放一些公用资源以减少存储空间的开销. 在String类中,以字面值创建时,会到Java方法空间的 ...

  10. Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(二)--node解析与环境搭建

    前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战.写教程一方面在自己写的过程中需要考虑更多的东西,另一方面希望能对node入门者有 ...