深度模型压缩论文(03)- Be Your Own Teacher: Improve the Performance of Convolutional Neural Networks via Self

文章目录

      • 1.摘要和背景
        • 1.1 摘要
        • 1.2 背景
      • 2.方法和贡献
        • 2.1 方法
        • 2.1.1 训练过程
      • 2.1.2 loss介绍
        • 2.2 贡献
      • 3.实验和结果
        • 3.1 实验
        • 3.2 结果
      • 4.总结和展望
        • 4.1 总结
        • 4.2 展望

主要贡献:基于网络蒸馏方法,提出了一种提升裁剪后模型的精度的方法!将训练时间大大缩短!
推荐指数:4颗星(5颗星满)

本系列是在阅读深度神经网络模型小型化方面论文时的笔记!内容大部分从论文中摘取,也会有部分自己理解,有错误的地方还望大家批评指出!

论文链接:Be Your Own Teacher: Improve the Performance of Convolutional Neural
Networks via Self Distillation
代码链接:github代码

1.摘要和背景

1.1 摘要

原文摘要:
Convolutional neural networks have been widely deployed in various application scenarios. In order to extend the applications’ boundaries to some accuracy-crucial domains,researchers have been investigating approaches to boost accuracy through either deeper or wider network structures, which brings with them the exponential increment of the computational and storage cost, delaying the responding time.
卷积网络被用于很多地方,其中很多人为了提高卷积网络的精度,对模型的深度和宽度进行增加,但是虽然模型的精度有所增加,但是模型的大小和模型的flops急剧增加,这是得不偿失的。
In this paper, we propose a general training framework named self distillation, which notably enhances the performance (accuracy) of convolutional neural networks through shrinking the size of the network rather than aggrandizing it. Different from traditional knowledge distillation - a knowledge transformation methodology among networks, which forces student neural networks to approximate the softmax layer outputs of pre-trained teacher neural networks, the proposed self distillation framework distills knowledge within network itself. The networks are firstly divided into several sections. Then the knowledge in the deeper portion of the networks is squeezed into the shallow ones. Experiments further prove the generalization of the proposed self distillation framework: enhancement of accuracy at average level is 2.65%, varying from 0.61% in ResNeXt as minimum to 4.07% in VGG19 as maximum. In addition, it can also provide flexibility of depth-wise scalable inference on resource-limited edge devices. Our codes will be released on github soon.
在本文中,提出了一种通用的训练框架,使用该框架,模型可以在不增加深度和宽度的基础上,提高模型的精度。提出的自蒸馏框架是一种网络间的知识转换方法,它要求学生神经网络近似于预先训练好的教师神经网络的softmax层的输出。该方法主要步骤为:1)将原始网络按照网络结构的特点分成几个浅层的网络;2)对分出来的浅层的网络分别使用网络蒸馏的方法(与传统的蒸馏方法还不一样,具体请看下面)。最后得出的结果发现使用提出的框架对网络进行训练比fine_turn效果好!

1.2 背景

  • 卷积网络由已经在图像分类,目标检测和语义分割方面取得了非常好的结果;一般提升网络精度的方法是度网络的深度和宽度增加,但是常常得到的结果是增加的精度与增加的计算量是不对等的,所以该方法有弊端。
  • 为了能够让网络在计算资源受限的平台上运行,则需要优化的目标是在满足资源限制的基础上,尽可能的降低裁剪后模型的精度;常用的方法包括:1)轻量级的网络设计;2)网络剪枝;3)网络量化等;但是如何提高裁剪后模型的精度是模型后优化问题。
  • 知识蒸馏是网络模型压缩中常用的方法,但是传统的知识蒸馏方法需要先预先训练一个大的强的老师网络,然后在指导不同结构的学生网络进行训练,从而达到将大网络(老师网络)的知识压缩到小网络(学生网络)。其中,大网络的训练和小网络结构的寻找是非常耗时的。
  • 本文提出一个方法,不需要训练老师网络也不需要寻找学生网络,老师网络和学生网络使用相同的结构,然后只需要一步就可以使用知识蒸馏的方法对网络精度进行提升。
    在这里插入图片描述

