【论文阅读笔记】知识蒸馏:一项调查 | CVPR 2021 | 近万字翻译+解释

news/2025/2/22 10:49:03

目录

1 引言

2 知识

2.1 Response-Based Knowledge

2.2 Feature-Based Knowledge

2.3 Relation-Based Knowledge

3 蒸馏方案

3.1 Offline Distillation

3.2 Online Distillation

3.3 Self-Distillation

4 师生架构

5 蒸馏算法

5.1 Adversarial Distillation

5.2 Multi-Teacher Distillation

5.3 Cross-Modal Distillation

5.4 Graph-Based Distillation

5.5 Attention-Based Distillation

5.6 Data-Free Distillation

5.7 Quantized Distillation

5.8 Lifelong Distillation

5.9 NAS-Based Distillation

6 性能比较

7 应用

7.1 KD in Visual Recognition

7.2 KD in NLP

7.3 KD in Speech Recognition

7.4 KD in Other Applications

8 结论与讨论

8.1 挑战

8.2 未来方向



论文题目:Knowledge Distillation: A Survey

论文地址:https://arxiv.org/pdf/2006.05525

【摘要】近年来,深度神经网络在工业界和学术界都取得了成功,特别是在计算机视觉任务中。深度学习的巨大成功主要得益于其对大规模数据进行编码和对数十亿模型参数进行机动的可扩展性。然而,将这些繁琐的深度模型部署在资源有限的设备上,如手机和嵌入式设备,不仅计算复杂度高,而且存储需求大,是一个挑战。为此,人们发展了多种模型压缩加速技术知识蒸馏作为模型压缩与加速的代表类型,有效地将一个小的学生模型从一个大的教师模型中学习出来。迅速受到社会各界的关注。本文从知识类别、训练方案、师生结构、蒸馏算法、性能比较应用等方面对知识蒸馏进行了全面的综述。此外,简要回顾了知识蒸馏中的挑战,并对未来的研究进行了讨论和展望。

关键词 深度神经网络·模型压缩·知识蒸馏·知识迁移·师生架构

1 引言

为了开发高效的深度模型,最近的工作通常集中在如下:

1 )深度模型的高效构建模块,包括深度可分离卷积

2 )模型压缩与加速技术,分以下几类

参数修剪和共享:这些方法专注于从深度神经网络中移除不必要的参数而不会对性能产生任何显著影响。这一类又分为模型量化、模型二值化、结构矩阵和参数共享。

低秩分解:这些方法通过使用矩阵和张量分解来识别深度神经网络的冗余参数。

迁移紧凑卷积滤波器:这些方法通过迁移或压缩卷积滤波器来去除不必要的参数。

知识蒸馏( KD ):这些方法将较大的深度神经网络中的知识蒸馏成一个小的网络。

从本质上讲,知识蒸馏系统知识蒸馏算法师生架构3个关键部分组成。知识蒸馏的一般师生框架如图1所示。

图1知识蒸馏的一般师生框架。

本文对知识蒸馏进行了全面的综述。本次调查的主要目的是:

提供知识蒸馏的概述,包括几种典型的知识蒸馏架构

综述了知识蒸馏的最新进展,包括算法和对不同现实场景的应用;

基于知识转移的不同视角,包括不同类型的知识、训练方案、蒸馏算法和结构以及应用,解决知识蒸馏的一些障碍,并为知识蒸馏提供见解。我们的调研主要从知识类型、蒸馏方案、蒸馏算法、性能比较和不同应用领域等广泛的角度对知识蒸馏进行了研究。

本文的组织结构如图2所示。

2 知识

我们分以下几类讨论不同形式的知识:基于响应的知识、基于特征的知识和基于关系的知识。教师模型内部不同类别知识的直观示例如图3所示。

图3深度教师网络中反应性知识、特征性知识和关系性知识的来源示意图。

2.1 Response-Based Knowledge

基于响应的知识通常是指教师模型最后一个输出层的响应。其主要思想是直接模仿教师模型的最终预测。基于响应的知识蒸馏对于模型压缩简单有效,在不同的任务和应用中得到了广泛的应用。给定一个logits z向量作为深度模型最后一个全连接层的输出,基于响应的知识的蒸馏损失可以表示为公式(1):

