达摩院开源低成本大规模分类框架FFC CVPR论文深入解读

news2024/11/19 14:33:22

一、论文&代码

论文链接An Efficient Training Approach for Very Large Scale Face Recognition

应用&代码:

 https://modelscope.cn/models/damo/cv_ir50_face-recognition_arcface/summary

https://modelscope.cn/models/damo/cv_resnet_face-recognition_facemask/summary

二、背景

        图像分类是当前AI最为成功的实际应用技术之一,它已经融入了人们的日常生活。它被广泛的应用到了计算机视觉的大部分任务中,比如图像分类、图像搜索、OCR、内容审核、识别认证等领域。目前已形成一个普遍共识:“当数据集越大ID越多时,只要训练得当,相应分类任务的效果就会越好”。但是面对千万ID甚至上亿ID,当下流行的DL框架下,很难低成本的直接进行如此超大规模的分类训练。

        解决该问题最直观的方式是通过集群的方式消耗更多的显卡资源,但即便如此,海量ID下的分类问题,依然会有如下几个问题:

1.)成本问题:分布式训练框架 + 海量数据情况下,内存开销、多机通信、数据存储与加载都会消耗更多的资源。

2.)长尾问题:实际场景中,当数据集达到上亿ID时,往往其绝大部分ID内的图片样本数量会很少,数据长尾分布非常明显,直接训练难以获得较好效果。

    本文余下章节将重点介绍超大规模分类框架现有解决方案,以及低成本分类框架FFC的相应原理及trick介绍。

三、方法

        在介绍方法之前,首先回顾下超大规模分类当前存在的主要挑战点:

挑战点1:成本居高不下

ID数目越大分类器显存需求越大,如下示意图所示:

 显存越大所需机器卡数越多,成本也就越高,相应多机协同的硬件基础设施成本也越高。与此同时,当分类 ID数目达到极超大规模的时候,主要计算量将浪费在最后一层分类器上,骨架网络消耗的时间可忽略不计。

挑战点2:长尾学习困难

        实际场景下,上亿ID中的绝大部分ID内的图片样本数量会很少,长尾数据分布非常明显,直接训练难以收敛。如果按照同等权重训练,则长尾样本会被淹没学习不充分。此时,一般采用imbalanced sample,在这个研究课题上,有非常多的方法可以借鉴,采取怎样的方式融入到简易超大规模分类框架上较为合适呢?

        带着上述两个挑战点,首先来看下现有可行的方案有哪些,是否能很好的解决上述两个挑战。

可行方法1:度量学习

 

可行方法2:PFC框架

 

可行方法3:VFC框架

本论文方法:FFC框架

大规模分类采用FC训练时损失函数如下

 在每一次反传过程中,所有的类中心都会更新

但FC太大了,直观的思路是合理地选择一定比例的类中心,即如下Vj为1部分:

由上述动机,引出了如下初步的方案:

         首先,为了解决长尾带来的影响,我们引入两个loaders,分别是基于id采样的id_loader和基于样本采样的instance_loader,有了这两个loader。在每个epoch当中,样本多的类和样本少的(few-shot)类能够有机会被训练到。

        其次,在训练开始之前,先将一部分样本送入id group,这里假设放入10% id的样本进入group。这时候gallery用的是随机参数。

        然后,训练开始时,batch样本挨个进入probe net。然后对于每个batch里面的样本就有两种情况:1.)group中存在此样本同样id的特征,2.)group中不存在同类样本的特征。对于这两种情况,我们分别称之为existing id和fresh id。对于existing的样本,拿特征和group里面的特征做内积,计算与标签的交叉熵损失函数,后回传。对于fresh的样本,跟group里面的样本来个最小化余弦相似度。

        最后,对group里面特征更新,采取新类中心替换,现有类中心加权的原则。对于gallery net,采用moving average策略把probe里面的参数渐渐更新进去。

本论文方法:trick介绍

1.)引入的ID Group,其size是个可调参数,一般默认为3万。

2.)为达到稳定训练,参考moco类方法,引入moving average,相应收敛情况对别:

四、实验结果

1. 双Loader消融实验

2. SOTA方法效果对比

3. 显存与样本吞吐对比

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/82152.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用ONNXRuntime部署阿里达摩院开源DAMO-YOLO目标检测,一共包含27个onnx模型(代码开源)...

2022点击蓝字 关注我们关注并星标从此不迷路计算机视觉研究院学习群|扫码在主页获取加入方式获取代码|关注并回复“onnx部署”01概述ONNXRuntime是微软推出的一款推理框架,用户可以非常便利的用其运行一个onnx模型。ONNXRuntime支持多种运行后…

深入理解 equals() 方法以及与 == 的区别

当使用 判断两个变量是否相等时 如果两个变量是基本类型的变量,且都是数值类型,只要两个变量的数值相等,则返回 true 对于两个引用类型变量, 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址…

vue+element-ui el-date-picker日期组件再次封装(DatePicker与DateTimePicker合并根据type值来显示)

1、最终效果 2、TDatePicker 参数配置 1、简介&#xff1a;基于 ElementUI DatePicker DateTimePicker 组件的二次封装&#xff0c;取决于 type 值 代码示例&#xff1a; <t-date-picker v-model"date" />2、t-date-picker&#xff08;Attributes&#xff0…

【AI工程论文解读】05-通过Ease.ML/CI实现机器学习模型的持续集成(下)

持续集成是一种软件开发实践&#xff0c;即团队开发成员经常集成他们的工作&#xff0c;通常每个成员每天至少集成一次&#xff0c;也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建&#xff08;包括编译&#xff0c;发布&#xff0c;自动化测试)来验证&#xff…

