当前位置: 首页 > 科技观察

达摩院开源低成本大规模分类框架FFC

时间:2023-03-20 16:51:01 科技观察

论文链接:https://arxiv.org/pdf/2105.10375.pdf应用&代码:https://modelscope.cn/models/damo/cv_ir50_face-recognition_arcface/summaryhttps://modelscope.cn/models/damo/cv_resnet_face-recognition_facemask/summary背景图像分类是AI最成功的实际应用技术之一,已经融入人们的日常生活。它广泛应用于计算机视觉的大部分任务,如图像分类、图像搜索、OCR、内容审查、识别和认证等领域。目前已经形成了普遍的共识:“当数据集更大、ID更多时,只要训练得当,相应分类任务的效果会更好。”但是当面对千万级甚至上亿级的ID时,目前流行的DL框架很难直接以低成本进行这种超大规模的分类训练。解决这个问题最直观的方法就是使用集群来消耗更多的显卡资源,但即便如此,海量ID下的分类问题仍然存在以下问题:1)成本问题:分布式训练框架+海量数据在这种情况下,内存开销、多机通信、数据存储和加载都会消耗更多的资源。2)长尾问题:在实际场景中,当数据集达到上亿个ID时,大部分ID中的图像样本数量会非常少,数据的长尾分布非常明显,所以通过直接训练很难获得更好的效果。本文其余章节将重点介绍超大规模分类框架的现有解决方案,以及低成本分类框架FFC的相应原理和技巧。方法在介绍方法之前,本文首先回顾一下当前超大规模分类的主要挑战:挑战一:成本居高不下ID的数量越大,分类器的内存需求就越大,如图如下示意图:内存越大,机卡数量越多,成本越高,相应的多机协同硬件基础设施成本也越高。同时,当分类ID数量达到极大规模时,主要的计算会浪费在最后一层分类器上,骨架网络消耗的时间可以忽略不计。挑战二:长尾学习难在实际场景中,上亿ID中的大部分图像样本数量会非常少,长尾数据分布非常明显,直接训练难度大收敛。如果用同样的权重训练,长尾样本会被压垮,学习不足。这时候一般使用不平衡样本。本研究课题有许多可供参考的方法。什么方法更适合融入简单的超大规模分类框架?带着以上两个挑战,我们先来看看现有的可行方案,能否很好地解决以上两个挑战。可行方法1:Metriclearning可行方法2:PFC框架可行方法3:VFC框架本文方法:FFC框架大规模分类采用FC训练损失函数如下:在每个backpass过程中,所有类centerswillbeUpdate:但是FC太大,直观的思路是合理选择一定比例的classcenter,即下面的Vj为1部分:基于以上动机,得出如下初步解:首先,为了解决长尾的影响,本文引入了两个loader,分别是基于id采样的id_loader和基于sample采样的instance_loader,用这两个loader。在每个epoch中,样本较多的类和样本少的类都有机会被训练。其次,在训练开始之前,将一些样本发送到id组。这里假设将10%的id样本放入group中。此时,图库使用随机参数。然后,当训练开始时,批量样本一个一个地进入探测网。那么每个batch中的样本有两种情况:1.)组中有这个样本相同id的特征,2.)组中没有相同样本的特征。对于这两种情况,分别称它们为existingid和freshid。对于已有的样本,用特征和组内的特征做内积,和标签计算交叉熵损失函数,然后返回。对于新鲜样本,尽量减少与组中样本的余弦相似度。最后,为了更新组中的特征,根据对现有类中心进行加权的原则,使用一个新的类中心来代替它。对于gallerynet,probe中的参数使用移动平均策略逐渐更新。本文方法:trick介绍1.)介绍的IDGroup的大小是一个可调参数,默认一般是30000。2.)为了达到稳定训练,参考moco方法,引入移动平均。对应的收敛条件如下:实验结果1.DoubleLoader消融实验2.SOTA方法效果对比3.显存和样本吞吐量对比