典型的基于响应的KD模型如图4所示。基于响应的知识可以用于不同类型的模型预测。

具体来说,软目标是输入属于类的概率,可以通过softmax函数估计如公式(2)所示:

如( Hinton等, 2015)所述,软目标包含来自教师模型的信息丰富的暗知识。因此,软馏分的蒸馏损失可以改写如公式(3)

为了便于理解基于响应的知识蒸馏,图5给出了一个vanilla知识蒸馏的基准模型,即蒸馏和学生损失的联合。

图5基准知识蒸馏( Hinton et al . , 2015)的具体架构。

由于软逻辑实际上是类概率分布,因此基于响应的知识蒸馏也仅限于监督学习

2.2 Feature-Based Knowledge

深度神经网络擅长在抽象性不断增加的情况下学习多个层次的特征表示。这被称为表示学习。因此,无论是最后一层的输出还是中间层的输出,即特征图,都可以作为监督学生模型训练的知识。具体来说,来自中间层的基于特征的知识是基于响应的知识的一个很好的扩展,特别是对于更薄和更深网络的训练

一般而言,基于特征的知识转移的蒸馏损失可以表示为公式(4):

其中, ft ( x )和fs ( x )分别是教师模型和学生模型中间层的特征图。一个通用的基于特征的KD模型如图6所示。图6基于泛型特征的知识蒸馏

我们还从特征类型、源层和蒸馏损失的角度总结了表1中不同类型的基于特征的知识。

虽然基于特征的知识迁移为学生模型的学习提供了有利的信息,但是如何有效地选择教师模型中的提示层和学生模型中的引导层还有待进一步研究。由于提示层和引导层的大小存在显著差异,如何合理地匹配教师和学生的特征表示也需要探索。

2.3 Relation-Based Knowledge

基于响应的知识和基于特征的知识都使用教师模型中特定层的输出基于关系的知识进一步探索不同层或数据样本之间的关系。一般而言,基于特征图关系的关系型知识蒸馏损失可以表示为公式(5):

如上所述,基于实例关系的关系型知识蒸馏损失可以表示为公式(6):

其中,( ti , tj )∈Ft和( si , sj)∈Fs,Ft和Fs分别为教师模型和学生模型的特征表示集合。ψt ( . )和ψ s ( . )分别为( ti , tj)和( si , sj)的相似度函数。LR2 ( . )是教师和学生特征表示之间的相关函数。一个典型的基于实例关系的KD模型如图7所示。图7基于泛型实例关系的知识蒸馏

基于关系的知识的不同类别的总结如表2所示。具体地,LEM ( . ),LH ( . ),LAW ( . )和‖.‖F分别为地心距,Huber损失,角度损失和Frobenius范数.

表2基于关系的知识总结

尽管最近提出了一些基于关系的知识,但是如何将特征图或数据样本中的关系信息建模为知识仍然值得进一步研究。

3 蒸馏方案

这一部分讨论了教师模型和学生模型的蒸馏方案(即训练方案)。根据教师模型是否与学生模型同步更新,知识蒸馏的学习方案可以直接分为离线蒸馏、在线蒸馏和自蒸馏3大类,如图8所示。

图8不同蒸馏。"预训练"的红色表示网络蒸馏前学习,"待训练"的黄色表示网络在蒸馏过程中学习

3.1 Offline Distillation

以往的知识蒸馏方法大多是离线工作的。因此,整个训练过程有两个阶段,分别是:

1 )大型教师模型在蒸馏前首先在一组训练样本上进行训练;

2 )教师模型用于提取logits或中间特征形式的知识,然后在蒸馏过程中用于指导学生模型的训练。

离线方法的主要优点是简单且易于实现

离线蒸馏方法通常采用单向知识迁移和两阶段训练过程。大老师和小学生之间的能力差距始终存在,学生往往在很大程度上依赖于老师。

3.2 Online Distillation