cmake基础

cmake从基础到实站 cmake官方教程翻译版 CMake Cookbook中文版 cmake 备忘录 需要注意的一点&#xff1a;QT6采用cmake作为编译系统 CMake是一种跨平台编译工具&#xff0c;CMake主要是编写CMakeLists.txt文件&#xff0c;然后通过cmake命令将CMakeLists.txt文件转化为make所需…

如何理解数据库事务?

目录 &#x1f407;今日良言:保持热爱 奔赴山河 &#x1f409;一、数据库事务 &#x1f433;1.概念 &#x1f433;2.使用 &#x1f433;3.特性 &#x1f407;今日良言:保持热爱 奔赴山河 &#x1f409;一、数据库事务 &#x1f433;1.概念 事务指逻辑上的一组操作&…

学生体育铅球网页设计作品静态HTML网页模板源码 大学生体育铅球网站制作 简单校园体育网页设计成品

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

[附源码]JAVA毕业设计医院远程诊断系统(系统+LW)

[附源码]JAVA毕业设计医院远程诊断系统&#xff08;系统LW&#xff09; 项目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术…

SQLServer性能排查之CPU使用率过高的问题

【背景】 华北某SQLServer数据库从12月起出现CPU使用率过高的情况&#xff0c;一直未能够找到原因。当时电话简单将思路进行分享&#xff0c;反馈SQLServer中出现CPU使用率过高有许多可能原因&#xff0c;但常见的原因如下最为常见&#xff1a; 由于以下情况&#xff0c;表或…

【数据结构】跳表Skiplist

文章目录跳表--skiplistskiplist的概念skilplist的原理skilplist的实现随机值函数跳表节点跳表框架查找函数寻找前置节点添加元素删除元素打印链表测试结果Skiplist与其他Key-Value结构的比较跳表–skiplist skiplist的概念 skiplist本质上也是一种查找结构&#xff0c;用于解…

产品待办列表梳理(PBR)是什么?

产品待办列表(PBL)是Scrum框架下最重要的一个工件(Artifact)&#xff0c;产品待办列表的梳理(Product backlog Refinement-PBR)也是一个重要的活动&#xff0c;它不同于Scrum的3-3-5-5。仔细阅读Scrum指南&#xff0c;对产品待办列表梳理活动的描述是有限的&#xff1a; “只有…

R语言基于树的方法:决策树,随机森林,Bagging,增强树

概观 本文是有关 基于树的 回归和分类方法的。最近我们被客户要求撰写关于决策树的研究报告&#xff0c;包括一些图形和统计输出。 视频&#xff1a;从决策树到随机森林&#xff1a;R语言信用卡违约分析信贷数据实例 从决策树到随机森林&#xff1a;R语言信用卡违约分析信贷…

『微信小程序从0到1』视图与逻辑

&#x1f431;‍&#x1f409;&#x1f431;‍&#x1f409;&#x1f431;‍&#x1f409; 请乘理想之马&#xff0c;挥鞭从此起程&#xff0c;路上春色正好&#xff0c;天上太阳正晴&#x1f43e;&#x1f43e;&#x1f43e;/font> &#x1f308;博客主页&#x1f449;白小…

【SQL】主从复制

主从复制主从复制的作用主从复制的原理一主一从架构主从配置文件1.主机配置2.从机配置3.主机建立账户并授权4.从机&#xff1a;配置需要复制的主机5.测试6.停止主从同步binlog_format三种格式双主双从架构如何提升数据库并发能力&#xff1a;在实际工作中&#xff0c;我们常常将…

B站运营,B站游戏数据如何分析?

B站聚集了大部分年轻人&#xff0c;用户量和黏性一直持续增长&#xff0c;在B站&#xff0c;游戏也是重点发展的一个分区&#xff0c;而对于运营者想做好游戏运营也并非易事&#xff0c;想做好运营掌握游戏数据必不可少&#xff0c;那么应该如何查看游戏数据呢&#xff1f; 一…

童年 高尔基

每周读一本经典&#xff0c;大概从2022年11月开始了&#xff0c;目前已经读了4本&#xff0c;csdn平台更适合技术分享&#xff0c;知乎比较适合书籍分享 《童年》是高尔基三部曲中的第一部。坐在柳东图书馆像海水浸过的沙子般座椅&#xff0c;周末的下午沉浸在高尔基先生奇特的…

线程池应用(四)

线程池应用线程池线程池应用多线程应用同步和异步1. 需要等待结果1. join 实现&#xff08;同步&#xff09;2. Future 实现&#xff08;同步&#xff09;3.CompletableFuture 实现&#xff08;异步&#xff09;4. BlockingQueue 实现&#xff08;异步&#xff09;2. 不需等待结…

5分钟搞定,实现 定时任务 的五种方案!

我们在实际开发中&#xff0c;多多少少都会用到定时任务来处理一些问题。 比如金融项目中的对账&#xff0c;每天定时对昨天的账务进行核对&#xff0c;每个月初对上个月的账务进行核对等。 还比如&#xff0c;我们需要处理一些老数据迁移&#xff0c;修复一些新项目和老项目…

基于java+springboot+mybatis+vue+mysql的财务管理系统

项目介绍 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时…

CI24R1/SI24R1 2.4G无线传输技术--无线门铃

无线门铃是一种基于2.4G无线传输技术的智能家居产品&#xff0c;主要用于亲朋好友探访的语音提醒功能。此次方案采用2.4G无线通信设计&#xff0c;室内和室外子母机组网&#xff0c;在智能家居及办公场所等方面得到广泛的应用。 一、应用场景 适用于居民社区、家庭、公寓、酒店…