知识蒸馏测试(使用ImageNet中的1000类dog数据,Resnet101和Resnet18分别做教师模型和学生模型)

在这里插入图片描述

当教师网络为resnet101,学生网络为resnet18时:

使用蒸馏方法训练的resnet18训练准确率都小于单独训练resnet18,使用蒸馏方法反而导致了下降。
当hard_loss的alpha为0.7时,下降了1.1
当hard_loss的alpha为0.6时,下降了1.7

说明当学生网络和教师网络训练准确率相差不多时,要给hard_loss权重大一点。

VanillaKD:Revisit the Power of Vanilla KnowledgeDistillation from Small Scale to Large Scale

摘要:采用更强的数据增强技术和使用更大的数据集可以直接缩小Vanilla KD与其他精心设计的KD变体之间的差距
Vanilla是基本的,普通的意思。 
也就是说: 采用更强的数据增强技术和使用更大的数据集可以缩小普通的知识蒸馏(KD)算法 和知识蒸馏(KD)算法变体之间的差距。
介绍: 大部分现有的知识蒸馏(KD)方法都是针对小规模基准(例如CIFAR[19])和小型师生对(例如Res34-Res18[2]和WRN40-WRN16[10])上比较有效。
仅仅在小规模数据集上探索知识蒸馏(KD)方法可能无法在实际场景中提供全面的理解。

基于logits的一些改进KD方法:

Geoffrey E.Hinton,Oriol Vinyals,and Jeffrey Dean.Distilling the knowledge in a neural network.arXivpreprint arXiv:1503.02531,2015.1,2,3,4,5,6,7,9

Tao Huang,Shan You,Fei Wang,Chen Qian,and Chang Xu.Knowledge distillation from a strongerteacher.In Advances in Neural Information Processing Systems,2022.

Borui Zhao,Quan Cui,Renjie Song,Yiyu Qiu,and Jiajun Liang.Decoupled knowledge distillation.InIEEE/CVF Conference on Computer Vision and Pattern Recognition,2022

在这里插入图片描述
当前最先进的方法: DKD,DIST

vanilla KD

Geoffrey E.Hinton,Oriol Vinyals,and Jeffrey Dean.Distilling the knowledge in a neural network.arXivpreprint arXiv:1503.02531,2015.1,2,3,4,5,6,7,9

DKD

Borui Zhao,Quan Cui,Renjie Song,Yiyu Qiu,and Jiajun Liang.Decoupled knowledge distillation.InIEEE/CVF Conference on Computer Vision and Pattern Recognition,2022.1,2,3,4,5,6,7,9,14

知识蒸馏方法汇总

原始的蒸馏方法

kd_loss_fn = KLDiv(temperature=args.temperature).cuda()

DIST

参数采用A2:
在这里插入图片描述

参数设置:

python -m torch.distributed.launch --nproc_per_node=8 train-kd.py /path/to/imagenet --model resnet50 --teacher beitv2_base_patch16_224 --teacher-pretrained /path/to/teacher_checkpoint --kd-loss dist --amp --epochs 300 --batch-size 256 --lr 5e-3 --opt lamb --sched cosine --weight-decay 0.02 --warmup-epochs 5 --warmup-lr 1e-6 --smoothing 0.0 --drop 0 --drop-path 0.05 --aug-repeats 3 --aa rand-m7-mstd0.5 --mixup 0.1 --cutmix 1.0 --color-jitter 0 --crop-pct 0.95 --bce-loss 1
import torch.nn as nn


def cosine_similarity(a, b, eps=1e-8):
    return (a * b).sum(1) / (a.norm(dim=1) * b.norm(dim=1) + eps)


def pearson_correlation(a, b, eps=1e-8):
    return cosine_similarity(a - a.mean(1).unsqueeze(1),
                             b - b.mean(1).unsqueeze(1), eps)


def inter_class_relation(y_s, y_t):
    return 1 - pearson_correlation(y_s, y_t).mean()


def intra_class_relation(y_s, y_t):
    return inter_class_relation(y_s.transpose(0, 1), y_t.transpose(0, 1))


