• 【SCAN】2019-NIPS-SCAN: A Scalable Neural Networks Framework Towards Compact and Efficient Models-论文阅读


    SCAN

    2019-NIPS-SCAN: A Scalable Neural Networks Framework Towards Compact and Efficient Models

    来源:ChenBong 博客园

    • Institute:Tsinghua
    • Author:Linfeng Zhang,Zhanhong Tan,Chenglong Bao
    • GitHub:/
    • Citation: 14

    Introduction

    attention,self KD,dynamic network,model ensemble,genetic algorithm

    2019-ICCV-Be Your Own Teacher 的兄弟篇

    在推理过程中实时调整 latency 和 acc 的 trade off 的动态(结构)网络。对不同深度的中间层插入多个分类器的一类方法(MSDNet)的改进。

    Motivation

    人类的视觉系统:简单的图片快速识别,遇到困难的图片花更多的时间/脑力(算力)进行辨认,人类的大脑自然而然地会对不同难度的图片花费不同的识别开销,因此提出动态网络的概念(sample individual)

    之前的动态网络方法存在的问题:

    • 在 backbone 不同深度的中间层插入多个分类器的方法(MSDNet),由于不同深度的分类器共享 backbone 参数,不同深度的分类器有消极的互相影响,导致多个分类器的性能都不如单独训练时的性能
    • 宽度可变的方法(Silmmable),窄网络的计算,不能被宽网络重用,导致每个宽度都要从头推理,浪费了推理时的计算开销/时间
    • 对于自适应的推理图的方法(BlockDrop,SkipNet),有着比较复杂的 dropping/skipping 策略,导致加速效果不好

    之前模型压缩方法存在的问题:

    • 传统的压缩方法专注与模型结构的冗余性,而忽略了样本难度的差异,不应该将不同难度的样本同等对待

    MSDNet:

    image-20200729194405049

    Silmmable:

    image-20210112190243107

    BlockDrop:

    image-20210316165108072

    SkipNet:

    image-20210316165044436

    Contribution

    • 加入了知识蒸馏和注意力机制,使得不同深度的多个分类器不再有消极的相互影响,反而可以相互受益。
    • 在不同深度的中间层插入多个分类器,使得不同分类器的计算可以被重用
    • 本文的方法可以与任何结构的 backbone 网络结合(其他方法可能需要重新设计backbone网络,如MSDNet), 实现动态推理。
    • 第一次将网络压缩和加速与注意力机制结合(精度提高),使用静态的推理图(加速效果好)

    Method

    image-20210316165927400

    横向为backbone网络,将backbone网络分为不同的stage,在stage之间插入纵向模块

    纵向分为3部分,分别为 Backbone 网络,Attention 模块,Classifier 模块:

    • Backbone:和原始网络一样
    • Attention 模块:conv,deconv,sigmoid
    • Shallow Classifier 模块:Bottleneck layer,FC

    Self distillation

    Shallow Classifier 模块由 Bottleneck layer&& 和 FC 组成;

    浅层分类器和最终分类器做蒸馏:

    image-20210316172511357

    q 是 softmax,F是 feature map

    Attention modules

    Attention modules&& 由 conv,deconv,sigmoid 组成,输出一个0/1的 attention map,和原始的feature map作dot product,得到 classifier-specific features

    cifar100,res50,x=1-4指不同的shallow classifier,x=5指 ensemble所有 classifier 的结果

    image-20210316173457296

    如果中间层直接插入分类器,由于每个分类器都会使靠近它的层学习有利于分类的(高级)特征,而深的分类器又希望浅层学习低级特征,导致互相干扰。即使用了 self distillation,还是比 individual training 差

    加入 Attention module,学习 classifier-specific features,从图2可以看出,性能有了很大的提高

    Scalable inference mechanism

    低层的classifier输出的置信度高于某个阈值(softmax值大),则认为预测结果足够准确,即提前退出。

    如何设置阈值?为每个classifier单独设置阈值,且使用进化算法搜索每个classifier的阈值

    总体算法流程:

    image-20210316183812026

    Experiments

    CIFAR100

    image-20210316184153707

    虚线上横向的方块是不同classifier的性能,纵向上的方块是ensemble的性能;三角是对应颜色曲线的 baseline

    image-20210316184043736
    • 所有的模型中,classifier 2/4就已经超过了baseline
    • 在精度不掉的情况下,平均(FLOPs)加速比 2.17x,平均(参数)压缩率 3.20x
    • 平均在增加4.4%的计算开销下,有4.05%的性能增长

    ImageNet

    image-20210316184059848

    加速比

    image-20210316185545666

    Discussion

    Attention module 学到了什么?

    将attention map的不同channel对应位置元素求均值,左到右应该是不同深度的 attention module

    image-20210316185428050

    不同深度classifier预测正确的比例

    image-20210316185600688

    观察:简单的数据集主要在浅层的classifier被分类出来,而困难的数据集需要在较深的classifier才能被分类出来

    作用:

    • 指导压缩,对于cifar10/100,深层存在很大的冗余
    • 作为一个metric来评估数据集的困难程度

    Conclusion

    Summary

    pros:

    • 折线图,柱状图,attention可视化图
    • 热点较多,但框架和之前的一些动态网络比起来还是比较简单清晰高效的

    cons:

    • 对 bottleneck layer 的设计没有具体的解释
    • attention module 本质上也只是加了2个layer,为什么加了conv和deconv就可以大幅提高性能?没有具体的解释;attention 可视化有hand-pick的空间

    与Be your own teacher的区别

    Be your own teacher:

    image-20210316193225457

    SCAN:

    image-20210316165927400

    本文与Be your own teacher相比,只多了attention模块

    Be your own teacher:

    image-20210316193440826

    SCAN:

    image-20210316184043736 image-20210316184059848 image-20210316173457296

    两篇文章的框架和训练思路基本都相同,主要是出发点不同,Be your own teacher是从自蒸馏的角度,SCAN是从动态计算的角度。

    To Read

    Reference

    MSDNet blog

    Slimmable blog

    2019-ICCV-Be Your Own Teacher Improve the Performance of Convolutional Neural Networks via Self Distillation

    Be Your Own Teacher blog

  • 相关阅读:
    Unity Shader入门精要学习笔记
    Unity Shader入门精要学习笔记
    zabbix_server部署,启动,及端口未监听问题
    Linux Git服务器安装
    GitHub
    nginx 认证访问web
    Jenkins可持续集成
    svn
    mariadb安装配置
    nginx跟tp5无法加载控制器
  • 原文地址:https://www.cnblogs.com/chenbong/p/14545784.html
Copyright © 2020-2023  润新知