PODNet: Pooled Outputs Distillation for Small-Tasks Incremental Learning论文详解ECCV2020

article/2025/10/6 20:18:36

ECCV2020

论文地址:https://doi.org/10.1007/978-3-030-58565_6

代码地址:https://github.com/arthurdouillard/incremental learning.pytorch

目录

1.贡献点

2.方法

2.1 pool类型

2.2 POD(Pooled Outputs Distillation)方法

2.3 LSC(Local Similarity Classifier)

三、实验结果

3.1 消融实验

3.2 同类对比

四、评价


基于样本回放的方法,同时基于知识蒸馏,本文改进了蒸馏的形式,定义了Pooled Output Distillation(POD)

1.贡献点

PODNet受到representation learning的启发。贡献点有两个

  1. spatial-based distillation-loss, 基于空间的蒸馏loss,改进了feature的蒸馏方法
  2. representation comprising multiple proxy vectors, 代理向量,改进了模型的分类器。

2.方法

2.1 pool类型

 

不同的Pool方法,看图很好理解。GAP即global average pooling,相当于除了channel外的所有通道进行pooling.

2.2 POD(Pooled Outputs Distillation)方法

 

假定分类过程定义为:

 

h=f(x)定义为特征提取过程,g()可以被定义为分类器。这也是增量学习中常被采用的结构,即双阶段,一个分类器阶段,一个特征提取阶段。

本文提出POD(Pooled Outputs Distillation)算法,不仅将蒸馏用于特征提取阶段h=f()的最终输出,也应用于f()的中间过程(intermediate layer)。

 

即特征提取中的每一层都作为中间结果,用于kd,上标t表示task t,下标L表示模型第L层。

假定中间层的输出:

 

约束最强的就是pixel级别的蒸馏:

 

其他的蒸馏方式有channel级别,GAP级别,width级别,height级别

 

 

 

pixel级别的蒸馏对于模型限制比较严格,其他级别的对于模型限制相对较松,需要一个权衡,作者最终选用的是Spatial级别的蒸馏,相当于width和height层面蒸馏loss之和。

 

后文的实验中也证实了此种方法的蒸馏性能最佳。

对于特征提取模型最终的特征,可以运用pixel级别的蒸馏

最终的蒸馏loss即最终模型的蒸馏和正常蒸馏的结合:

模型的loss可见图:

 

 

根据图中所示,特征提取阶段每层的特征进行spatial层面的蒸馏,最终的特征进行完整的蒸馏,最终分类器运用分类loss即可。

 

2.3 LSC(Local Similarity Classifier)

旧的分类任务,相当于fc分类器,用权重与feature进行点乘操作,但是根据UCIR(Learning a Unified Classifier Incrementally via Rebalancing, CVPR2019)的研究结果,fc层的分类器在增量训练后会倾向于训练更近的类别,即倾向于增量类,所以UCIR对分类器进行了改进。

分类器将fc层的点乘操作替换为了cosine相似度。

本文发现,如果只利用一个cos相似度的分类器,则不能很好的适应同一类别内多样性的需求,因此作者将之前的一个cos分类器分为了K个,相当于K个代理,以最终的k个cos分类器的分类结果来作为分类结果。

将分类器改进为此形式之后,搭配交叉熵loss即可取得不错的结果,作者又参考了NCA loss(Neighbourhood Components Analysis. NIPS2005),类似于交叉熵loss的改进,这个loss可以取得更快的收敛速度。写为下面这种形式:

NCA loss照作者说的具有更快的收敛速度,但是可能并没有交叉熵实用,因为NCA loss早在2005年就被提出,但是目前依然没有被广泛采用,可能涉及到样本之间的关系,耗费运算或者存储。后文NCA 和交叉熵之间loss的消融实验提升并不明显,也没有谈及运算消耗,因此NCA loss可能是作者在凑贡献点,也有可能与LSC分类器结合可以取得较好的效果。

三、实验结果

3.1 消融实验

 

a是关于分类器的消融实验,LSC比直接的cosine分类器具有更好的效果,POD的加入能够取得更好的效果。

3.2 同类对比

 

 

均可以取得较好的效果。

四、评价

本文改进了蒸馏的形式,让蒸馏的对于模型的限定刚好不松不紧,适用于增量任务。

改进了分类器的loss形式,将cosine分类器与代理向量相结合,取得了不错的效果。

 

 


http://chatgpt.dhexx.cn/article/09wOSTPr.shtml

相关文章

mybatis数据源(JNDI、POOLED、UNPOOLED)源码详解

一、概述 二、创建 mybatis数据源的创建过程稍微有些曲折。 1. 数据源的创建过程; 2. mybatis支持哪些数据源,也就是dataSource标签的type属性可以写哪些合法的参数? 弄清楚这些问题,对mybatis的整个解析流程就清楚了,…

XAConnectionFactory: failed to create pooled connection - DBMS down or unreachable 的解决方法

问题描述 项目启动出现报错:XAConnectionFactory: failed to create pooled connection - DBMS down or unreachable? 原因分析: Druid连接池问题,当Druid与Atomikos搭配时,如果MySQL版本高于8.0.11则不被支持 查看数据库使用…

没有手动提交事务,Mybatis 的 POOLED 连接池炸了

错误原因: 事务不关,并且非事务交替进行 总的来说,就是先开启了事务连接,未提交或关闭,导致连接池连接全部占满。 此时进行一次非事务连接操作,但是因为此时已经没有可以空闲的连接,并且创建的连…