class DIST(nn.Module):
    def __init__(self, beta=1.0, gamma=1.0, tau=1.0):
        super(DIST, self).__init__()
        self.beta = beta
        self.gamma = gamma
        self.tau = tau

    def forward(self, z_s, z_t, **kwargs):
        y_s = (z_s / self.tau).softmax(dim=1)
        y_t = (z_t / self.tau).softmax(dim=1)
        inter_loss = self.tau ** 2 * inter_class_relation(y_s, y_t)
        intra_loss = self.tau ** 2 * intra_class_relation(y_s, y_t)
        kd_loss = self.beta * inter_loss + self.gamma * intra_loss
        return kd_loss

# 调用
kd_loss_fn = DIST(beta=args.dist_beta, gamma=args.dist_gamma, tau=args.temperature).cuda()

论文:

Tao Huang,Shan You,Fei Wang,Chen Qian,and Chang Xu.Knowledge distillation from a strongerteacher.In Advances in Neural Information Processing Systems,2022.1,2,3,4,5,6,9,14
论文解读:
【知识蒸馏】 Knowledge Distillation from A Stronger Teacher
https://blog.csdn.net/AaaA00000001/article/details/129144417

代码

https://github.com/hunto/DIST_KD

待更新

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity--互动组件(Input Field)||Unity--互动组件(Scroll View)

Unity--互动组件(Input Field) 一个输入字段是一种方法,使文本控件可编辑; 此组件中的,交互,过渡,导航与文章(Unity--互动组件(Button))中的介绍…

【数据中台】开源项目(3)-Linkis

关于 Linkis Linkis 在上层应用程序和底层引擎之间构建了一层计算中间件。通过使用Linkis 提供的REST/WebSocket/JDBC 等标准接口,上层应用可以方便地连接访问MySQL/Spark/Hive/Presto/Flink 等底层引擎,同时实现统一变量、脚本、用户定义函数和资源文件…

TCA9548A I2C 多路复用器 Arduino 使用相同地址 I2C 设备

在本教程中,我们将学习如何将 TCA9548A I2C 多路复用器与 Arduino 结合使用。我们将讨论如何通过整合硬件解决方案来使用多个具有相同地址的 Arduino 的 I2C 设备。通过使用 TCA9548A I2C 多路复用器,我们将能够增加 Arduino 的 I2C 地址范围&#xff0c…

12.1平衡树(splay),旋转操作及代码

平衡树 变量定义 tot表示结点数量,rt表示根的编号 v[i]表示结点i的权值 fa[i]表示结点i的父亲节点 chi[i][2]表示结点i的左右孩子 cnt[i]表示结点i的权值存在数量,如1123,v[3]1,则cnt[3]2;就是说i3的三号结点的权值为1&…

深入理解贝叶斯分类与朴素贝叶斯模型(Naive Bayes, NB):从基础到实战

目录 贝叶斯分类 公式 决策规则 优点 贝叶斯分类器的例子——垃圾邮件问题 1. 特征(输入): 2. 类别: 3. 数据: 4. 模型训练: 注:类别先验概率 5. 模型预测: 朴素贝叶斯模…

为自己创建的游戏编程源码申请软件著作权详细流程(免费分享模板)

以为我这篇文章制作的游戏申请软件著作权为例 Ren‘py 视觉小说 交互式故事游戏制作过程学习笔记(Windows下实现)(多结局游戏)-CSDN博客 一、网站注册 申请软著时,所有的著作权人都需要在中国版权保护中心官网注册账号,并进行实名认证后,才…

【LeetCode】链式二叉树OJ题---C语言版

链式二叉树OJ题 一、单值二叉树(1)题目描述:(2)思路表述:(3)代码实现: 二、二叉树最大深度(1)题目描述:(2)思路…

java学习part26线程安全

136-多线程-同步代码块解决两种线程创建方式的线程安全问题_哔哩哔哩_bilibili 1.安全问题 关键在于某些数据操作 2.解决 2.1同步代码块 相当于给数据操作加了互斥锁 2.1.1在实现runnable接口的方式下 锁对象要求必须是唯一的,因为可以看成是谁占了这个对象&…

