(论文翻译)PRUNING FILTER IN FILTER《滤波器中的剪枝滤波器》

news2025/4/22 8:57:05

公式不清楚的地方请对照英文原文进行查看:原文链接

ABSTRACT

剪枝已成为现代神经网络压缩和加速的一种非常有效的技术。现有的剪枝方法可分为两大类:滤波器剪枝(FP)和权重剪枝(WP)。与WP相比,FP在硬件兼容性方面胜出,但在压缩比方面失败。为了收敛两种方法的强度,我们提出在滤波器中对滤波器进行剪枝。具体来说,我们将滤波器F∈RC×K×K视为K个×K条,即1 × 1个滤波器∈RC,然后通过修剪条纹而不是整个滤波器,我们可以在硬件友好的同时实现比传统FP更细的粒度。我们称我们的方法为SWP (Stripe-Wise Pruning)。SWP的实现是通过引入一个新的可学习的矩阵,称为滤波器骨架,其值反映了每个滤波器的形状。正如一些最近的工作表明,修剪的结构比继承的重要权值更重要,我们认为单个过滤器的结构,即形状,也很重要。通过大量的实验,我们证明了SWP比之前基于fp的方法更有效,并在cifa10和ImageNet数据集上实现了最先进的剪枝率,而精度没有明显下降。有关代码载于[this url].(https://github.com/fxmeng/Pruning-Filter-in-Filter)

1 Introduction简介

深度神经网络(DNN)在许多领域取得了显着进展,包括语音识别[1],计算机视觉[2,3],自然语言处理[4]等。然而,由于DNN中的大量参数,模型部署有时是昂贵的。为了缓解这样的问题,已经提出了许多方法来压缩DNN并减少计算量。这些方法可分为两大类:权重修剪(WP)和滤波器(信道)修剪(FP)。

WP是细粒度修剪方法,其修剪各个权重,例如,其值接近0,在网络[5,6]内,导致稀疏网络而不牺牲预测性能。然而,由于非零权重的位置是不规则和随机的,我们需要额外记录权重位置,并且由于网络内部的随机性,WP修剪的稀疏网络无法像FP那样以结构化的方式呈现,使得WP无法在通用处理器上实现加速。相比之下,基于FP的方法[7,8,9]修剪卷积层内的滤波器或通道,因此修剪后的网络仍然以结构方式组织良好,并且可以在通用处理器中轻松实现加速。标准过滤器修剪流水线如下:1)训练更大的模型直到收敛。2)3)对修剪后的网络进行微调。[10]观察到训练修剪模型随机初始化也可以实现高性能。因此,重要的是网络架构,而不是训练的权重。在本文中,我们认为,不仅是网络的架构,但架构的过滤器本身也很重要。[11,12]也得出类似的论点,即具有较大内核大小的滤波器可能导致更好的性能。然而,计算成本昂贵。因此,对于给定的输入特征图,[11,12]使用具有不同内核大小的过滤器(例如,1 × 1、3 × 3和5 × 5)来执行卷积并连接所有输出特征图。但是每个过滤器的核大小是手动设置的。设计高效的网络结构需要专业的经验和知识。我们想知道,如果我们可以学习的最佳内核大小ofeach过滤器修剪。我们的直觉如图1所示。我们知道深度网络的结构对学习任务很重要。例如,残差网络更容易优化,并且表现出比VGG更好的性能。然而,我们发现网络内部隐藏着另一种结构,我们称之为“过滤器的形状”。来自图1,并非滤波器中的所有条纹都有相同的贡献[13]。一些条带具有非常低的l1范数,这指示可以从网络中移除这样的条带。保持滤波器的功能同时留下最少数量的条纹的形状被称为最佳形状。为了捕获与滤波器权重一起的“滤波器形状”,我们提出了“滤波器骨架(FS)”来学习该“形状”属性并使用FS来指导有效的修剪(即学习最佳形状)(见第3节)。与传统的基于FP的剪枝方法相比,该剪枝方法实现了更细的粒度,因为我们使用条带而不是整个过滤器进行操作。