2.方法和贡献

2.1 方法

在这里插入图片描述
上图是本文提出的自蒸馏训练框架图。从图中可以看出,论文首先将原始网络分成了4个浅层的网络,然后在每个浅层的网络的输出加上一个瓶颈卷积,全连接层和softmax层,并能够输出预测的类别的概率。网络的前传播过程主要分为4个,其中前面3个为浅层网络的前向通道,最后一个为老师网络的前向通道。网络中的loss也分为3类。下面将详细介绍。

2.1.1 训练过程

  • 根据初始网络的深度和结构,将初始网络分为几个浅层网络。其中初始网络作为老师网络,浅层网络和深层网络作为学生网络(如果我们选择的学生网络的结构是和老师网络一样的,那么深层网络就是学生网络,否则浅层网络是学生网络。)
  • 在每一个浅层网络的后面加上一个瓶颈层,全连接层和softmax层,构成一个学生分类器。其中使用瓶颈卷积的目的是减少每个浅层分类器之间的影响。
  • 在训连教师网络的基础上,使用知识蒸馏方法对学生网络进行训练,最终训练好学生网络。
    在这里插入图片描述

2.1.2 loss介绍

  • loss Source1:Cross entropy loss from labels to not only the deepest classifier, but also all the shallow classifiers;衡量的是深层网络和浅层网络的输出与真实标签之间的差异。
  • loss Source2:KL (Kullback-Leibler) divergence loss under teacher’s guidance;衡量的是老师网络和学生网络的分布差异性。
  • loss Source3:L2 loss from hints;衡量的是学生网络和老师网络特征之间的差异性;
    在这里插入图片描述

2.2 贡献

  • 提出了自蒸馏的训练框架,使得模型在不增加大小,flops和时间的基础上,提高模型的精度。
  • 自蒸馏提供了一个可在不同深度执行的单一神经网络,允许在资源有限的边缘设备上进行自适应的精度-效率权衡。即:我们可以在原始网络的基础上,根据资源的要求在进行网络的裁剪(分成很多浅层网络)。
  • 在常用的5种卷积模型和2种数据集上进行了实验,发现使用本文所提出的的方法得到的结果都比自学习的方法要好。

3.实验和结果

3.1 实验

  • 5个常用的模型:ResNet,WideResNet,Pyramid ResNet,ResNeXt,VGG
  • 两个数据集:cifar100 和ImageNet

3.2 结果

  • 不同模型在cifar100上,使用本文方法和不使用本文方法的结果对比:
    在这里插入图片描述

1.从实验的结果可以看出,无论是哪种模型,使用本文方法训练后的模型精度都会比直接训练的模型精度高。
2.针对大部分模型,当网络截取0.75 的时候,得到模型的精度已经比基准模型要好了。
3.集成的结果比使用本文方法训练后全部网络效果要好。

  • 不同模型在ImageNet上,使用本文方法和不使用本文方法的结果对比:
    在这里插入图片描述

1.从实验的结果可以看出,实验结果和cifar100上的结果类似。

  • 不同方法在cifar100和不同模型上的结果对比,其中baseline是不采用蒸馏方法得到的结果,其余的都采用了蒸馏的方法。
    在这里插入图片描述

1.从表中的结果可以看出,使用蒸馏方法训练得到的模型精度比不使用蒸馏得到的要高。
2.本文所提方法得到的精度都要比其他蒸馏方法的结果要高。

  • 本文方法与使用深度监督方法在cifar100和不同模型上的结果对比。
    在这里插入图片描述

1.通过表中你的结果可以看出,无论哪种模型,本文所提出的的方法相比于只是用深度监督方法的结果要好。

  • 本文方法在模型速度和精度方面的权衡结果。
    在这里插入图片描述