SpringBoot 是如何启动一个内置的Tomcat

为什么说Spring Boot框架内置Tomcat 容器,Spring Boot框架又是怎么样去启动Tomcat的?我简单总结下学习过程。 一:简单了解SpringBoot的启动类 我们都知道Spring Boot框架的启动类上是需要使用 @SpringBootApplication 注解标注的, @SpringBootApplication 是一个复合注解…

Jupyter Markdown 插入图片

首先截图 注意 这一步是关键的!! 它需要使用电脑自带的截图,用qq啊vx啊美图秀秀那些都不行哦。 截图之后复制: 然后快捷键粘贴到jupyter里面,它会生成一段代码(没有代码就是说截图形式不对)&a…

深入计算机系统看性能优化

一.引言 “性能优化”,从计算机诞生之初就一直伴随着计算机技术的发展,直到现在。将来也必定不会消失。这是因为每个人都会追求性价比,花最少的钱,办最多的事。生活中也一样,就比如说泡茶,但凡…

2023年12月03日新闻简报(国内国际)

新闻简报 每天三分钟,朝闻天下事。今天是:2023年12月03日,星期日,农历十月廿一,祝工作愉快,身体健康,生活喜乐: 👉👉国内新闻 1、1日凌晨,四川…

docker-速通

1.命令-镜像操作 docker pull nginx #下载最新版 docker pull nginx:1.20.1 #下载指定版本 镜像名:版本名(标签) docker images #查看所有镜像 # 如果只写镜像名实际就是redis redis:latest 记住这个不是命令 docker rmi 镜像名:版本号/镜像id…

Pandas教程06:DataFrame.merge数据的合并处理

DataFrame.merge() 是 pandas 库中用于合并两个DataFrame数据的方法。该方法主要用于根据一个或多个键(键可以是列名或索引)将两个 DataFrame 连接在一起,这个过程类似于 SQL 中的 JOIN 操作。 #我的Python教程 #微信公众号:wdPy…

【PTA-C语言】实验四-循环结构II

如果代码存在问题,麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 实验四-循环结构II 7-1 跟奥巴马一起画方块(分数 15)7-2 打印九九口诀表(分数 10)7-3 求符合给定条件的整数集(分数 15)7-4 求特殊方程…

网络虚拟化场景下网络包的发送过程

网络虚拟化有和存储虚拟化类似的地方,例如,它们都是基于 virtio 的,因而在看网络虚拟化的过程中,会看到和存储虚拟化很像的数据结构和原理。但是,网络虚拟化也有自己的特殊性。例如,存储虚拟化是将宿主机上…

爬虫学习-基础(HTTP原理)

目录 一、URL和URI 二、HTTP和HTTPS (1)HTTP (2)HTTPS (3)HTTP与HTTPS区别 (4)HTTPS对HTTP的改进:双问的身份认证 三、TCP协议 (1)TCP三次握手…

2000-2021年上市公司过度负债数据

2000-2021年上市公司过度负债数据 1、时间:2000-2021年 2、指标: 证券代码、证券简称、会计期间、上市日期、行业代码、行业名称、是否剔除ST或*ST股、是否剔除当年新上市、已经退市或被暂停退市的公司、产权性质、盈利能力、杠杆率行业中位数、成长性…

ELK高级搜索,深度详解ElasticStack技术栈-下篇

前言:ELK高级搜索,深度详解ElasticStack技术栈-上篇 14. search搜索入门 14.1. 搜索语法入门 14.1.1 query string search 无条件搜索所有 GET /book/_search结果: {"took" : 969,"timed_out" : false,"_shar…

架构图是什么,怎么做?

架构图是一种用来描述系统或软件的结构和组成的图形表示。它展示了系统中各个组件之间的关系、交互和功能。通过绘制架构图,可以更好地理解和沟通系统的设计和实现。 绘制架构图的软件 目前市场上有许多用于绘制架构图的软件工具,下面简单…