当前位置: 首页 > news >正文

【人脸识别】Partial-FC:让你在一台机器上训练1000万个id人脸数据集成为可能!

论文题目:”Killing Two Birds with One Stone: Efficient and Robust Training of Face Recognition CNNs by Partial FC“ -CVPR 2022
代码地址:https://arxiv.org/pdf/2203.15565.pdf
代码地址:https://github.com/deepinsight/insightface/tree/master/recognition/arcface_torch

1.背景

分布式训练的问题:

数据并行:将训练数据划分给每台机器,每个结点拥有完整的模型,然后将每个结点反向传播得到的梯度进行聚合,将聚合后的梯度再分发给各个结点更新参数,缺陷是需要在每个结点间传播梯度信息,因此通信开销会非常大。
模型并行:在人脸识别的场景下,假如 FC 层权重为 W ,d 是特征向量的维度,C 是人脸类别数量,那么其实 W 的第 i 列可以视作第 i 类的类中心。模型并行是将 W 按类别划分给各个结点,假如有 k 个结点,将 C 个类中心划分给每个结点,每个结点拥有 C/k 个类中心。那么需要计算样本的softmax loss时,将每个结点的样本特征先进行all_gather(即将每个结点的所有样本特征汇聚在一起再分发给所有结点)操作,这样每个结点就拥有所有样本特征,然后每个结点计算样本与其拥有的类别中心logit,然后再求指数,即可得到softmax的分母部分和,再对这个部分和进行all_reduce(将每个结点的某个tensor聚合在一起计算一个新的tensor再分配给各个结点),这样每个结点就拥有的完整的softmax的分母,即可计算每个样本的softmax loss。然后因为特征的梯度牵涉到了每个类中心,因此还需要将关于特征的梯度进行all_reduce,然后梯度在各自结点反向传播。这样需要通信的就是一个batch的特征+分母的部分和+特征的梯度。当C 增大时,可以通过增加结点数量 k 保持 C/k 恒定,但是每个结点由于需要保存所有样本,需要存储的logit的数量是 Nk * C/k > = N * C , N 是batch size的大小,而 C 往往是十万、百万的量级,因此随着 C 的增大,单个结点的显存总会捉襟见肘。

数据的问题:

长尾分布(long-taied distribution):即类别数量不平衡,少数类别(称为head class)拥有大部分样本,大多数类别(称为tail class)只有少数样本。这样优化时会更关注负类,tail class的类中心会被远离负类中心,偏离它所代表的类。
类间冲突(inter-class conflict):同一个人被分到了不同类里,例如某人既有一张图片label是0类,也有另一张图片label是1类。这样优化时肯定会发生冲突。

–SST [11] and DCQ [21] directly abandon the FC layer and employ a momentum-updated network to produce class weights. However, the negative class number is constrained to past several hundred steps and two networks need to be maintained in the GPU.

2.方法

        既然logits的数量是 N*C ,作者提出的解决单个结点显存问题的方法也很简单,减少 C —— 随机采样类别中心,称为Partial FC。具体来说,先考虑只有单个结点的情况,每次迭代会随机采样 N 个样本(batch),那么只保留这 N 个样本对应的类别中心(称为正类别中心),然后随机采样负类别中心,再计算softmax loss;而对于模型并行的多结点的情况,首先各个结点交换batch样本的信息,保留所有正类别中心,例如第零个结点的数据的类别有1,而类别中心是1、2、3、4,而第一个结点数据的类别是2,那么第零个结点应该保留1、2这两个类别中心,然后再随机采样负类别中心。通过PFC,将减少空间开销,加速训练,同时模型性能也没有显著变化,并且也能改善长尾分布与类间冲突的问题。

softmax loss(cosface、arcface等形式与其基本相同):
在这里插入图片描述

loss关于特征向量 xi 的导数(希望 xi 接近正类别中心W+):
在这里插入图片描述

类别中心 Wj 更新公式(希望Wj接近正样本)
在这里插入图片描述
softmax loss 缺点:

1)The first limitation is the gradient confusion under inter-class conflict. (第一个局限是类间冲突下的梯度混淆)
2)The second limitation is that centers of tail classes undergo too many passive updates. (第二个局限是尾部类的中心经历了太多的被动更新)
3)The third limitation is that the storage and calculation of the FC layer can easily exceed current GPU
capabilities.(第三个局限是FC层的存储和计算很容易超过当前GPU的能力)