【Flink】报错 No pooled slot available and request to ResourceManager for new slot failed

文章目录 1.场景11.1 概述1.2 问题1.场景1 1.1 概述 改报错请参考:【Flink】Flink 1.9 升级 到 flink 1.12.4 报错 shaded netty4 AbstractChannel AnnotatedConnectException 错误描述 报错信息: java.util.concurrent.CompletionException:

Oracle 关于Pooled connection request timed out

发生场景: 系统异常卡死,报错: 通过查找日志和业务接口定位,是因为数据库连接池溢出导致链接不上,系统卡死 异常测试代码如下格式: 测试了一个1000次的链接,每次连接都持续30秒,链…

MyBatis POOLED连接池深入了解

往期内容,如下 一、MyBatis简介 二、MyBatis环境搭建 三、MyBatis入门案例 四、MyBatis自定义 五、MyBatis CRUD操作 六、Mybatis中参数和返回值的深入了解 七、MyBatis 配置文件标签 我们在实际开发中都会使用连接池,因为它可以减少我们获取连接所消耗的…

unpooled与pooled

unpooled每次都是重新获取一个连接,底层源码如下 pooled去判断有没有,有就拿出来用,没有就创建新的,每次用完再还回去 mybatis poolde连接池原理 先去看空闲的有没,有就直接用,没有就去活动连接池里把最老…

.NET性能优化-推荐使用Collections.Pooled

简介 性能优化就是如何在保证处理相同数量的请求情况下占用更少的资源,而这个资源一般就是CPU或者内存,当然还有操作系统IO句柄、网络流量、磁盘占用等等。但是绝大多数时候,我们就是在降低CPU和内存的占用率。 之前分享的内容都有一些局限性…

使用 TFDConnection 的 pooled 连接池

使用 TFDConnection 的 pooled 连接池 从开始看到这个属性,就一直认为他可以提供一个连接池管理功能, 苦于文档资料太少, 甚至在帮助中对该属性的使用都没有任何介绍,如果你搜索百度,也会发现基本没资料。 最后终于在…

Mybatis 连接池POOLED

1、连接池: 我们在实际开发中都会使用连接池。 因为它可以减少我们获取连接所消耗的时间。 2、mybatis中的连接池 在 Mybatis 中也有连接池技术,但是它采用的是自己的连接池技术。 在 Mybatis 的 SqlMapConfig.xml 配置文件中,通过来实 现 My…

Mybatis连接池介绍与分类 Mybatis使用POOLED UNPOOLED配置连接池的原理分析

一、连接池 1.概念:其实就是一个容器(集合),存放数据库连接的容器。 当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象&#xf…

阶段3 1.Mybatis_07.Mybatis的连接池及事务_3 mybatis连接池的分类

2、mybatis中的连接池 mybatis连接池提供了3种方式的配置: 配置的位置: 主配置文件SqlMapConfig.xml中的dataSource标签,type属性就是表示采用何种连接池方式。 type属性的取值: POO…

Monkey Test简单介绍

什么是Monkey Test?顾名思义,就像一只猴子一样,它的下一步具有随机性。所以Monkey Test可以简单地理解为动作随机性测试! Monkey是android模拟器或设备上运行的一个程序。它可以生成伪随机用户事件(例如点击、触碰或滑…

monkey工具详解

第一部分:背景 1.为什么要开展压力测试? 提高产品的稳定性 提高产品的留存率 2.什么时候开始压力测试? 首轮功能测试通过后 下班后的夜间进行 第二部分:理论 1.什么是monkey? Monkey是发送伪随机用户事件的工…

monkey的基本使用

一、monkey介绍 1.功能:采用伪随机测试的方式,来完成app的稳定性测试 2.执行原理:通过monkey的shell脚本去执行安卓系统中自带的monkey.jar工具 3.通常用于盲测,压力测试和冒烟测试 1)盲测:忽略功能和业务逻…

Monkey使用详解

App monkey 使用篇 安装包下载: 下载mumu模拟器地址:http://mumu.163.com/baidu/ 下载adb安装包 地 址:http://www.downza.cn/soft/219906.html Adb环境变量 配 置:在path里新建adb安装路径即可。 cmd 打开命令提示符窗口输入&a…

monkey的基本定义及基本使用(菜鸟学习中)

一.monkey的定义 1.(转自 https://blog.csdn.net/beyond_f/article/details/78543070 ) Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar; Monkey.jar程序是由一…

Android测试--monkey详细到炸的总结

一、Monkey简介: Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送伪随机的用户事件流(点击、滑动、Application切换、横竖屏、应用关闭)实现对正在开发的应用程序进行压力测试。monk…

APP稳定性测试利器 Monkey介绍、实战使用、日志分析

第一、Monkey简介 Monkey是什么? Monkey 是安卓官方提供的一个命令行工具,可以运行在Android模拟器和实体手机上。通过Monkey 来模拟用户的触摸、点击、滑动、系统按键的操作,来对APP进行压力测试、稳定性测试。换句话说,就是在乱…

Clumsy弱网、丢包测试工具

一、下载clumsy安装包,解压后打开clumsy.exe 二、ping www.baidu.com查看是否模拟成功 三、pc端模拟丢包和网络延迟 四、APP端模拟丢包和网络延迟 1.手机连接抓包工具charles 2.打开clumsy,在过滤器filtering中输入outbound and ip.DstAddr 192.168.…