论文题目:《CosFace: Large Margin Cosine Loss for Deep Face Recognition》
论文地址:https://arxiv.org/pdf/1801.09414.pdf

1. 简介

该论文在2018年发表,主要是提出了新的人脸识别损失函数:LMCL(Large Margin Cosine Loss)。


       图 1:我们提出的 CosFace 框架。在训练阶段,使用不同类之间的增强边缘学习判别性的人脸特征。在测试阶段,首先将测试数据输入 CosFace 来提取人脸特征,然后再将这些特征用于计算余弦相似度分数以执行人脸验证和人脸辨识。

2. LMSL

原始的softmax loss如公式(1)所示:


       其中:N为训练的样本数,p_i为条件概率,C为类别总数,f_yi是当前类别权重W_j和feature x的乘积,bias置0。


       公式(2)在原来softmax的基础上对W和x做L2 Normalization,使其Norm为1,但是考虑到x的Norm太小会导致训练loss太大(softmax的值太小),故进行一次缩放,固定大小为S,所以修改后的loss如公式(3)所示,也称为NSL,Normalized version of Softmax Loss:

到目前为止,模型只是转换了学习空间而已,由最开始的优化内积变成了现在的优化角度,但是学习到的feature仍然只是separable,还没到达我们的目标:discriminative features。(NSL强调的是正确分类,也就是说能达到将类内距最小化,却无法同时做到将类间距最大化。)
       所以引入一个cosine margin来进行度量的约束,让当前样本所属的类别在减去一个m之后仍然属于这个类别,即:


       所以此时的loss变为LMCL,如公式(4)所示。

注意,margin的相减操作是针对cosine的,所以scale的缩放仍然放在最外层。

3. 不同loss函数的比较

1. Softmax Loss


       softmax loss的边界函数同时依赖权重向量的量级和权重与样本特征向量之间的角度,所以会导致决策区域有重复。

2. NSL,Normalized Softmax Loss


       归一化后的softmax,决策边界只与角度有关,所以分类决策面就是一条线。

3. A-Softmax


       A-Softmax是对角度theta进行约束,故呈现在cos(theta)的坐标中,是一个扇形页面分界区。但是A-Softmax的margin是不连续的,随着theta的降低,margin也在跟着减小,当theta等于0的时候margin甚至消失,另外,A-Softmax还需要解决非单调性问题。

4. LMCL,Large Margin Cosine Loss


       最后,这篇文章提出的LMCL是对cosine值加margin进行约束,所以他们的分界区是类似于SVM的margin area一样的一块矩形,且margin的宽度为(根号2乘以m)。


       上图为NSL和LMCL的比较。

4. 实验分析


图4:不同损失函数在 8 个带有 2D 特征的身份上的简化实验。第一行是将 2D 特征映射到欧几里德空间上,而第二行是将 2D 特征投射到角空间上。随着边缘值 m 增大,间隙变得越来越明显。
图 5:在 LFW 和 YTF 上,具有不同边缘参数值 m 的 CosFace 的表现(%)。

5. 为什么要进行feature Normalization

特征进行Feature Normalization之后,整体的结构就变成了cosine loss的形式。原始的softmax loss函数在进行优化的时候,不仅学习了角度的余弦值也隐式的学习了特征向量的Euclidean norm (L2-norm), L2 Norm在整个loss中是自适应的学习,就导致了cosine约束的变弱,如果限制所有的feature都是同样大小的norm,那么整个优化过程就只依赖于余弦值来获得有区分力的特征。
       根据happynear文章中的介绍,一般图像质量差的图片norm比较小,做了Normalization之后再进行反向传播的时候,求出的梯度就更大。这样网络就会更关注低质量的人脸图片。有点类似于hard sample mining。

6. 总结

在深度卷积神经网络(CNN)的发展的推动下,人脸识别已经取得了革命性的进展。人脸识别的核心任务涵盖人脸验证和人脸辨识,都涉及到人脸特征判别。但是,深度 CNN 的传统 softmax 损失通常缺乏判别能力。为了解决这个问题,最近有 Center Loss、L-Softmax、A-Softmax 等一些损失函数被提了出来。所有这些改进算法都基于同一个思想:最大化类间差异并且最小化类内差异。在这篇论文中,我们设计了一种全新的损失函数增强边缘余弦损失函数 (LMCL),从不同的角度实现了这一想法。具体而言,我们通过对特征向量和权向量的 L2 归一化,把 softmax 损失函数转化为余弦损失函数,这样做消除了半径方向的变化,并在此基础上引入了一个余弦边缘值 m 来进一步最大化所学习的特征在角度空间的决策边界。由此,通过归一化和余弦决策边界的最大化,可实现类间差异的最大化和类内差异的最小化。我们将我们使用 LMCL 训练得到的模型称为 CosFace。为了测试我们的方法,我们在 MegaFace Challenge、YouTube Faces (YTF) 和 Labeled Face in the Wild (LFW) 等最流行的公开域人脸识别数据集上进行了大量实验评估。我们在这些基准实验上实现了当前最佳的表现,这证明了我们的方法的有效性。