使用PFC后,公式(2)变为公式(4):
在这里插入图片描述

–为什么PFC能缓解长尾分布问题?
        如果数据存在长尾分布问题,那么考虑公式(3),对于tail class,正样本数量会非常少甚至为0,因此对应的类别中心 Wj 只会远离负样本,而很难接近正样本,那么长此以往就无法表征正类别中心了。应用了FPC之后,由于每次迭代随机采样负类别中心,那么tail class对应的类别中心被更新的频率也降低了,缓解了上述问题。

–为什么PFC能缓解类间冲突问题?
        如果发生类间冲突,那么在(2)中负类中心 Wj 可能也能表征正类别中心,(3)中 xi 实际上可能是正样本,那么优化时肯定会发生异常,称为"gradient confusion"。使用了PFC后,概率变小了,(2)和(3)中冲突的负类别中心和负样本被选择的概率就小了,那么类间冲突的问题也能得到缓解。还有一点是应用了PFC能够过滤掉冲突的负类中心。

在这里插入图片描述

        Conflict-Hard指样本与困难负类中心的平均余弦相似度,conflict-Noise指样本与冲突类别中心的余弦相似度,(a)是没有经过负类别中心随机采样的结果,(b)是采样率为 r =0.1 时的实验结果,可以看到此时它们之间有个明显的gap,因此设定合适的阈值就可以过滤掉冲突的负类别中心(文中取0.4)。

模型并行+PFC流程
在这里插入图片描述

1.每个结点拥有部分类别中心,如图中每个CPU下拥有14个类别中心。
2.在一次迭代中,每个结点的样本的embedding进行聚合,并分发给各个结点,此时每个结点拥有该次迭代的所有样本的embedding。
3.每个结点将所有样本对应的正类别中心从CPU复制到GPU中,例如第一个结点具有的正类别中心是深红、浅蓝、橙红、浅红这四种,将它们从CPU-1复制到GPU-1中,剩余的位置随机采样负类别中心(图中的深灰色)。
4.计算每个结点的logits(即 wx ) ,结果即图中的有色网格, (i, j) 处的位置表示第 i 个embedding与第 j 个类别中心的内积结果。
5.根据阈值过滤掉冲突的负类别中心,即图中蓝色的叉叉。
6.聚合各个结点的结果。

3.部分实验结果

在这里插入图片描述

相关文章:

【人脸识别】Partial-FC:让你在一台机器上训练1000万个id人脸数据集成为可能!

论文题目:”Killing Two Birds with One Stone: Efficient and Robust Training of Face Recognition CNNs by Partial FC“ -CVPR 2022 代码地址:https://arxiv.org/pdf/2203.15565.pdf 代码地址:https://github.com/deepinsight/insightfac…...

递归方法读取任意深度的 JSON 对象的键值

