【OpenVI—论文解读系列】开源低成本大规模分类框架FFC CVPR论文深入解读

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

一、背景

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

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

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


二、方法

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


2.1 挑战点1:成本居高不下

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

2.2 长尾学习困难

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

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

2.3 可行方法1:度量学习

2.png

2.4 可行方法2:PFC框架

3.png

2.5 可行方法3:VFC框架

4.png

2.6 本论文方法:FFC框架

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

5.png

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

6.png

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

7.png

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

8.png

    首先,为了解决长尾带来的影响,我们引入两个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里面的参数渐渐更新进去。

2.7 本论文方法:FFC框架

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

9.png

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

10.png

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

11.png

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

12.png

     首先,为了解决长尾带来的影响,我们引入两个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里面的参数渐渐更新进去。

2.8 本论文方法:trick介绍

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

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

13.png


三、实验结果

3.1 双Loader消融实验

14.png

3.2 SOTA方法效果对比

15.png

3.3 显存与样本吞吐对比

16.png

四、更多体验

      想体验调用稳定、效果更好的API,详情见视觉开放智能平台(https://vision.aliyun.com/


相关文章
|
Web App开发 JavaScript 程序员
如何去掉或者修改网页中的遮罩层,DIV等元素?
起因: 前几天女友在查资料写文章,打开一个网页,发现网页的被一个半透明的遮罩层给覆盖了(一个已经过期的组织活动 的网页,H5就将它遮盖了),就来问我怎么弄。
2021 0
|
XML Java 应用服务中间件
tomcat三种部署方式和推荐方式
tomcat三种部署方式和推荐方式
279 0
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
525 0
|
安全 Java 测试技术
如何创建一个信任所有证书的`TrustManager`
`TrustManager`是Java中用于管理SSL/TLS信任关系的接口,主要用于验证服务器证书。本文介绍了如何创建一个信任所有证书的`TrustManager`,并通过示例代码展示了具体的实现步骤。虽然这种方法在测试环境中很有用,但在生产环境中使用时存在严重的安全风险。
1419 3
|
JavaScript 前端开发 应用服务中间件
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
这篇文章分析了Vue项目在服务器部署后出现404错误的原因,主要是由于history路由模式下服务器缺少对单页应用的支持,并提供了通过修改nginx配置使用`try_files`指令重定向所有请求到`index.html`的解决方案。
【Vue面试题三十】、vue项目本地开发完成后部署到服务器后报404是什么原因呢?
|
存储 缓存 算法
base64图片是什么?原理是什么?优缺点是什么?
base64图片是什么?原理是什么?优缺点是什么?
1114 0
|
前端开发 Java Apache
springcloud feign
springcloud feign
441 0
springcloud feign
|
SQL 分布式计算 对象存储
客户说|科脉 x AnalyticDB,Serverless Spark替换CDH助力运维降本80%
使用AnalyticDB Spark替换自建CDHSpark,助力科脉降本增效
|
移动开发 JavaScript C#
分享53戏源代码总有一个是你想要的(亲测每一个均可用)
分享53戏源代码总有一个是你想要的(亲测每一个均可用)
942 0

热门文章

最新文章