在这里插入图片描述

图1:左图显示了两种网络结构。右图显示了学习的VGG16中滤波器沿着信道维度的平均l1范数。

类似地,在[14,15,16]中引入的按组修剪也实现了比滤波器/信道修剪更精细的粒度,其移除位于某个层中的所有滤波器之间的相同位置的权重。然而,分组式修剪打破了对过滤器的独立假设。举例来说,每一滤波器中的权重的无效位置可不同。通过使用分组修剪来正则化网络,网络可能会在大的修剪率下失去表示能力(参见第4.2节)。在本文中,我们还提供了一个比较组明智的修剪实验。相比之下,SWP保持每个滤波器彼此独立,这不打破滤波器之间的独立假设。在整个实验中,SWP实现了更高的修剪比相比,过滤器明智的,通道明智的,和组明智的修剪方法。我们总结了我们的主要贡献如下:

  • 我们提出了一种新的修剪范式,称为SWP。SWP实现了比传统过滤器修剪更细的粒度,并且修剪后的网络仍然可以被有效地推断
  • 我们引入过滤器骨架(FS),以有效地学习每个过滤器的形状,并深入分析FS的工作机制。使用FS,我们在CIFAR-10和ImageNet数据集上实现了最先进的剪枝率,而没有明显的准确性下降。

2 Related Work相关工作

权重修剪: 权重修剪(WP)可以追溯到最佳脑损伤和最佳脑外科医生[17,18],其基于损失函数的Hessian来修剪权重。[5]基于l1范数准则修剪网络权重并重新训练网络以恢复性能,并且该技术可以通过修剪、量化和霍夫曼编码被并入深度压缩流水线[6]。[19]通过进行动态连接修剪来降低网络复杂度,其将连接拼接并入整个过程中以避免不正确的修剪,并使其成为持续的网络维护。[20]通过求解凸优化程序来移除每个DNN层处的连接。该程序在每一层寻找一组稀疏的权重,使层的输入和输出与最初训练的模型保持一致。[21]提出了一种频域动态修剪方案,以利用CNN上的空间相关性。在每次迭代中动态地修剪频域系数,并且考虑到不同频带对准确度的不同重要性,有区别地修剪不同频带。[22]将每个条带分成多个组,并修剪每个组中的权重。然而,这些非结构化修剪方法的一个缺点是所得到的权重矩阵是稀疏的,这在没有专用硬件/库的情况下不能导致压缩和加速[23]。

过滤器/通道修剪: 过滤器/通道修剪(FP)在过滤器、通道甚至层的级别上进行修剪。由于原始卷积结构仍然被保留,因此不需要专用硬件/库来实现益处。与权值剪枝[5]类似,[7]也采用了l1范数准则来剪枝不重要的滤波器。代替修剪滤波器,[8]提出通过基于LASSO回归的信道选择和最小二乘重构来修剪信道。[9]优化BN层中的缩放因子γ作为信道选择指示符以决定哪个信道是不重要的并且可以被移除。[24]介绍了ThiNet,正式建立过滤器修剪作为一个优化问题,并揭示了我们需要修剪过滤器的统计信息计算的基础上,从它的下一层,而不是当前层。类似地,[25]优化了最终响应层的重建误差,并为每个通道传播“重要性分数”。[26]首先提出利用AutoML进行模型压缩,其利用强化学习来提供模型压缩策略。[27]提出了一种有效的结构化修剪方法,该方法以端到端的方式联合修剪过滤器以及其他结构。具体来说,作者引入了一个软掩模来缩放这些结构的输出,方法是定义一个具有稀疏正则化的新目标函数,以将基线和网络的输出与该掩模对齐。[28]为深度CNN引入了一个预算正则化修剪框架,自然适合传统的神经网络训练。该框架包括一个可学习的掩蔽层,一个新的预算意识的目标函数,并使用知识蒸馏。[29]提出了一种称为Gate Decorator的全局滤波器修剪算法,该算法通过将其输出乘以通道缩放因子来转换香草CNN模块,即门,并在CIFAR数据集上实现了最先进的结果。[30,10]通过大量的实验结果深入分析了初始化是如何影响剪枝的。

