转载请注明出处:

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. 开始写博客,学习Linq(2)

    linq的功能是什么? 它将极大地改变应用程序或组件处理数据的方式.这是第一个功能. LINQ to Objects.LINQ to SQL和LINQ to XML,是LINQ三大主要功能,当然LIN ...

  2. PostgreSQL的SQL语句中的双引号引发的问题

    最近开发一个WEB的ETL工具需要用到不同的数据源.第一次用POSTGRESQL发现一个双引号引发的问题: 标准的SQL是不区分大小写的.但是PostgreSQL对于数据库中对象的名字允许使用支持大小 ...

  3. gulp初探

    很多人都在用grunt和gulp,我现在连github都不用..为了说自己是个前端,还是搞搞gulp吧 nodejs很多人都会安装,这个不是问题 npm模块现在好像是自带的..我忘了.. 先全局安装下 ...

  4. python全栈开发day17-常用模块collections,random,time,os,sys,序列化(json pickle shelve)

    1.昨日内容回顾 1.正则表达式     # 正则表达式 —— str           # 检测字符串是否符合要求     # 从大段的文字中找到符合要求的内容 1).元字符 #. # 匹配除换行 ...

  5. P2246 SAC#1 - Hello World(升级版)

    P2246 SAC#1 - Hello World(升级版)典型的字符串dpf[i][j]表示a串匹配到i,b串匹配到j的方案数.if(a[i]==b[j])f[i][j]=f[i-1][j-1]+f ...

  6. 初探和实现websocket心跳重连(npm: websocket-heartbeat-js)

    提示:文章最下方有仓库地址 心跳重连缘由 websocket是前后端交互的长连接,前后端也都可能因为一些情况导致连接失效并且相互之间没有反馈提醒.因此为了保证连接的可持续性和稳定性,websocket ...

  7. git小白入门全攻略

    git是什么(写在前边的叨叨,就是给一点不懂的小白打个比喻,大佬请自行跳过) git在平时的开发中用的太频繁了,以至于我都不知道如何去形容它.囧. 假设我们开发的工作类似于图书整理,写的代码就是很多人 ...

  8. Python3基础系列——枚举类型大揭秘

    为什么使用枚举 枚举类型是定义常量的一种最优选择. 常量的广义概念是:不变化的量 对于常量的通俗比喻--如同大山不被轻而易举地改变 地球上的重力加速度到海枯石烂也会改变 人们使用的常量是时间不很漫长的 ...

  9. 潭州课堂25班:Ph201805201 爬虫基础 第十二课 点触验证码二 (课堂笔记)

    为上次代码添加 模拟人操作 的鼠标的移动轨迹 # -*- coding:utf-8 -*- # 斌彬电脑 # @Time : 2018/9/14 0014 上午 8:08 from selenium ...

  10. 工具使用-----Jmeter教程 简单的压力测试

    摘抄于http://www.cnblogs.com/TankXiao/p/4059378.html 以下是英文版的,中文版的也差不多的 Jmeter是一个非常好用的压力测试工具.  Jmeter用来做 ...