1.初始网络的层数越深,则加速效果会更加明显!
2.从实验的结果来看,在几乎相同的裁剪率下,legr算法得到的模型的精度比本文提出的方法要高一些!
3.是否可以将网络拆分的更多,使得速度的增加粒度更细

4.总结和展望

4.1 总结

  • 提出的自蒸馏训练框架能够大大的增加训练后模型的精度。
  • 相比于传统的蒸馏方法,提出了一段式的蒸馏方法,将模型的训练时间缩短。
  • 相比于其他改进的蒸馏方法,模型的精度得到提升
  • 不仅可以提升模型的精度,还可以在一定精度的要求下,对模型的结构进行裁剪。

4.2 展望

  • Automatic adjustment of newly introduced hyperparameters

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关系数据库——基础

数据库系统概论 四个基本概念 数据:数据库中存储的基本对象,描述一个事物的符号记录,数据和其语义不可分开说 数据库(DB):是长期储存在计算机内、有组织的、可共享的大量数据的集合。 数据库管理系统&a…

Python(27)-模块

模块、包1.模块导入的方式2.使用as给模块取一个别名(大驼峰命名法)3.从模块中导入部分工具4.从模块中导入全部工具5.模块搜索顺序6__name__7.包8.发布模块、安装模块、卸载包9.pip安装第三方模块本系列博文来自学习《Python基础视频教程》笔记整理&#…

如何使用docker配置深度学习开发环境

文章目录1.底层驱动的安装1.1 操作系统的安装1.2 显卡驱动的安装1.3 cuda的安装2.使用docker配置深度学习开发环境2.1 docker的安装2.2 nvidia_docker的安装2.3 安装过程中的问题2.3.1 docker和nvidia_docker的版本不匹配的问题。2.3.2 解决每次运行docker命令的时候要加sudo.2…

反射全解

反射的概念 反射的引入: Object obj new Student(); 若程序运行时接收到外部传入的一个对象,该对象的编译类型是Object,但程序又需要调用该对象运行类型的方法: 1.若编译和运行类型都知道,使用 instanceof判断后&…

CRegKey 注册表操作

1.简介 CRegKey提供了对系统注册表的操作方法,通过CRegKey类,可以方便的打开注册表的某个分支或子键(CRegKey::Open),可以方便的修改一个键的键值(CRegKey::SetValue),也可以查询某…

进程基础

进程的基本概念 程序顺序执行的特征: 1)顺序性:处理机严格按照程序所规定的顺序执行,每一步操作必须在下一步操作开始前执行 2)封闭性:程序在封闭的环境下运行,程序独占资源,资源的状…

用Docker容器自带的tensorflow serving部署模型对外服务

相信很多人和我一样,在试图安装tensorflow serving的时候,翻遍了网上的博客和官网文档,安装都是以失败而告终,我也是一样,这个问题折磨了我两个星期之久,都快放弃了。幸运的是在同事的建议下,我…

C资源

云风最近写了一篇博客《C语言的前世今生》。作为长期使用C语言开发网络游戏服务器的程序员,云风是有理由写这样一篇文字,不过还是感觉谈的不够深入,C语言在业界使用的现状没有怎么描写,有些意犹未尽。在这里想比较系统的谈谈个人对…

面试题汇总---深度学习(图像识别,NLP内容)

文章目录1.基本概念1.1 为什么神经网络中深度网络的表现比广度网络表现好?1.2 推导BP算法1.3 什么是梯度消失和梯度爆炸?1.4 常用的激活函数有哪些?1.5 常用的参数更新方法有哪些?1.6 解决过拟合的方法?数据层面模型层…

Python(28)-文件,os模块

文件1. 文件2. 文件的基本操作3. 读取文件open()3.1 文件指针: 标记从哪一个位置开始读取数据.3.2 文件的打开方式mode3.3 文件按行读取3.3.1 readline()3.3.2 readlines()4.文件输出f.write(),print()5.文件复制5.1 小文件复制(搬家)5.2 大文件复制&…