在这里插入图片描述

图2:不同类型修剪的可视化。



表1:测试每个只学习过滤器“形状”的网络的准确性

在这里插入图片描述

分组修剪: [14,15]介绍了分组修剪,它使用组套索正则化来学习神经网络中的结构化稀疏性。使用“im2col”实现方式作为滤波器式和通道式修剪,仍然可以有效地处理组式修剪。[31]进一步探讨了一个完整的范围内的修剪粒度,并评估它如何影响预测精度。[16]通过提出动态正则化方法改进了分组剪枝。然而,逐组修剪移除位于某一层中的所有滤波器之间的相同位置的权重。由于每个滤波器的无效位置可能不同,因此按组修剪可能导致网络丢失有效信息。相比之下,我们的方法保持每个过滤器彼此独立,从而可以导致一个更有效的网络结构。不同类型的修剪在图2中示出。

修剪中的Mask: 使用(软)掩码来表示网络中组件的重要性已经在修剪工作中进行了深入研究[32,33,34,35,27,36,37,9,8]。然而,大多数工作都是从滤波器或通道的角度来设计掩模,很少有工作关注条纹。此外,过滤器骨架(FS)不仅仅是一个掩码,我们认为每个过滤器都有两个属性:重量和形状。FS是学习“形状”属性。从本文的第3.1节中,网络仍然具有良好的性能,仅学习滤波器的“形状”,保持滤波器权重随机初始化。

3 The proposed Method提出的方法

3.1 Filter Skeleton (FS)过滤器骨架(FS)

引入FS是为了学习过滤器的另一个重要属性以及它们的权重:形状,其是与滤波器的条纹相关的矩阵。假设第1个卷积层的权重W1的大小为RN×C×K×K,其中,N是滤波器的数量,C是信道维度,并且K是核大小。则该层中FS的大小为RN×K×K。即,FS中的每个值对应于滤波器中的条带。首先用全一矩阵初始化每层中的FS。在训练过程中,我们将过滤器的权重乘以FS。在数学上,损失由下式表示:
在这里插入图片描述

,其中I表示FS,在这里插入图片描述表示点积。对于I,前向过程是:
在这里插入图片描述
.关于W和I的梯度为:
在这里插入图片描述
其中MH、MW分别表示特征图的高度和宽度。当p MH或q MW时,Xlc,p,q = 0< 1 or p >< 1 or q >(这对应于填充和移位[38,39]过程)。

在这里插入图片描述

图3:使用过滤器骨架(FS)进行训练和推理。

根据(1),在训练期间联合优化滤波器权重和FS。在训练之后,我们将I合并到滤波器权重W(即,W ←W I),并且仅在评估期间使用W。因此,当应用推理时,不会给网络带来额外的成本。整个过程如图3所示。为了进一步显示“形状”属性的重要性,我们进行了一个实验,其中过滤器的权重是固定的,只有FS可以在训练过程中进行优化。结果示于表1中。可以看出,在不更新过滤器权重的情况下,网络仍然可以获得不错的结果。我们还发现,使用过滤器骨架,网络的权重变得更加稳定。图4显示了基线网络和由过滤器骨架(FS)训练的网络的权重分布。可以看出,通过FS训练的权重是稀疏和平滑的,其对输入图像具有低方差,从而导致稳定的输出。因此,网络对输入数据或特征的变化是鲁棒的。

3.2 Stripe-wise pruning with FS带FS的条带修剪

