Multi-exit Network

关键词:Multi-exit, 动态网络,Anytime prediction, budgeted batch classification
参考:https://blog.csdn.net/c9Yv2cf9I06K2A9E/article/details/120340325
NPL中的multi-exit调研 :https://github.com/txsun1997/awesome-early-exiting
在这里插入图片描述
【Improving the Accuracy of Early Exits in Multi-Exit Architectures via Curriculum Learning】2021-IJCNN
关键词:课程式学习
code(tf):https://gitlab.au.dk/maleci/MultiExitCurriculumLearning
任务: image classification
数据集:CIFAR 10,CIFAR 100
训练方法:classifier-wise training, curriculum learning(创新点)
multi-exit常见训练方法:
(1):end-to-end, one-stage, 联合训练所有branch的loss,每个branch的loss有一个超参数权重。问题:该方法对branch位置敏感,一个branch的acc可能受其他branch影响
(2):layer-wise, 分级训练, n-stage,第一次训练模型直到第一个branch的部分,第二次冻结之前的权重,训练模型剩余部分直到第二个branch的部分,依次进行。
(3):classifier-wise, n-stage, 首先训练backbone+final exit,然后冻结backbone,单独训练每个branch
本文选择classifier-wise是因为每个branch独立,因此其位置和数量也可以任意设置。而end-to-end、layer-wise方法对branch的位置和数量是敏感的。
curriculum learning见课程式学习 Curriclum Learning,主要包含一个sorting function设计和pacing function设计
常见的sorting function:
(1):基于先验知识的度量
(2):teacher网络的得分来衡量,再训练student网络。如果teacher和student采用同一个网络,则称为self-taught。
(3):强化学习
文中采用第二种方法:two stage,用一个teacher network获得样本得分衡量样本难易度,按照得分顺序输入student network来训练。
文中指出一些情况下anti-curriculum效果更好,需要都尝试一下。
网络backbone:DenseNet201, MobileNet, ResNet152, InceptionV3
Exit branch设计:
(1)数量:2
(2)结构:见下图, 参考自“Triple wins: boosting accuracy, robustness and efficiency together by enabling input-adaptive inference”
(3)位置:文中对exit位置进行了讨论:
每个exit的位置取决于主干网的架构。
我们发现,在backbone中稍后面的放置一个exit并不一定会提高该分支的整体准确性,可能在更前的位置效果更好。
一般来说,exit位于“自然块”之后,例如concatenation layer,residual connection, dense block之后,它们的性能更好
(4)退出策略:branch输出的概率作为置信度
在这里插入图片描述

在这里插入图片描述
【MULTI-SCALE DENSE NETWORKS FOR RESOURCE EFFICIENT IMAGE CLASSIFICATION】2018 ICLR
关键词:DenseNet, 多尺度

参考:https://www.cnblogs.com/liuyangcode/p/13700393.html https://blog.csdn.net/u014686356/article/details/79626471
code(lua):https://github.com/gaohuang/MSDNet
code(torch):https://github.com/kalviny/MSDNet-PyTorch
任务:image classification, anytime classification, budgeted batch classification
文章基于CNN,提出一种图像分类方法:在现实中对图像分类难度不一,采用一个固定的框架对图片进行分类时有时不够灵活。
主要思想就是在一个网络中有多个分类出口(创新点),对于简单图像可以直接从前面某个分类出口得到结果,而难分类的网络可能要到网络后面的某一层才能得到可靠的结果

文章有两个setting:
(1)Anytime prediction:对于一个测试图形,模型可以在各个时间点,输出对这个图像的分类结果。这样的目的是,有可能在某一个时间点,给这个应用程序的计算资源用尽了,就需要输出图像的分类结果了。
限制单图的计算量FLOPs,直接记录自适应网络中所有分类器的性能以及其计算量进行对比
(2)budgeted batch classification:
限制一批图片的资源总量,需要根据资源总量设定阈值来控制推理的提前退出,记录自适应网络的性能以及对应的资源限制
对于一个batch中的众多样本来说,共用一个固定的资源限制,可以自适应的在这一个batch中让简单样本使用少一些的资源,让复杂样本使用多一些的资源。
在这样的一个batch中,如果计算资源总限制为B,这个batch中包含M个样本数据,简单样本所分的资源应该小于B/M,复杂样本应该大于B/M
比如在神经网络的前几层的特征中,分类器已经可以以一个较高的置信度将图形的分类结果输出了,那么就可以直接将结果作为模型的输出,而不用继续在卷积神经网络里面进行传递了。
那么如何确定模型对于图像的分类是可靠的呢?这就是看softmax后,概率最大值是否超过一个阈值(或者第一大与第二大值的差),
例如softmax结果是(0.99,0.01,0),那么就认为分类对这个图形的分类结果具有较高的confidence,是easy图像。
对difficult的图像会继续在网络中传递,直到超过阈值或者到网络的最后一层。

