参考博客:

L-margin softmax loss:https://blog.csdn.net/u014380165/article/details/76864572

A-softmax loss:https://blog.csdn.net/u011808673/article/details/80491361

AM-softmax loss:https://blog.csdn.net/fire_light_/article/details/79602310

arcface:https://blog.csdn.net/Fire_Light_/article/details/79602705

softmax loss:

N是样本的数量,i代表第i个样本,j代表第j个类别,fyi代表着第i个样本所属的类别的分数

fyi是全连接层的输出,代表着每一个类别的分数,

   每一个分数即为权重W和特征向量X的内积

每个样本的softmax值即为:

L-softmax loss:

假设一个2分类问题,x属于类别1,那么原来的softmax肯定是希望:

也就是属于类别1的概率大于类别2的概率,这个式子和下式是等效的:

large margin softmax就是将上面不等式替换为:

m是正整数,cos函数在0到π范围又是单调递减的,所以cos(mx)要小于cos(x)。通过这种方式定义损失会逼得模型学到类间距离更大的,类内距离更小的特征。

从几何的角度看两种损失的差别:

设置为cos(mx)后,使得学习到的W参数更加的扁平,可以加大样本的类间距离。

Large-Margin Softmax的实验效果:

A-softmax loss

A-softmax loss简单讲就是在large margin softmax loss的基础上添加了两个限制条件||W||=1和b=0,使得预测仅取决于W和x之间的角度。

softmax的计算:

可以写成

若引入两个限制条件,

decision boundary变为,只取决于角度了

则损失函数变为:

在这两个限制条件的基础上,作者又添加了和large margin softmax loss一样的角度参数,使得公式变为:

AM-softmax

在A-softmax的基础上,修改Cos(mθ)为一个新函数: 

与ASoftmax中定的的类似,可以达到减小对应标签项的概率,增大损失的效果,因此对同一类的聚合更有帮助

然后根据Normface,对f进行归一化,乘上缩放系数s,最终的损失函数变为:

这样做的好处在于A-Softmax的倍角计算是要通过倍角公式,反向传播时不方便求导,而只减m反向传播时导数不用变化

Asoftmax是用m乘以θ,而AMSoftmax是用cosθ减去m,这是两者的最大不同之处:一个是角度距离,一个是余弦距离。

之所以选择cosθ-m而不是cos(θ-m),这是因为我们从网络中得到的是W和f的内积,如果要优化cos(θ-m)那么会涉及到arccos操作,计算量过大。

arcface

分类正确label的值为,cos函数在(0,1)内是单调递减的,加上m,会使该值变得更小,从而loss会变得很大。

这样修改的原因:角度距离比余弦距离在对角度的影响更加直接

转载于:https://www.cnblogs.com/k7k8k91/p/9777148.html

人脸识别-arcface损失函数相关推荐

  1. 【人脸识别】千变万化的人脸识别 REID损失函数总结

    如果有不对的地方,欢迎指正!!!只是个人理解. 一.引言 人脸识别,REID都是经过卷积神经网络提取图像的特征向量,再进行比对的过程.神经网络的选择,可以选择经典的或者当下流行的,这里主要总结下千变万 ...

  2. 使用Delphi接入虹软人脸识别ArcFace,开发人脸库服务器

    利用虹软 SDK 开发局域网人脸库服务器 一.选择开发平台 以前做单位食堂人脸识别就餐时,会用到在线人脸识别,终端设备必须并入互联网,单位对人脸信息比较敏感,客户会要求提供内部网人脸库使用. 利用人脸 ...

  3. 人脸识别 ArcFace 实现

    为什么用ArcFace 前一篇文章已经提到了问什么不能直接用softmax loss做损失,是因为类与类之间交界处不容易分开,而center loss能把他分开是因为缩小了类内距,就是给每一个中心点, ...

  4. 【人脸识别】MTCNN + Arcface全流程详解 Pytorch代码 损失函数发展

    目录: 人脸识别介绍 损失函数发展 Softmax loss Center loss Triplet loss L-softmax loss SphereFace(A-Softmax loss) Co ...

  5. 人脸识别中的margin损失函数

    用于人脸识别的损失函数,有Softmax,Contrastive Loss,Triplet Loss,Center Loss,Norm Face,Large-Margin Loss,A-Softmax ...

  6. 【人脸识别】arcface详解

    论文题目:<ArcFace Additive Angular Margin Loss for Deep Face Recognition > 论文地址:https://arxiv.org/ ...

  7. 人脸识别损失函数梳理与分析/相关方法整理

    人脸识别损失函数梳理与分析 人脸识别损失函数疏理与分析 人脸识别中Softmax-based Loss的演化史 人脸识别:损失函数总结 补充: 1.facenet-TripletLoss 注意点: 样 ...

  8. 『人脸识别系列教程』1·目录与概述

    原文出处:https://zhuanlan.zhihu.com/FaceRec 目录 本系列专栏将解析基于深度学习的人脸识别相关的关键性论文,从2014年DeepFace开始到最新的算法.还介绍了用于 ...

  9. 虹软-人脸识别SDK的使用

    1.登录虹软开发者平台,进行注册. 官网:https://ai.arcsoft.com.cn/ucenter/resource/build/index.html#/login 注册成功之后,选择视觉开 ...

最新文章

  1. 基于XMPP协议的aSmack源码分析
  2. MFC动态调用DLL
  3. java第十二章总结
  4. php html asp .net iis tomcat,iis+apache+tomcat 整合共享80口 支持ASP .NET JSP PHP全能WEB服务...
  5. MAC 更新 PHP 指南 以及 PHP常用命令示例
  6. 01_Influxdb1.7.7的安装配置启动
  7. Netty 5用户指南
  8. findbugs 接口文档_Java代码审查工具findbugs的使用总结
  9. java的resultset的next_java中resultset获取的是两个数据库,它的next()方法是怎么的
  10. jquery添加事件
  11. Linux环境下编写C程序
  12. mysql5.7bka_mysql 5.7中的MRR和BKA算法
  13. API开创基底细胞癌手术切缘采集,改善过度医疗现状
  14. TDA2x软件框架分析
  15. 零基础java学习---温故而知新
  16. 如何关闭Windows自动更新
  17. jemalloc 内存分配器 是什么
  18. 从Alignment 和 Uniformity的角度理解对比表征学习
  19. Linux的文件操作命令
  20. Linux卡死的解决方法 solution of server stuck or freezes

热门文章

  1. JAVA冒泡的介绍与使用
  2. 如何获得查新检索报告?
  3. TABLE functions
  4. python 打卡记录代码_python实现自动打卡的示例代码
  5. Android-MianShi
  6. 几个指标(同比,环比,定期比)(转载)
  7. Yahoo军规-前端性能优化
  8. 【计算机网络】实验2:常见网络命令操作
  9. 进入空气稀薄地带,《朗读者》再现阿里云10年技术自主研发
  10. 计算机的大管家教学反思,第二课 计算机的“大管家”.doc