从图1中可以看出,并非所有条带在网络中的贡献都是相等的。为了构建紧凑且高度修剪的网络,过滤器骨架(FS)需要稀疏。即,当FS中的一些值接近0时,可以修剪对应的条带。因此,当使用FS训练网络时,我们对FS施加正则化以使其稀疏:
在这里插入图片描述
,其中α控制正则化的大小,g(I)表示I上的l1范数惩罚,这通常用于许多修剪方法[7,8,9]。具体地,g(I)被写为:
在这里插入图片描述
在这里插入图片描述
图4:这张左图和右图分别显示了基线和FS在第一个卷积层上的权重分布。在该层中,每个过滤器具有9个条带。每个迷你图示出了位于所有滤波器的相同位置的条纹的l1范数。还报告了平均值和标准差。

从(5),FS隐式地学习每个滤波器的最佳形状。在第4.4节中,我们将滤波器的形状可视化,以进一步显示这种现象。为了进行有效的修剪,我们设置了一个阈值δ,FS中对应值小于δ的条带在训练期间将不会更新,并且可以在之后进行修剪。值得注意的是,当对修剪后的网络进行推理时,由于过滤器被破坏,我们不能直接使用过滤器作为一个整体对输入特征图进行卷积。相反,我们需要独立地使用每个条带来执行卷积,并对每个条带产生的特征图求和,如图5所示。在数学上,SWP中的卷积过程被写为:

在这里插入图片描述

其中Xl+1n,h,w是第1 + 1层中的特征图的一个点。根据(7),SWP仅修改传统卷积过程中的计算顺序,因此没有向网络添加额外的操作(触发器)。值得注意的是,由于每个条纹在过滤器中具有其自己的位置。SWP需要记录所有条带的索引。然而,与整个网络参数相比,它的成本很小。假设第1个卷积层的权重W1的大小为RN×C×K×K。对于SWP,我们需要记录N ×K ×K个索引。与记录N ×C ×K ×K指标的个体权重剪枝相比,权重剪枝的指标减少了C倍。此外,我们不需要记录过滤器的索引,如果在这样的过滤器中的所有条纹从网络中删除,SWP退化到传统的过滤器式修剪。为了与传统的基于FP的方法进行公平的比较,我们在计算网络参数的数量时添加了索引的数量。

与传统的基于FP的修剪相比,SWP有两个优点:

  • 假设核的大小为K×K,则SWP比传统的基于FP的剪枝算法获得了K2倍更细的粒度,从而获得了更高的剪枝率。
  • 对于某些数据集,例如,CIFAR-10,网络修剪SWP保持高性能,即使没有一个微调过程。这将SWP与需要多个微调过程的许多其他基于FP的修剪方法分开。原因是FS学习每个滤波器的最佳形状。通过修剪不重要的条纹,过滤器不会丢失很多有用的信息。相比之下,FP剪枝直接删除可能损坏网络学习到的信息的过滤器。
    在这里插入图片描述
图5:SWP中的修剪过程。

4 Experiments实验

本节安排如下:在第4.1节中,我们介绍了论文中的实现细节;在4.2节中,我们比较了SWP和分组剪枝;在第4.3节中,我们展示了SWP在CIFAR-10和ImageNet数据集上实现了最先进的剪枝率,与滤波器、通道或形状剪枝相比;在第4.4节中,我们可视化修剪的过滤器;在第4.5节中,我们进行消融研究以研究超参数如何影响SWP。

4.1 Implementation Details实施细节

数据集和模型: CIFAR-10 [40]和ImageNet [41]是两个流行的数据集,并在我们的实验中采用。CIFAR-10数据集包含10个类的50 K训练图像和10 K测试图像。ImageNet包含128万张训练图像和50 K张测试图像,用于1000个类。在CIFAR-10上,我们在两种流行的网络结构上评估了我们的方法:VGG16 [42]、ResNet56 [43]。在ImageNet数据集上,我们采用ResNet 18。