为了克服离线蒸馏的局限性,在线蒸馏被提出,以进一步提高学生模型的性能,特别是在没有大容量高性能教师模型的情况下。在线蒸馏中,教师模型和学生模型同时更新,整个知识蒸馏框架端到端可训练

在线蒸馏是一种具有高效并行计算的单阶段端到端训练方案。然而,现有的在线方法(例如,相互学习)通常无法解决在线环境下的高能力教师问题,因此进一步探索在线环境下教师与学生模型之间的关系成为一个有趣的课题。

3.3 Self-Distillation

在自我蒸馏中,教师和学生模型使用相同的网络。这可以看作是在线蒸馏的一个特例。

离线蒸馏是指知识渊博的教师向学生传授知识在线蒸馏意味着教师和学生共同学习自我蒸馏是指学生自己学习知识。这三种蒸馏由于各自的优势,可以相互结合,取长补短。

4 师生架构

在知识蒸馏中,师生架构是形成知识转移的一般载体。换言之,从教师到学生的知识获取和升华的质量也是由如何设计教师网络和学生网络来决定的。在知识蒸馏中,如何选择或设计合适的教师和学生结构,以更好地完成知识的获取和提取,是一个非常重要而又困难的问题。目前,教师和学生的模型设置几乎都是预先固定的,蒸馏过程中的尺寸和结构都是固定不变的,容易造成模型容量的差距。但是,如何具体设计教师的架构以及为什么它们的架构是由这些模型设置决定的几乎是缺失的。在这一部分中,讨论了教师模型和学生模型的结构之间的关系,如图9所示。

图9教师与学生模型的关系。

以往的大多数工作集中于设计教师和学生模型的结构或他们之间的知识转移方案。为了使一个小的学生模型与一个大的教师模型很好地匹配,以提高知识蒸馏的性能,自适应的师生学习体系结构是必要的。最近,知识蒸馏中神经结构搜索的思想,即在教师模型的指导下联合搜索学生结构和知识迁移,将是未来研究的一个有趣课题。

5 蒸馏算法

本节回顾了最近在知识蒸馏领域提出的知识转移的典型蒸馏方法。

5.1 Adversarial Distillation

GAN中的判别器估计样本来自训练数据分布的概率,而生成器试图利用生成的数据样本来欺骗判别器。受此启发,许多对抗性知识蒸馏方法被提出,以使教师和学生网络能够更好地理解真实的数据分布。

图10主要对抗性蒸馏方法的不同类别。

( a ) GAN中的生成器产生训练数据以提高KD性能;教师可以作为甄别者。

( b ) GAN中的判别器确保学生(也可作为发生器)模仿教师。

( c )教师和学生构成了一个生成器;在线知识蒸馏通过判别器进行强化。

一般来说,这种基于GAN的KD类别中使用的蒸馏损失可以表示为公式(7):

式中:Ft ( . )和Fs ( . )分别为教师模型和学生模型的输出。G ( z )表示给定随机输入向量z,生成器G生成的训练样本,LG是一个蒸馏损失,用来迫使预测和真实概率分布之间的匹配,例如交叉熵损失或KL散度损失。

此外,Shu等人( 2019 )使用了一种有效的中间监督,即压缩知识,以缓解教师和学生之间的能力差距。Wang et al ( 2018f )提出的一个代表性模型属于这一类,可以表述为公式(8):

其中G是一个学生网络,LGAN ( . )表示生成对抗网络中使用的典型损失函数,以使学生和教师之间的输出尽可能相似。

综上,从上述对抗蒸馏方法中可以总结出:GAN是通过教师知识迁移提升学生学习力的有效工具联合GAN和KD可以生成有价值的数据,提高KD的性能,克服数据不可用和不可访问的局限性KD可以用来压缩GANs

5.2 Multi-Teacher Distillation

在学生网络的训练过程中,多个教师网络可以单独使用,也可以整体使用。在一个典型的师生框架中,老师通常有一个大模型或一个大模型的集合。多教师蒸馏的通用框架如图11所示。图11多教师蒸馏的一般框架。