有以下json字符串 {"name":"John","age":30,"address":{"city":"New York","state":"NY","zip":"10001","coordinates":{"latitude":40.712776,&q…...

黑马redis学习记录:分布式锁

一、基本原理和实现方式对比 分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行,让程序串行…...

对React-Fiber的理解,它解决了什么问题?

对React-Fiber的理解,它解决了什么问题?Fiber用来解决什么问题?Fiber是什么?Fiber是如何解决问题的?Fiber用来解决什么问题? JavaScript引擎和页面渲染引擎两个线程是互斥的,当其中一个线程执行…...

【Linux】初学Linux你需要掌握这些基本指令(二)

目录 1.man指令 2.cp指令 3.mv指令 4.tree指令 5.echo指令 6.more指令 7.less指令(重要) 8.head与tail指令 9.date指令 显示时间常用参数: 设置时间常用参数: 10.cal指令 11.find & whereis & which指令 …...

Linux中VI/VIM 编辑器

1、概述所有Linux系统都会内置vi文本编辑器vim是vi的升级版,可以主动以字体颜色分辨语法的正确性,代码补完和编译,错误跳转等功能。2、vi和vim的三种模式基本上 vi/vim 共分为三种模式,分别是一般模式、编辑模式、命令模式2.1、一…...

PDF怎么转换成Word?两种PDF免费转Word方法推荐

不知道你们有没有发现,我们在网上下载的很多资料都是PDF格式的,尽管PDF文件也可以通过专门的PDF编辑器来编辑,但是PDF文档作为版式文档,编辑起来还是存在很多局限性,所有当我们需要大量编辑修改文档的时候,…...

极兔一面:Dockerfile如何优化?注意:千万不要只说减少层数

说在前面 在40岁老架构师 尼恩的读者交流群(50)中,面试题是一个非常、非常高频的交流话题。 最近,有小伙伴面试极兔时,遇到一个面试题: 如果优化 Dockerfile? 小伙伴没有回答好,只是提到了减少镜像层数。…...

SpringBoot+Vue实现酒店客房管理系统

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 服务器:tomcat7 数据库:mysql 5.7/8.0 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea Maven包:Maven3.3.9 浏…...

自适应多因素认证:构建不可破解的企业安全防线|身份云研究院

打开本文意味着你理解信息安全的重要性,并且希望获取行业最佳实践来保护你所在组织的信息安全。本文将带你了解多因素认证(MFA:Multi-Factor-Authentication)对于企业信息安全的重要性以及实施方法。 多因素认证(MFA&…...

阶段二8_集合ArrayList_学生管理系统_详细步骤

一.学生管理系统案例 1.需求: 针对目前我们的所学内容,完成一个综合案例:学生管理系统! 该系统主要功能如下: 1.添加学生:通过键盘录入学生信息,添加到集合中 2.删除学生:通过键盘录…...

一篇解决Linux 中的负载高低和 CPU 开销并不完全对应

负载是查看 Linux 服务器运行状态时很常用的一个性能指标。在观察线上服务器运行状况的时候,我们也是经常把负载找出来看一看。在线上请求压力过大的时候,经常是也伴随着负载的飙高。 但是负载的原理你真的理解了吗?我来列举几个问题&#x…...

关于IDM下载器,提示:一个假冒的序列号被用来注册……idea项目文件路径报红

关于IDM下载器,提示:一个假冒的序列号被用来注册……到C:\Windows\System32\drivers\etc 修改目录下面的hosts文件(如果没有修改的权限就右键属性hosts文件修改user的权限为完全控制),在hosts里面增加以下内容&#xf…...

JVM - 高效并发

目录 Java内存模型和内存间的交互操作 Java内存模型 内存间的交互操作 内存间交互操作的规则 volatile特性 多线程中的可见性 volatile 指令重排原理和规则 指令重排 指令重排的基本规则 多线程中的有序性 线程安全处理 锁优化 锁优化之自旋锁与自适应自旋 锁优…...

中小学智慧校园电子班牌系统源码 Saas云平台模式

智慧电子班牌区别于传统电子班牌,智慧校园电子班牌系统更加注重老师和学生的沟通交流和及时数据交互。学校为每个教室配置一台智能电子班牌,一般安装于教室门口,用来实时显示学校通知、班级通知,可设置集中分布式管理,…...

记录一次服务器被攻击的经历

突然收到阿里云发过来的异常登陆的信息: 于是,急忙打开电脑查看对应的ECS服务器的记录: 发现服务器的cpu占用率异常飙升,所以可以大概断定服务器已经被非法入侵了。 通过自己的账号登陆后,发现sshd服务有异常的链接存…...

Python解题 - CSDN周赛第29期 - 争抢糖豆

本期问哥是志在必得,这本算法书我已经觊觎许久,而之前两次因为种种原因未能如愿。因此,问哥这几天花了不少时间,把所有之前在每日一练做过的题目重新梳理了一遍。苦心人,天不负,感谢官方大大! 第…...

C代码中访问链接脚本中的符号

一、目的在之前的《GNU LD脚本命令语言(一)》、《GNU LD脚本命令语言(二)》我们介绍了GNU链接脚本的知识点,基本上对链接脚本中的SECTION、REGION、以及加载地址与执行地址的关系等内容有了一定的了解。本篇主要讲解链…...

MySQL 8:MySQL索引

索引就是通过一定的算法建立数据模型,用于快速查找某一列中具有特定值的行。如果没有索引,MySQL 必须从第一条记录开始读取整个表,直到找到相关的表。表越大,查询数据所花费的时间就越多。如果表中查询的列有索引,MySQ…...

JVM详解

一,JVM 1,JVM区域划分 类装载器,运行时数据区,字节码执行引擎 2,JVM内存模型(运行时数据区) 由本地方法栈,虚拟机栈,堆,方法区,和程序计数器组成。…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

服务器硬防的应用场景都有哪些?

服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...