基线设置:我们的基准设置与[9]一致。对于CIFAR-10,该模型被训练了160个时期,批量大小为64。初始学习率被设置为0.1,并在时期80和120处将其除以10。简单的数据增强(随机裁剪和随机水平翻转)用于训练图像。对于ImageNet,我们遵循官方的PyTorch实现1,该实现训练模型90个epoch,批量大小为256。初始学习率被设置为0.1,并且每30个时期将其除以10。图像大小调整为256 × 256,然后从原始图像中随机裁剪224 × 224区域进行训练。测试是在224 × 224像素的中心裁剪上进行的。

SWP设置:基本超参数设置与基线一致。在(5)中,α被设置为1 e-5,并且阈值δ被设置为0.05。对于CIFAR-10,我们在条带选择后不对网络进行微调。对于ImageNet,我们在修剪后执行一次性微调。

4.2 Group-wise pruning vs stripe-wise pruning分组剪枝与条带剪枝

由于分组剪枝也可以通过骨架实现,因此我们基于骨架执行分组剪枝和SWP。图6显示了结果。我们可以看到,在相同数量的参数或触发器下,SWP与分组剪枝相比实现了更高的性能。我们还发现,在分组修剪中,layer2.7.conv1和layer2.7.conv2将被标识为无效(即,当剪枝率达到76.64%时,该层中的所有权重将被该算法剪枝)。然而,这种现象并没有出现在条带式修剪,即使有87.36%的修剪率,这进一步验证了我们的假设,即分组式修剪打破了独立的假设上的过滤器,很容易失去代表性的能力。相比之下,SWP保持每个过滤器彼此独立,从而可以实现更高的剪枝率。

4.3 Comparing SWP with state-of-art methods SWP与最新方法的比较

我们比较SWP与最近的国家最先进的修剪方法。表2和表3分别列出了CIFAR-10和ImageNet上的比较。在表2中,IR [16]是按组修剪方法,除SWP之外的其他方法是按滤波器或按通道方法。我们可以看到GBN [29]甚至优于形状修剪方法。根据我们的分析,分组剪枝将网络的权重规则化在所有过滤器的相同位置,这可能会导致网络丢失有用的信息。因此,分组修剪可能不是最佳选择。然而,SWP优于其他方法的大幅度。例如,当修剪VGG 16时,SWP可以将参数的数量减少92.66%,将触发器的数量减少71.16%,而不会损失网络性能。在ImageNet上,SWP也可以实现比最近的基准测试方法更好的性能。例如,SWP可以将FLOP降低54.58%而没有明显的精度下降。我们想强调的是,即使SWP带来了条带的索引,成本也很小。在计算参数个数时,我们在表2和表3的计算中加入了这些指标。SWP的剪枝率仍然是显着的,并达到最先进的结果。

在这里插入图片描述

图6:比较SWP与CIFAR-10上的按组修剪。骨架是VGG 16。

表2:在CIFAR-10数据集上比较SWP与最先进的基于FP的方法。ResNet 56的基线准确率为93.1% [29],而VGG 16的基线准确率为93.25% [7]。

在这里插入图片描述

表3:比较SWP与ImageNet数据集上的最新剪枝方法。所有方法都使用ResNet 18作为主干,基线top-1和top-5的准确率分别为69.76%和89.08%。

在这里插入图片描述
在这里插入图片描述

图7:通过SWP修剪的VGG19过滤器的可视化。从上到下,我们根据滤波器的频率在这样的层中显示滤波器。白色表示通过SWP去除过滤器中的相应条带。
表4:该表显示了α和δ如何影响SWP结果。实验在CIFAR-10上进行。网络是ResNet 56。

在这里插入图片描述

4.4 Visualizing the pruned filter可视化修剪的过滤器