使用不同类型的知识和蒸馏方案的典型多教师蒸馏方法的总结如表3所示。表3使用不同知识类型和蒸馏方案的多教师蒸馏总结。基于响应的知识、基于特征的知识和基于关系的知识分别简称为" ResK "、" FeaK "和" RelK "

一般来说,多教师知识蒸馏可以提供丰富的知识和裁剪一个多功能的学生模型,因为不同的知识来自不同的教师。然而,如何有效地整合来自多个教师的不同类型的知识有待进一步研究。

5.3 Cross-Modal Distillation

跨模态蒸馏的通用框架如图12所示。

图12跨模态蒸馏的通用框架。为了简单起见,只展示了两种模态。

不同模态、知识类型和蒸馏方案的跨模态蒸馏总结如表4所示。

表4跨模态蒸馏与模态、知识类型和蒸馏的总结。

具体来说,可以看出知识蒸馏在跨模态场景下的视觉识别任务中表现良好。然而,当存在模态鸿沟(例如,不同模态之间缺乏成对样本)时,跨模态知识转移是一项具有挑战性的研究。

5.4 Graph-Based Distillation

基于图的蒸馏方法的主要思想是

1 )将图作为教师知识的载体;

2 )使用图来控制教师知识的消息传递。

基于图的知识属于基于关系的知识。基于图的蒸馏的通用框架如图13所示。

基于图的蒸馏可以传递数据的信息结构知识。然而,如何合理地构建图来建模数据的结构知识仍然是一项具有挑战性的研究。

5.5 Attention-Based Distillation

由于注意力能够很好地反映卷积神经网络的神经元激活情况,因此在知识蒸馏中使用了一些注意力机制来提高学生网络的性能。在这些基于注意力的KD方法中,定义了不同的注意力转移机制,用于从教师网络提取知识到学生网络。注意力迁移的核心是在神经网络的各层中定义用于特征嵌入的注意力图。也就是说,使用注意力映射函数传递关于特征嵌入的知识

5.6 Data-Free Distillation

一些无数据的KD方法已经被提出来用于克服由于隐私、合法性、安全性和保密性问题引起的数据不可用问题。正如"数据free"所暗示的,没有训练数据。取而代之的是新生成或综合生成的数据。

总之,无数据蒸馏中的合成数据通常是从预训练的教师模型的特征表示生成的,如图14所示。

尽管无数据蒸馏在数据不可用的情况下表现出了巨大的潜力,但它仍然是一个非常具有挑战性的任务,即如何生成高质量的多样化训练数据以提高模型的泛化能力。

5.7 Quantized Distillation

网络量化通过将高精度网络(例如, 32位浮点运算)转换为低精度网络(例如, 2位和8位),降低了神经网络的计算复杂度。同时,知识蒸馏旨在训练一个小模型,以获得与复杂模型相当的性能。量化蒸馏方法的框架如图15所示。

5.8 Lifelong Distillation

终身学习包括continual learning, continuous learning and meta-learning,旨在以类似于人类的方式进行学习。它积累了先前学习到的知识,同时也将学习到的知识转移到未来的学习中。知识蒸馏提供了一种有效的方法来保存和转移学习到的知识,而不会发生灾难性的遗忘。近年来,越来越多的基于终身学习的KD变体被开发出来。

5.9 NAS-Based Distillation

神经结构搜索( neural architecture search,NAS )是目前最流行的自动机器学习( auto machine learning,AutoML )技术之一,旨在自动识别深层神经模型并自适应地学习合适的深层神经结构。在知识蒸馏中,知识迁移的成功不仅取决于教师的知识,还取决于学生的架构。然而,大教师模式和小学生模式之间可能存在能力差距,导致学生难以从教师那里学好。为了解决这个问题,神经架构搜索被用于在基于Oracle和架构感知的知识蒸馏中找到合适的学生架构。此外,知识蒸馏被用于提高神经结构搜索的效率。在TGSA中,每一个架构搜索步骤都被引导去模仿教师网络的中间特征表示。学生的可能结构被有效地搜索,特征迁移被教师有效地监督。

6 性能比较

表5不同知识蒸馏方法在CIFAR10上的性能比较。值得注意的是,↑表示每个方法学习到的学生网络相对于相应的基线模型的性能提升。