IOCP的程序

C代码 #include <winsock2.h> #include <mswsock.h> #include <windows.h> #include <stdio.h> #include <stdlib.h> #include <assert.h> #include "vld.h" #pragma message("automatic link to ws2_32.lib and…

PaperNotes(3)-图像分割-RCNN-FCN-Boxsup

图像分割算法对比小结1.{基本概念}2.{R-CNN}2.1R-CNN 网络结构选择性搜索算法为什么选择SVM作分类器边框回归2.2{R-CNN 训练}2.3{R-CNN实验结果}2.4{R-CNN语义分割}2.5{补充材料}2.5.1{R-CNN建议区域放缩}2.5.2{IOU阈值设置不一样的原因}2.5.3{Bounding-box回归修正}2.6{R-CNN存…

Python模块(3)--PIL 简易使用教程

PIL模块-用与记1.图片导入Image.open()2.图像显示.show()4.查看图片属性.format,.size,.mode3.图像格式转换.convert()4.图像模式“L”&#xff0c;“RGB”,"CYMK"5. 图片旋转.rotate()旋转方式1&#xff1a;旋转不扩展旋转方式2&#xff1a;旋转扩展旋转方式3&#…

输入输出系统

I/O设备&#xff1a;输入输出和存储功能的设备 I/O设备的分类 按传输的速度&#xff1a; 低速设备&#xff08;如键盘、鼠标、语音输入输出设备&#xff09; 中速设备&#xff08;如行式打印机、激光打印机等&#xff09; 高速设备&#xff08;如磁带机、磁盘机、光盘机等&…

模拟银行家算法

介绍 data.h #ifndef _Data_h_ #define _Data_h_#include <stdio.h> #include <stdlib.h> #include <string.h>#define ElemType PCB #define Status int #define true 1 #define false 0 #define OK 1 #define ERROR 0 #define RESOURCE_NUM …

js知识点汇总

1.本门课的作用&#xff08;JavaScript的作用&#xff09;所有基于Web的程序开发基础 2.一种计算机客户端脚本语言&#xff0c;主要在Web浏览器解释执行。 3.浏览器中Javascript&#xff0c;用于与用户交互&#xff0c;以及实现页面中各种动态特效 4.在HTML文件中&#xff0…

关于Java中String的问题

String 对象的两种创建方式&#xff1a; String str1 "abcd";//先检查字符串常量池中有没有"abcd"&#xff0c;如果字符串常量池中没有&#xff0c;则创建一个&#xff0c;然后 str1 指向字符串常量池中的对象&#xff0c;如果有&#xff0c;则直接将 st…

如何判断对象已经死亡

引用计数 给对象中添加一个引用计数器&#xff0c;每当有一个地方引用它&#xff0c;计数器就加 1&#xff1b;当引用失效&#xff0c;计数器就减 1&#xff1b;任何时候计数器为 0 的对象就是不可能再被使用的。 这个方法实现简单&#xff0c;效率高&#xff0c;但是目前主流…

算法(2)-二叉树的遍历(递归/迭代)python实现

二叉树的遍历1.深度优先DFS1.1 DFS 递归解法1.1.1先序遍历1.1.2中序遍历1.1.3后序遍历1.2 DFS迭代解法1.2.1先序遍历1.2.2中序遍历1.2.3后序遍历2.广度优先BFS3.二叉树的最大深度3.1递归3.2迭代4.翻转二叉树4.1递归4.1迭代5.合并两棵二叉树5.1递归5.2迭代有两种通用的遍历树的策…

利用posix_fadvise清理系统中的文件缓存

利用posix_fadvise清理系统中的文件缓存leoncom c/c,unix2011-08-03当我们需要对某段读写文件并进行处理的程序进行性能测试时&#xff0c;文件会被系统cache住从而影响I/O的效率&#xff0c;必须清理cache中的对应文件的才能正确的进行性能测试。通常清理内存可以采用下面的这…