我们将VGG19的过滤器可视化,以显示通过SWP修剪后的稀疏网络的外观。VGG19的核大小为R3×3,因此每个过滤器中有9个条带。每个过滤器有29种形式,因为每个条带都可以删除或保留。我们根据每种形式的频率显示每层的过滤器。图7显示了可视化结果。有一些有趣的现象:

  • 对于每个层,大多数过滤器直接用所有条带修剪。
  • 在中间层中,大多数保留的过滤器仅具有一个条带。然而,在靠近输入的层中,大多数保留的层具有多个条带。表明冗余大多发生在中间层。

我们相信这种可视化可以更好地理解CNN。在过去,我们总是把滤波器作为CNN中的最小单元。然而,从我们的实验中,过滤器本身的架构也很重要,可以通过修剪来学习。更多的可视化结果可以在补充材料中找到。

4.5 Ablation Study消融研究

在本节中,我们将研究不同的超参数如何影响剪枝结果。我们主要研究了(1)中的加权系数α和剪枝阈值δ。表4示出了实验结果。我们发现α = 1e − 5和δ = 0.05给出了可接受的剪枝率和测试精度。

5 Conclusion结论

在本文中,我们提出了一个新的修剪范式称为SWP。代替修剪整个滤波器,SWP将每个滤波器视为多个条带的组合(即,1 × 1过滤器),并对条带执行修剪。我们还引入了过滤器骨架(FS),以有效地学习过滤器的最佳形状进行修剪。通过大量的实验和分析,我们证明了SWP框架的有效性。未来的工作可以开发更有效的正则化器来进一步优化DNN。

6 Supplementary Material补充材料

在这里插入图片描述

图8:在CIFAR-10上比较Filter Skeleton与Lasso正则化器。骨架是VGG 16。

这是论文“过滤器中的修剪过滤器”的补充材料。第6.1节显示,我们可以使用SWP来继续修剪由其他基于FP(过滤器修剪)的方法修剪的网络。第6.2节显示,在SWP框架中,Filter Skeleton比lasso正则化更好。第6.3节显示了更多的可视化结果。

6.1 Continual Pruning in SWP SWP中的连续剪枝

由于SWP可以达到比传统过滤器修剪方法更细的粒度,我们可以使用SWP继续修剪网络修剪由其他方法修剪没有明显的准确性下降。表5示出了实验结果。可以观察到,SWP可以帮助其他基于FP的修剪朝向更高的修剪比率。

表5:该表显示了CIFAR-10数据集上的变体修剪方法。A+B表示先用方法A修剪网络,然后用方法B继续修剪网络。

在这里插入图片描述

6.2 Filter Skeleton v.s. Group Lasso过滤器骨架与集团套索

在本文中,我们使用过滤器骨架(FS)来学习每个过滤器的最佳形状,并修剪不重要的条纹。然而,存在其他技术来正则化网络以使其稀疏。例如,基于Lasso的正则化器[15],它直接正则化网络权重。我们在本节中提供了与Group Lasso正则化器的比较。图8显示了结果。我们可以看到,在相同的参数或触发器数量下,具有过滤器骨架的PFF实现了更高的性能。

6.3 More Visualization Results更多可视化结果

在本节中,我们将展示SWP修剪后的网络。图9显示了ResNet 56在CIFAR-10上的可视化结果。可以观察到,(1)SWP在中间层上具有较高的修剪比率,例如,层2.3至层2.9。(2)每一条带的修剪率是不同的,并且在每一层上变化。表6显示了ImageNet上的修剪网络。例如,在layer1.1.conv2中,原始的64个过滤器的大小为R62×3×3。修剪后的条纹大小为R62×1×1,共300条。该层中的剪枝比为1 − 300×62×1×1 64×62×3×3 = 0.47。
在这里插入图片描述
在这里插入图片描述

图9:在图中,我们展示了每层的剩余条带的比率。每个滤波器具有从s1到s9索引的9个条带。
表6:该表显示了ImageNet上修剪的ResNet18的结构。

在这里插入图片描述

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

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

相关文章

海外APP外包开发第三方支付集成

