机器之心专栏
机器之心编辑部
本文主要介绍了超大规模分类框架的现有解决方案,以及低成本分类框架 FFC 的相应原理及 trick 介绍。
应用 & 代码:
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 数目越大分类器显存需求越大,如下示意图所示:
挑战点 2:长尾学习困难
在实际场景下,上亿 ID 中的绝大部分 ID 内的图片样本数量会很少,长尾数据分布非常明显,直接训练难以收敛。如果按照同等权重训练,则长尾样本会被淹没学习不充分。此时,一般采用 imbalanced sample,在这个研究课题上,有非常多的方法可以借鉴,采取怎样的方式融入到简易超大规模分类框架上较为合适呢?
带着上述两个挑战点,首先来看下现有可行的方案有哪些,是否能很好的解决上述两个挑战。
可行方法 1:度量学习
大规模分类采用 FC 训练时损失函数如下:
其次,在训练开始之前,先将一部分样本送入 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 消融实验
投稿或寻求报道:content@jiqizhixin.com