表6不同知识蒸馏方法在CIFAR100上的性能比较。值得注意的是,↑表示每个方法学习到的学生网络相对于相应的基线模型的性能提升。

从表5和表6的性能比较中,可以总结出以下几个观察结果:

在不同的深度模型上可以实现知识蒸馏

通过知识蒸馏可以实现不同深度模型的模型压缩。

通过协同学习的在线知识蒸馏可以显著提高深度模型的性能。

自知识蒸馏可以很好地提升深度模型的性能;

离线蒸馏和在线蒸馏方法往往分别传递基于特征的知识和基于响应的知识;

轻量级深度模型(学生)的性能可以通过高能力教师模型的知识传递得到提升。

通过不同知识蒸馏方法的性能比较,可以很容易地得出结论,知识蒸馏是一种有效且高效的压缩深度模型的技术

7 应用

知识蒸馏作为深度神经网络压缩和加速的有效技术,已被广泛应用于人工智能的不同领域,包括视觉识别、语音识别、自然语言处理( NLP )、推荐系统等。此外,知识蒸馏还可以用于其他目的,如数据隐私和作为对抗攻击的防御。本部分简要回顾了知识蒸馏的应用。

7.1 KD in Visual Recognition

基于蒸馏视觉识别应用的两个主要观察结果如下:

知识蒸馏为多种不同的视觉识别任务提供了高效和有效的师生学习,因为轻量级的学生网络可以很容易地在高容量的教师网络的指导下进行训练

因为灵活的师生架构和知识转移,知识蒸馏可以充分利用复杂数据源中的不同类型的知识,例如跨模态数据,多领域数据和多任务数据以及低分辨率数据。

7.2 KD in NLP

关于面向自然语言处理的知识蒸馏的几点观察总结如下:

▲知识蒸馏提供了高效且有效的轻量级语言深度模型。大容量的教师模型可以从大量不同种类的语言数据中迁移出丰富的知识来训练一个小型的学生模型,使学生能够快速有效地完成许多语言任务。

▲师生知识迁移可以简单有效地解决许多多语言任务,因为来自多语言模型的知识可以相互转移和共享。

▲在深度语言模型中,序列知识可以有效地从大型网络转移到小型网络

7.3 KD in Speech Recognition

总的来说,基于知识蒸馏语音识别的一些观察可以总结如下:

▲轻量级学生模型可以满足语音识别的实际要求,例如实时响应,使用有限的资源和高识别精度。

由于语音序列的时间特性,许多教师-学生架构都建立在RNN模型上。一般来说,选择RNN模型作为教师,可以很好地保存和传输从真实声学数据到学生模型的时间知识。

▲序列级知识蒸馏可以很好地应用于性能良好的序列模型。事实上,帧级别的KD通常使用基于响应的知识,而序列级别的KD通常从教师模型的提示层转移基于特征的知识

▲利用师生知识转移的知识蒸馏可以很容易地解决跨域或跨模态的语音识别应用,如多口音和多语言语音识别。

7.4 KD in Other Applications

降低深度推荐模型的复杂度,提高推荐效率也是十分必要的。最近,知识蒸馏已成功应用于深度模型压缩和加速( Chen et al . , 2018b ;唐军和王永进, 2018 ;潘文卿等, 2019)的推荐系统中。在(唐军和王永进, 2018)中,知识蒸馏首先被引入到推荐系统中,并被称为排序蒸馏,因为推荐被表示为一个排序问题。

8 结论与讨论

近年来,知识蒸馏及其应用引起了人们的广泛关注。本文从知识、蒸馏方案、师生架构、蒸馏算法、性能比较和应用等方面对知识蒸馏进行了全面的综述。下面,我们讨论了知识蒸馏面临的挑战,并对知识蒸馏的未来研究提供了一些见解。

8.1 挑战

对于知识蒸馏来说,关键是有以下内容:

1 )从教师那里提取丰富的知识

2 )从教师那里迁移知识来指导学生的训练

因此,我们从知识的质量、蒸馏的类型、师生架构的设计以及知识蒸馏背后的理论等方面讨论了知识蒸馏中的挑战。