APP开发过程中有收费功能时就需要集成第三方支付&#xff0c;相比传统的信用卡支付&#xff0c;第三方支付极大的提高了用户的支付便捷度&#xff0c;也推广了第三方支付的使用范围。海外有哪些支付渠道以及如何集成&#xff0c;今天和大家分享这方面的知识&#xff0c;希望对大…

微信小程序canvas生成图片并保存

需求&#xff1a; 做一个类似下图的功能。图片内容是动态的&#xff0c;用canvas画出来&#xff0c;生成临时图片&#xff0c;再保存。 实现&#xff1a; <view class"canvasBox"><canvas canvas-id"myCanvas" class"myCanvas">&l…

Burp的JS API接口过滤插件

Burp的JS API接口过滤插件 过滤js文件中的接口信息&#xff0c;并显示接口内容在js文件中的上下文。从js文件中过滤你需要的敏感信息&#xff0c;且支持在配置文件中自定义检出规则。完全被动检测&#xff0c;不会有任何主动请求行为。防止不可控请求的产生。

前端js react vue怎么实现在线预览doc文档

先说结论&#xff1a; 目前在纯前端层面没有很好的方案&#xff0c;基本都需要服务端的介入。 1.方案一&#xff1a;使用view.officeapps 优点&#xff1a;简单易用&#xff0c;无需配置 缺点&#xff1a;文档需要支持外网访问&#xff0c;且文档会是公开可见的&#xff0c…

skywalking java agent集成

目录 概述 裸机集成 docker集成 k8s集成 高级特性 Trace api Logback traceId协同 跨线程trace 附录 Agent参数 本地缓存队列参数 是否显示Sql参数 其他参数 概述 java 应用skywalking集成主要以java agent形式接入。 官方详细文档点击skywalking-java集成查看。…

负载均衡的知识点

目录 1.负载均衡是什么 2.负载均衡的分类 客户端负载均衡&#xff1a; 服务端负载均衡&#xff1a; 软件实现&#xff1a;根据OSI模型可以分为四层负载均衡和七层负载均衡 硬件实现&#xff1a; 附1&#xff1a;客户端和服务端&#xff1a; 附2&#xff1a;OSI…

备战秋招 | 笔试强训

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、使用printf函数打印一个double类型的数据&#xff0c;要求&#xff1a;输出为10进制&#xff0c;输出左对齐30个字符&#xff0c;4位精度。以下哪个选项是正确的&#xff1f; A. %-30.4e B. %4.…

基于DETR的人脸伪装检测

基于DETR的人脸伪装检测 前言前提条件实验环境项目地址LinuxWindows DETR训练自己的数据集修改models/detr.py中的参数进行训练进行预测 相关资源免费获取参考 前言 本文是个人使用DETR训练自己的COCO格式数据集的应用案例&#xff0c;由于水平有限&#xff0c;难免出现错漏&am…

​python接口自动化(二十八)--html测试 报告——下(详解) ​

简介 五一小长假已经结束了&#xff0c;想必大家都吃饱喝足玩好了&#xff0c;那就继续学习吧。一天不学习&#xff0c;自己知道&#xff1b;两天不学习&#xff0c;对手知道&#xff1b;三天不学习&#xff0c;大家知道&#xff1b;一周不学习&#xff0c;智商输给猪。好了开个…

excel怎么样将某列所有单元格中文本的非中文字符或数字或字母全部删除?

目录 1. 简述2. 函数功能及参数介绍&#xff08;1&#xff09;功能&#xff08;2&#xff09;参数介绍 3. 完整VBA代码4. 宏代码使用方法5. 效果图 1. 简述 当我们要处理大量行数的excel数据时候&#xff0c;有时某列中有些行中的单元格内容中含有我们不想要的部分&#xff08…

功率开关集成电路TWH8751路灯自动控制器/双D触发器CD4013路灯控制器电路设计

