Feature Fusion for Online Mutual KD

2024-01-14 04:12
文章标签 online fusion feature kd mutual

本文主要是介绍Feature Fusion for Online Mutual KD,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

paper:Feature Fusion for Online Mutual Knowledge Distillation

official implementation:https://github.com/Jangho-Kim/FFL-pytorch

本文的创新点 

本文提出了一个名为特征融合学习(Feature Fusion Learning, FFL)的框架,该框架通过一个组合并行网络特征图并生成更有意义特征图的融合模块(fusion module)高效的训练一个强大的分类器。具体来说,首先训练多个并行网络作为子网络,然后通过融合模块组合来自每个子网络的特征图得到一个更有意义的特征图,这个融合特征图送入融合分类器fused classifier中进行整体的分类。与现有的特征融合方法不同,该框架集成各个子网络的分类器ensemble classifier并将知识蒸馏到融合分类器中,同时融合分类器也将它的知识蒸馏回各个子网络中,以一种在线蒸馏online-knowledge distillation的方式进行互学习mutual learning。这种互学习的方式不仅提高了融合分类器的性能同时提升了各个子网络的性能。此外和其它一些类似方法相比,本文的方法中每个子网络的架构可以不同。

方法介绍

Fusion Module

和DualNet不同,本文的方法在融合特征时不是简单的求和或求均值,而是先concatenate不同子网络的特征,然后通过融合模块进行卷积操作。为了减少参数,使用了深度可分离卷积。我们使用最后一层的特征进行融合因为它特定于该任务并且具有足够的表示能力。假定子网络1,2的最后一层特征的通道分别为 \(C_{1},C_{2}\),拼接后特征图的通道数为 \(M=C_{1}+C_{2}\),融合模块的输出通道 \(N\) 可以根据需要设定。如图2所示,首先执行3x3的深度卷积,然后使用点卷积来创建特征映射切片的线性组合,以便更好的融合它们。

在DualNet中,存在一个问题,即子网络的输出通道数必须相等,因为特征图需要进行element-wise add。在本方法中,由于子网络的特征时concatenate的,因此FFL可以使用不同输出通道的网络作为子网络。如果子网络最后特征图的分辨率不同,那么使用一个卷积就可以对齐分辨率,如FitNets中的regressor。

Feature Fusion Learning

在子网络的结构方面,ONE(On-the-fly Native Ensemble)和DualNet都不够灵活因为它们的子网络的结构必须相同。为了解决这个问题,本文基于子网络的结构设计了两种不同的FFL 

  • 如果子网络的结构相同,则子网络的low-level层共享,high-level层分成不同的分支。
  • 如果子网络的结构不同,则子网络分别独立训练因为无法共享层。

本文处理的多类别分类任务,假设有 \(m\) 个类别,第 \(k\) 个网络的logit定义为 \(\mathbf{z}_{k}=\left \{z^1_{k},z^2_{k},...,z^{m}_{k} \right \} \)。在训练过程中,我们使用softened probability进行模型泛化。给定 \(\mathbf{z}_{k}\),软化概率定义为

当 \(T=1\) 时,就是原始的softmax。给定one-hot标签 \(\mathbf{y}=\left\{y^{1},y^{2},...,y^{m}\right\}\),第 \(k\) 个子网络的交叉熵损失为

完整的过程如图1所示,其中子网络的结构不同。为了充分利用给定的知识,我们使用了一个强大的集成分类器。子网络通过集成logits创建一个集成分类器用来训练融合模块。假设有 \(n\) 个子网络,则logits的集成如下

为了训练融合模块,集成分类器将它的知识蒸馏给融合分类器,称为集成知识蒸馏(ensemble knowledge distillation, EKD)。EKD损失定义为集成分类器软化分布和融合分类软化分布之间的KL散度。如果融合分类器的logit定义为 \(\mathbf{z}_{f}\),则EKD损失如下

和其他方法相比,EKD损失可以帮助训练一个融合模块来生成更有意义的特征图。不同子网络最后一层特征图拼接后进入融合模块。为了训练每个子网络,融合模块中的融合分类器将它的知识蒸馏回每个子网络,称为融合知识蒸馏(fusion knowledge distillation, FKD)。将融合分类器的软化分布蒸馏回每个子网络的FKD损失如下

 

除了蒸馏损失,每个子网络和融合分类器还通过交叉熵损失学习ground truth,完整损失如下

 