大多数KD方法利用了不同种类的知识,包括基于响应的、基于特征的和基于关系的知识。因此,了解每种知识类型的影响,以及不同类型的知识如何以互补的方式互相帮助是很重要的。例如,基于响应的知识有类似于标签平滑和模型正则化( Kim和Kim , 2017 ; Muller et al . , 2019 ;丁一汇等, 2019)的动机基于特征的知识通常用于模拟教师的中间过程而基于关系的知识用于捕获不同样本之间的关系。为此,在一个统一和互补的框架中对不同类型的知识进行建模仍然具有挑战性。

例如,来自不同提示层的知识可能会对学生模型的训练产生不同的影响:

1 )基于应答的知识来自最后一层

2 )来自深层暗示/引导层的基于特征的知识可能会受到过度规则化的影响

如何将丰富的知识从教师传递给学生是知识升华的关键步骤

现有的蒸馏方法大致可以分为离线蒸馏在线蒸馏蒸馏。离线蒸馏通常用于从复杂的教师模型中传递知识,而教师模型和学生模型在在线蒸馏和自我蒸馏的设置上具有可比性。为了提高知识迁移的效率,需要进一步研究模型复杂度与现有蒸馏方案或其他新型蒸馏方案( Sun et al , 2021)之间的关系。

目前,大多数KD方法侧重于新类型的知识蒸馏损失函数,而对师生体系结构的设计研究较少。事实上,除了知识和蒸馏算法外,教师和学生之间的结构关系也会显著影响知识蒸馏的性能。例如,一方面,最近的一些工作发现,由于教师模型和学生模型(张杰等, 2019b ; Kang et al , 2020)之间的模型能力差距,学生模型可以从一些教师模型中学习到的东西很少;另一方面,从早期关于神经网络容量的一些理论分析来看,浅层网络能够学习到与深层神经网络( Ba和卡鲁阿纳, 2014)相同的表示。因此,设计有效的学生模型或构建合适的教师模型仍然是知识蒸馏中具有挑战性的问题。

尽管知识蒸馏的方法和应用非常多,但对知识蒸馏的理解,包括理论解释和实证评价,还远远不够。例如,蒸馏可以被看作是一种带有特权信息( Lopez - Paz等, 2016)的学习形式。线性教师模型和线性学生模型的假设使得通过蒸馏( Phuong和朗佩, 2019a)来研究学生学习特征的理论解释成为可能。进一步地,Cho和Hariharan( 2019 )对知识蒸馏的效果进行了一些实证评估和分析。然而,深入理解知识蒸馏的可推广性,特别是如何衡量知识的质量或师生结构的质量,仍然是非常困难的。

8.2 未来方向

为了提高知识蒸馏的性能,最重要的因素包括什么样的师生网络架构,从教师网络中学习到什么样的知识从哪里蒸馏到学生网络。

针对深度神经网络的模型压缩加速方法通常分为四类,即参数剪枝和共享低秩分解迁移紧凑卷积滤波器知识蒸馏( Cheng et al . , 2018)。在现有的知识蒸馏方法中,仅有少量相关工作讨论了知识蒸馏与其他压缩方法的结合。例如,量化知识蒸馏,可以看作是一种参数剪枝方法,它将网络量化集成到师生架构中。因此,为了学习高效且有效的轻量级深度模型以便部署在便携式平台上,通过知识蒸馏和其他压缩技术的混合压缩方法是必要的,因为大多数压缩技术都需要重新训练/微调的过程。此外,如何确定应用不同压缩方法的合适顺序将是未来研究的一个有趣的课题。

除了对深度神经网络进行模型压缩以加速外,知识蒸馏还可以用于其他问题,因为师生架构上知识传递的自然特性。最近,知识蒸馏被应用于数据隐私安全、深度模型对抗攻击( Papernot et al , 2016)、跨模态( Gupta等, 2016)、多域( Asami et al , 2017)、灾难性遗忘( Lee et al . , 2019b)、深度模型加速学习( Chen等, 2016)、神经架构搜索效率( Bashivan et al , 2019)数据增强( Lee等, 2019a ; Gordon和Duh , 2019)等。大模型从未标注数据中学习到的特征表示也可以通过蒸馏( Noroozi等, 2018)对目标模型进行监督。为此,将知识蒸馏扩展到其他用途和应用可能是一个有意义的未来方向。