采用功率开关集成电路TWH8751的路灯自动控制器 本例介绍的光控路灯&#xff0c;在白天不工作&#xff0c;夜晚能自动点亮&#xff0c;可用于街道或农村场院等场合 。 一、电路工作原理 电路原理如图 19 所示。 该光控路灯电路由电源电路和光控电路组成&#xff0c;如图所示…

Latch up (闩锁效应)

Latch-up latch up 是指cmos晶片中, 在电源power VDD和地线GND(VSS)之间由于寄生的PNP和NPN双极性BJT(Bipolar Junction Transistors)相互影响而产生的一低阻抗通路, 它的存在会使VDD和GND之间产生大电流。    In the simplest way, the latch-up issue can be defined as a …

ModaHub魔搭社区:AI原生云向量数据库MIlvus Cloud实现 HNSW

实现 HNSW HNSW 并不简单,因此我们只在此处进行最简单的实现。像之前一样,我们首先创建一组(128 维)向量的数据集: >>> import numpy as np >>> dataset = np.random.normal(size=(1000, 128)) 第一步是构建 HNSW 索引。为此,我们需要将每个向量添加…

前端基础知识学习——圆角、透明圆角(十四)

文章目录 圆角方法一圆角方法二&#xff08;推荐&#xff09;透明圆角方法一透明圆角方法二&#xff08;推荐&#xff09; 圆角方法一 /* 添加圆角 方法1&#xff1a;border-radius cs3不兼容*/.bo{width: 100px; height: 200px;border: 1px solid #e5e5e5;margin:30px aut…

DMA-GD32

DMA-GD32 DMA模块包括DMA控制器、主模式控制电路、从模式控制电路和数据通道FIFOS. 主、从模式控制电路分别负责控制DMA模块在PCle总线的主模式和从模式下的工作状态 FIFOS实现数据缓冲通道,对总线端的高速信号和外设上本地低速信号进行速率匹配和缓冲 DMA模块的上述结构使得它…

政府-管制

垄断带来的问题 政府以四种方式中的一种对垄断问题作出反应 管制垄断者的行为努力使垄断行业更有竞争性:反垄断(反托拉斯)把一些私人垄断变为公有企业什么也不做管制 政府管制垄断者收取的价格。 如果价格定在边际成本上,资源配置就将是最有效率的。 自然垄断的边际成本定…

centos7.9php8swoole5swoft2环境安装遇到确实redis扩展的解决办法

1、环境介绍 运行系统&#xff1a;centos7.9 php版本&#xff1a;php8.0.29 swoole版本&#xff1a;swoole5 swoft版本&#xff1a;swoft2.02、遇到的问题 The requested PHP extension ext-redis * is missing from your system. Install or enable PHPs redis extension。这…

流量监控异常行为分析案例

分析原理 正常的基于TCP的网络流量&#xff0c;都是先建立TCP连接&#xff0c;再传输数据&#xff0c;然后断开连接。 而网络中经常存在中毒系统、配置错误等问题&#xff0c;导致网络中存在单向请求现象&#xff0c;这些信息也会在网络流量中体现。 NetInside自动发现大量连…

easyphp

说起来是easy但是&#xff0c;代码审计对于我来说有点小难 唯一觉得好的地方是因为基本上每一步都有回显&#xff0c;可以依照回显一步步注入 <?php highlight_file(__FILE__); $key1 0; $key2 0;$a $_GET[a]; $b $_GET[b];if(isset($a) && intval($a) > 60…

apple pencil一代的平替有哪些品牌?苹果平板的触控笔

随着苹果Pencil系列的推出&#xff0c;平替电容笔在国内市场得到了较好的发展&#xff0c;随之的销量&#xff0c;也开始暴涨&#xff0c;苹果pencil因为价格太高&#xff0c;导致很多人买不起。目前市场上&#xff0c;有不少的平替电容笔&#xff0c;可以替代苹果的Pencil&…