文章主要解决两个问题:
(1)浅层次的分类不能获取图像的高层语义特征
我们都知道,随着神经网络的深度不断增加,网络可以获取到图像的更高层次的特征,更加抽象的特征。这些抽象的特征对于分类是十分有利的。
这个我们可以通过上图中左图可以看出,随着深度的增加,各个层次的分类的的精度在不断的提高。
solution:多尺度的特征(创新点)
通过MSDNet的网络结构图,可以看出:MSDNet采用了多个尺度来获取图形的抽象特征,分为两个部分的串联。
1.上层同尺度的特征的卷积。2.上层上个尺度feature map的降采样(diagonal connection)。这样可以对同层的分类器得到一个更好的分类结果。通过上图也可以看出来,同层次的分类器的相对精度都要高。
(2)浅层次的分类器对于后面图形分类的精度的影响
通过上图的右图可以看出,以ResNet 为例,可以看出精度有所下降,论文推论可能是早期分类器对后面分类产生了不好的影响。
原因是:早期的分类器可能导致网络早期层次的优化更利于早期图形分类器达到更好的效果,而不利于后面的分类的优化。
solution:Dense connection(创新点)
这样的结构可以保证网络的final performance,因为每层都有到其他层次的连接。那么反向传播的时候,每个分类都可以通过shortcut 对某一层的产生直接的影响,让权重向对每个分类效果更好的方向更新。

文章的tricks:
(1)损失函数是由各个分类器损失函数的加权求和,论文每个分类器的权值都为1;
(2)为了进一步减少计算量,论文采用了两个方法,一个是network reduction。随着网络的深度的不断增加,神经网络可以得到图像的高层次的语义特征。所以对于尺度的变化没有什么必要了,所以就采用每多少层,就减少一个尺度。如下图所示
另外对于一个分类器,这个分类器的特征是来自于对角的特征的,所以进行分类的时候,就先计算这些特征。

数据集:CIFAR 10,CIFAR 100,ImageNet
训练方法:end-to-end training
网络backbone:DenseNet
Exit branch设计:
(1)数量:6
(2)结构:两个降采样卷积层(128x3x3),平均池化层2x2,线性层
(3)位置:每个dense layer之后
(4)退出策略:分类器输出经softmax后,概率最大值作为置信度
在这里插入图片描述
【Resolution Adaptive Networks for Efficient Inference】2020 CVPR
关键词:DenseNet, 多尺度
参考:https://blog.csdn.net/lichlee/article/details/105217374
code: https://github.com/yangle15/RANet-pytorch
任务:image classification
网络包含多个不同输入分辨率和深度子网,样本先从最小的子网开始识别,若结果满足条件则退出,否则继续使用更大的子网进行识别。
子网的特征不是独有的,下一级别的子网会融合上一级别的子网特征,从实验来看,论文在效果和性能上取得了很不错的trade-off