知识蒸馏的学习类似于人类的学习。将知识迁移推广到经典的、传统的机器学习方法(周黎安等, 2019b ;龚六堂等, 2018 ; You et al . , 2018 ; Gong et al . , 2017)上是可行的。例如,传统的两阶段分类法是基于知识蒸馏( Zhou et al , 2019b)的思想,恰当地投射到单个教师单个学生的问题上。此外,知识蒸馏可以灵活地部署到各种优秀的学习方案中,如对抗学习( Liu et al . , 2018)、自动机器学习( Macko et al . , 2019 ; Fakoor et al , 2020)、标签噪声过滤学习( Xia et al , 2018)、终身学习(翟志刚等, 2019)、强化学习( Ashok et al , 2018 ; Xu et al . , 2020c ; Zhao and Hospedales , 2020)等。因此,将知识蒸馏与其他学习方案相结合,对于未来的实际挑战将是有益的

至此,本文分享的内容就结束啦。


http://www.niftyadmin.cn/n/5862129.html

相关文章

ArcGIS Pro进行坡度与坡向分析

在地理信息系统中,坡度分析是一项至关重要的空间分析方法,旨在精确计算地表或地形的坡度,为地形特征识别、土地资源规划、环境保护、灾害预警等领域提供科学依据。本文将详细介绍如何利用ArcGIS Pro这一强大的地理信息系统软件,进…

【接口测试】使用Requests库发送POST请求

POST请求用于向服务器提交数据,比如提交一个表单新建一个用户、或修改一个用户信息等操作。 对于POST请求,我们可以通过浏览器开发者工具或者其他外部工具来进行抓包,得到请求的URL、请求头(request headers)以及请求…

XML Schema 元素替换

XML Schema 元素替换 引言 XML(可扩展标记语言)是一种用于存储和传输数据的标记语言。XML Schema 是一种用于定义 XML 文档结构的语言,它描述了 XML 文档的结构、数据类型和约束。在处理 XML 文档时,有时需要对特定的元素进行替换,以满足特定的需求。本文将介绍 XML Sch…

uniapp使用uts插件启动原生安卓Service

uniapp使用uts插件启动原生安卓Service 背景实现尾巴 背景 在上一篇文章中uniapp使用uts插件调用原生API,我们使用uts插件来实现了一个简单的例子来调用原生安卓平台的Toast。今天我们继续使用uts插件来实现一个稍微复杂点的例子,启动一个原生安卓平台的…

uni-app开发安卓和ios app 真机调试

一、安卓真机调试 首先打开我们的hbuilder项目,点击运行,如下所示 之后会弹出这个界面,安卓手机可以先打开开发者模式,然后用usb数据线将手机和电脑连接起来 这里讲一下怎么打开开发者模式,以小米手机为例 设置-我的…

[C#]C# winform部署yolov12目标检测的onnx模型

yolov12官方框架:github.com/sunsmarterjie/yolov12 【测试环境】 vs2019 netframework4.7.2 opencvsharp4.8.0 onnxruntime1.16.3 【效果展示】 【调用代码】 using System; using System.Collections.Generic; using System.ComponentModel; using System.…

说一下Http中常见的状态码和字段

部分内容来源:小林coding Http常见的状态码 1xx(信息性状态码) 100 Continue:客户端应继续其请求。101 Switching Protocols:服务器根据客户端的请求切换协议。 2xx(成功状态码) 200 OK&am…

如何确定服务器是否被黑客入侵爆破

服务器被黑客入侵爆破(如暴力破解密码或利用漏洞攻击)是网络安全中常见的威胁之一。这类攻击可能导致数据泄露、服务中断甚至系统完全失控。本文将详细介绍如何检测服务器是否被黑客入侵爆破,并提供实用的代码示例和解决方案。 一、黑客入侵…