在FFL中,每个子网络和融合分类器通过交叉熵损失学习ground truth。同时,集成分类器通过 \(\mathcal{L}^{e}_{kl}\) 将它的知识蒸馏到融合分类器中,反过来,融合分类器也将它的知识蒸馏回每个子网络。通过这种互蒸馏(mutual knowledge distillation, MKD),融合模块生成对分类更有意义的特征。由于软分布的梯度缩放了 \(1/T^{2}\),我们乘上 \(T^{2}\)。FFL中的子网络和融合模块是同时训练的。

这篇关于Feature Fusion for Online Mutual KD的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/603908

相关文章

VMware Fusion Pro 13 Mac版虚拟机 安装Win11系统教程

Mac分享吧 文章目录 Win11安装完成,软件打开效果一、VMware安装Windows11虚拟机1️⃣:准备镜像2️⃣:创建虚拟机3️⃣:虚拟机设置4️⃣:安装虚拟机5️⃣:解决连不上网问题 安装完成!!! Win11安装完成,软件打开效果 一、VMware安装Windows11虚拟机 首先确保自己的mac开启了网络共享。不然虚拟机连不上👀的 1️⃣:准备镜像

VMware Fusion Pro 13 for Mac虚拟机软件

Mac分享吧 文章目录 效果一、下载软件二、开始安装安装完成!!! 效果 一、下载软件 下载软件 地址:www.macfxb.cn 二、开始安装 安装完成!!!

【机器学习 sklearn】特征筛选feature_selection

特征筛选更加侧重于寻找那些对模型的性能提升较大的少量特征。 继续沿用Titannic数据集,这次试图通过特征刷选来寻找最佳的特征组合,并且达到提高预测准确性的目标。 #coding:utf-8from __future__ import divisionimport sysreload(sys)sys.setdefaultencoding('utf-8')import timest

feature_column相关接口

在TensorFlow中,特征列(Feature column)是原始数据和 Estimator 之间的接口,它告诉Estimator如何使用数据。 原始数据集包含各种各样的特征,有的特征是数值,比如年龄,长度、速度;有的特征是文字,比如,地址、Email内容、数据库查询语句等 神经网络接受的输入,只能是数值,而且是整理好的数值 所以,原始数据 和 神经网络输入需求之间需要一个桥梁,这个

[LeetCode] 901. Online Stock Span

题:https://leetcode.com/problems/online-stock-span/ 题目大意 不断给出元素,求当前元素开始往前的最大子串,且串中每个元素的值都小于等于 该元素。 思路 class stockPair{int price;int day;public stockPair(int price,int day){this.price = price;this.d

Detection简记2-DAFE-FD: Density Aware Feature Enrichment for Face Detection

创新点 1.使用密度估计模型增强检测中的特征图 总结 整个流程还是很清晰的。 conv1-3的特征图经过密度估计模块由检测器D1进行检测。 D2-4分别是四个检测器。 FFM是特征融合模块,将不同层不同大小的特征融合。 FFM网络结构如下: 首先使用1X1的卷积减少两组特征的厚度到128,然后使用双线性插值统一两组特征图的尺寸,然后相加。类似于cvpr2017的SSH。 多尺度检测器的网

【读论文】MUTUAL-CHANNEL LOSS

论文题目:《The Devil is in the Channels: Mutual-Channel Loss for Fine-Grained Image Classification》 链接:https://arxiv.org/abs/2002.04264 来源:IEEE TIP2020 细粒度分类的主要思想是找出各个子类间的可区分特征,因此文章指出要尽早在通道上进行钻研,而不是从合并

rust feature 简介

Rust 的 feature 是一种机制,用于在编译时选择性地启用或禁用代码的某些部分。通过 feature,你可以在 Cargo.toml 中定义哪些功能需要启用,并在代码中通过条件编译来控制代码的编译与否。下面是 feature 机制的详解: 1. 基本概念 Feature: 是一个编译时的标志,允许你有选择性地启用某些代码路径、依赖项或编译选项。Default Feature: 默认启用

特征选择错误:The classifier does not expose coef_ or feature_importances_ attributes

在利用RFE进行特征筛选的时候出现问题,源代码如下: from sklearn.svm import SVRmodel_SVR = SVR(C=1.0, cache_size=200, coef0=0.0, degree=3, epsilon=0.1, gamma='auto',kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verb

Learning Policies for Adaptive Tracking with Deep Feature Cascades

Learning Policies for Adaptive Tracking with Deep Feature Cascades ICCV17 shotlight 作者:Chen Huang, CMU postdoctor,导师 Deva Ramanan summary 文章主要贡献在于速度与精度的权衡(AUC 0.638,fps 23),通过强化学习策略,来控制网络的深度,使得精度和