与MSDNet对比:
MSDNet的分类器放到分辨率最低的路径中,如果中间的分类器没有得到符合预期的结果,则会进行下一步全部尺寸的推理预测。
而RANet则是从低尺寸到高尺寸逐步使用不同的子网进行推理预测,这样的方式能更好地自适应结合深度和分辨率。
数据集:CIFAR 10, CIFAR 100, ImageNet
训练方法:end-to-end training
网络backbone:
Exit branch设计:
(1)数量:
(2)结构:
(3)位置:每个conv block之后
(4)退出策略:每个branch输出softmax的最大概率作为置信度,超过阈值则退出。
在这里插入图片描述
【Shallow-Deep Networks: Understanding and Mitigating Network Overthinking】2019 PMLR
关键词:multi-exit
code(torch): https://github.com/yigitcankaya/Shallow-Deep-Networks
(1)train和Inference采用不同的forward函数。
(2)在inference时,forward部分加入了循环和判断,循环所有classifier,如果满足条件就提前returen。
任务:image classification
数据集:CIFAR 10, CIFAR 100, Tiny ImageNet
训练方法:加权的end-to-end
作者认为预训练backbone+final exit会影响前面exit的性能,因此进行end-to-end training, 并给每个exit加权ti,
ti的值逐渐增大并不超过对应的Ci(15%,30%,45%,60%,75%,90%)
网络backbone:VGG16, ResNet56, Wide-ResNet-32-4, MobileNet
Exit branch设计:
(1)数量:6
(2)结构:mix pooling, fully connection
(3)位置:按照15%,30%,45%,60%,75%,90%的flops放置
(4)退出策略:exit branch输出作为置信度
在这里插入图片描述
【SCAN: A Scalable Neural Networks Framework Towards Compact and Efficient Models】2019 NeurIPS
关键词:multi-exit, attention,自蒸馏
code(torch): https://github.com/ArchipLab-LinfengZhang/pytorch-scalable-neural-networks
问题:从代码上看,作者并没有实现adaptively inference,而是计算了所有branch的输出,再判断是否满足阈值条件。
任务:image classification
数据集:CIFAR 100, ImageNet
训练方法:
(1)end-to-end training
(2)自蒸馏,用final exit蒸馏前面的exit
(3)特征损失,最后一层ResBlock与前面的ResBlock输出的特征损失,L2计算
网络backbone:
Exit branch设计:
(1)数量:3
(2)结构:加入了attention
(3)位置:
(4)退出策略:branch输出的最大概率作为置信度
阈值设定: dic = {0: 0.98, 1: 0.97, 2: 0.98, 3: 0.95}
在这里插入图片描述
【Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self Distillation】2019 ICCV
关键词:multi-exit, 自蒸馏
code(torch): https://github.com/ArchipLab-LinfengZhang/pytorch-self-distillation
任务:image classification
数据集:CIFAR 100, ImageNet
训练方法:ene-to-end, 自蒸馏,提出了三个损失:
(1)特征损失,最后一层ResBlock与前面的ResBlock输出的特征损失,CE计算,在每个branch的输出特征后接了一个adaptation layer(几层全连接)
(2)蒸馏损失:最后一个branch作为teacher蒸馏前面的Branch,CE散度计算
(3)分类损失:交叉熵
网络backbone:ResNet
Exit branch设计:
(1)数量:3
(2)结构:bottleneck+fc+softmax
(3)位置:每个ResBlock后面
(4)退出策略:
在这里插入图片描述
【Improved Techniques for Training Adaptive Deep Networks】2019 ICCV
关键词:自蒸馏
code(torch): https://github.com/kalviny/IMTA
任务:image classification
数据集:CIFAR 10, CIFAR 100, ImageNet
训练方法:
(1)end-to-end,加入梯度平衡
文章指出,如果按顺序训练每个branch会存在矛盾:训练earlier branch和latter branch,模型学到的特征信息不同,相互存在影响。因此采用end-to-end方法
文章指出,如果end-to-end中损失仅仅采用所有branch的加权求和,由于网络的重叠会产生梯度不平衡的问题。随着branch增加,梯度会逐渐增大使得训练不稳定。
为此,文章提出了gradient equilibrium(GE),梯度平衡。
(2)自蒸馏,用final branch作为teacher蒸馏前面的branch,采用KL散度。
(3)前面的classifier会向后面的classifier传递信息,类似residual结构。
网络backbone:
Exit branch设计:
(1)数量:
(2)结构:
(3)位置:
(4)退出策略:
在这里插入图片描述
【BranchyNet: Fast Inference via Early Exiting from Deep Neural Networks】2016 ICPR
关键词:multi-exit
任务:image classification
数据集:MNIST, CIFAR 10
训练方法:加权end-to-end
作者发现,在损失中,给予更早的exit更大权重能涨点,更多的image更早退出。
网络backbone:LeNet, AlexNet, ResNet
Exit branch设计:
(1)数量:2
(2)结构:卷积层
(3)位置:
(4)退出策略:用branch输出的概率的熵作为置信度, 阈值用实验来获取,根据acc和latency综合考虑
在这里插入图片描述
【Multi-Exit Semantic Segmentation Networks】2021-CVPR
关键词:自蒸馏
任务:Semantic segmentation
数据集:COCO, PASCAL VOC
训练方法:
(1)训练backbone和其中一个exit branch,并轮流训练所有branch
(2)冻结backbone和最后一个exit branch,单独训练所有branch
(3)self-distillation,采用最后一级exit作为teacher蒸馏前面的exit
网络backbone:ResNet50 MobileNetV2
Exit branch设计:
(1)数量:
(2)结构:FCN-Head, DLB-Head
(3)位置:
(4)退出策略:exit branch输出作为置信度
方法:
(1) Multi-exit network
(2) two-staged training process
(3) Positive Filtering Distillation
优点:低延迟,高性能的语义分割在这里插入图片描述
【Distillation-Based Training for Multi-Exit Architectures】2019 ICCV
关键词:自蒸馏
任务:image classification
数据集:CIFAR100,ImageNet
训练方法:end-to-end, Distillation Training(创新点), semi-supervise
Distillation Training优点:(1)涨点(2)不需要结构改变(3)简单实现(4)可用于半监督、小样本的multi-exit场景
蒸馏相关知识见 知识蒸馏 distillation
网络backbone:Multi-Scale DenseNet, 出自“Multi-scale dense networks for resource efficient image classification.”
trick:
(1)All exits are trained at the same time and on the same data.
(2)采用最后一级exit作为teacher来蒸馏前面的exit (self distillation),见下图
(3)在training过程中,network往往会变得更加自信,因此,需要越来越高的温度来“软化”它们的输出,我们通过在训练期间提高温度来实现这一点。
为此,我们引入了一种自适应退火方案,旨在保持教师的输出大致恒定:我们将分类器的置信度定义为输出概率最大值。
设μ为期望教师置信度的上限。我们将温度初始化为τ0=1,当teacher对当前batch的平均温度调整置信度超过μ时,温度t会乘以常数τ∗ > 1
在这里插入图片描述
【MSD: MULTI-SELF-DISTILLATION LEARNING VIA MULTI-CLASSIFIERS WITHIN DEEP NEURAL NETWORKS】2019 CVPR
关键词:MULTI-SELF-DISTILLATION 多级自蒸馏
任务:image classification
数据集:Cifar 100
训练方法:
网络backbone:ResNet
在这里插入图片描述

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值