【人脸识别】Cos Face中的LMCL详解相关推荐

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

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

  2. 人脸识别引擎SeetaFaceEngine中Identification模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Identification模块用于比较两幅人脸图像的相似度,以下是测试代码: int test_recognize() {const std::strin ...

  3. 人脸识别引擎SeetaFaceEngine中Alignment模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Alignment模块用于检测人脸关键点,包括5个点,两个眼的中心.鼻尖.两个嘴角,以下是测试代码: int test_alignment() {std:: ...

  4. 人脸识别引擎SeetaFaceEngine中Detection模块使用的测试代码

    人脸识别引擎SeetaFaceEngine中Detection模块用于人脸检测,以下是测试代码: int test_detection() {std::vector<std::string> ...

  5. cs架构嵌入bs_车牌识别CS架构和BS架构详解

    原标题:车牌识别CS架构和BS架构详解 停车场管理系统中的系统架构分为BS架构和CS架构,两种架构各有优势,具体分析如下: C/S又称Client/Server或客户/服务器模式. B/S(Brows ...

  6. java做jsp问题_java/jsp中 中文问题详解

    java/jsp中 中文问题详解 更新时间:2006年10月13日 00:00:00   作者: 预备知识: 1.字节和unicode Java内核是unicode的,就连class文件也是,但是很多 ...

  7. Python中self用法详解

    Python中self用法详解 https://blog.csdn.net/CLHugh/article/details/75000104 首页 博客 学院 下载 图文课 论坛 APP 问答 商城 V ...

  8. 转 虫师的selenium借助AutoIt识别上传(下载)详解

    selenium借助AutoIt识别上传(下载)详解 2014-12-27 11:26 by 虫师, 755 阅读, 1 评论, 收藏,  编辑 AutoIt目前最新是v3版本,这是一个使用类似BAS ...

  9. Linux中fork()函数详解

    Linux中fork()函数详解 一.fork入门知识 一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事, ...

最新文章

  1. 注定一爆就完的ZAO ,为什么只是一剂社交毒药?
  2. import caffe失败 No module named caffe
  3. MAC地址、IP地址、ARP协议
  4. Android中Adapter的notifyDataSetInvalidated()和notifyDataSetChanged()的区别
  5. SpringBoot实战教程(3)| 整合Thymeleaf
  6. 堆积如山的Java面试简历,如何脱颖而出?写简历前你先要做这些
  7. 一加手机怎么root权限_一加手机怎么获取root权限?
  8. 一款备受九零后喜爱的独特界面,VC++屏幕保镖(锁屏程序)附源码
  9. 市场调研报告-全球与中国云产品生命周期管理(PLM)软件市场现状及未来发展趋势
  10. 关闭2345,搜狐等软件的弹窗
  11. 纯css实现鼠标悬浮、点击更改元素背景
  12. 前端程序员开发技术栈(前端干货)
  13. 在线教育直播系统 一对一在线直播平台解决方案
  14. java 在线excel_开源Excel在线协同工具
  15. 云呐|加强实验室固定资产设备在线信息化管理
  16. 怎么把图片按12345....顺序排列?
  17. STP的概念和基本内容
  18. java四则运算考试系统_小学生四则运算出题软件-基于java控制台的实现
  19. C#_文件读写常用类介绍
  20. JDBCTemplate奇葩问题

热门文章

  1. 计算机一级考试复习资料,全国计算机一级考试复习资料
  2. 遗传算法锦标赛选择java实现_java – 遗传算法锦标赛选择
  3. 计算机网络|UDP用户数据报服务
  4. 我是如何查找RFC官方资料的
  5. mysql库存自动更新_秒杀库存需不需要实时更新到mysql?
  6. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之驱动设计的思想:面向对象/分层/分离
  7. c语言的局部指针,C中局部变量指针问题
  8. “手把手教你学linux驱动开发”OK6410系列之01---模块编程
  9. java的四种修饰符访问权限
  10. Apache/Tomcat/JBOSS/Neginx/lighttpd/Jetty 的区别