28_EfficientNetV2网络详解
V1:https://blog.csdn.net/qq_51605551/article/details/140487051?spm=1001.2014.3001.5502
1.1 简介
EfficientNetV2是Google研究人员Mingxing Tan和Quoc V. Le等人在2021年提出的一种深度学习模型,它是EfficientNet系列的最新迭代,旨在提供更小的模型尺寸、更快的训练速度以及更高的计算效率,同时保持或提升模型的性能。EfficientNetV2通过一系列创新设计,在图像识别和其他视觉任务上取得了显著的性能提升,下面是对EfficientNetV2的详细介绍:
1. 背景与动机
EfficientNetV1的成功展示了通过复合缩放(compound scaling)策略,可以在不增加过多计算负担的情况下,显著提升模型性能。然而,随着模型复杂度的增加,训练时间和资源需求也相应增长。EfficientNetV2正是为了解决这一问题,目标是在保证高效率的同时,进一步提升模型的训练速度和参数效率。
2. 主要贡献
-
训练感知的神经架构搜索(Training-aware NAS):EfficientNetV2采用了一种新的神经架构搜索方法,该方法在搜索过程中直接考虑了模型的训练速度,而不只是最终的评估性能。这意味着搜索出来的模型不仅准确率高,而且训练起来更快。
-
Fused-MBConv结构:在EfficientNetV1中使用的MBConv(Mobile Inverted Residual Bottleneck)结构基础上,EfficientNetV2引入了Fused-MBConv。这种结构通过融合扩张卷积(expansion convolution)和深度可分离卷积(depthwise convolution),用一个标准的3x3卷积层替换,从而简化了网络结构,减少了计算成本,同时加速了训练过程。
-
更高效的缩放策略:EfficientNetV2不仅沿用了复合缩放的思想,还进一步优化了缩放策略,以适应新的Fused-MBConv结构,使得模型在不同规模下都能达到最佳的效率和性能平衡。
-
渐进式学习(Progressive Learning):这一策略允许模型从较小的规模开始训练,逐步过渡到更大规模的模型,有助于加速收敛并可能提升最终模型的性能。
3. 性能表现
EfficientNetV2在多个基准测试数据集上展示了卓越的性能,相比于EfficientNetV1和其他竞品模型,它能够在更短的时间内达到更高的准确率,同时保持模型的小巧。这表明其在资源有限的场景下特别有用,例如移动设备和嵌入式系统。
4. 局限性
尽管EfficientNetV2在许多方面取得了显著进步,但它的有效性和泛化能力仍受到训练数据集的限制。一些研究指出,为了更全面地验证其有效性,需要在更多样化的数据集上进行测试。
5. 应用领域
EfficientNetV2由于其高效性和高性能,被广泛应用于图像分类、物体检测、语义分割等计算机视觉任务,以及在医疗影像分析、自动驾驶、无人机导航等领域的实际应用中。
综上所述,EfficientNetV2是深度学习领域的一个重要进展,它通过一系列创新设计,在提高模型效率和训练速度的同时,保持了甚至提升了模型的准确性,为实际应用提供了更为强大的工具。

1.2 模型改进的问题
V1中存在的三个问题:

图像尺寸太大训练速度很慢
第一个问题:以V1-B6进行对比。V100是我们每块GPU每秒能够训练的图片的数量。
OOM是out of memory,内存溢出了。
batch size和trian size不同的情况下模型的训练速度对比。
我们可以发现,即使我们训练较小的图像尺寸,准确率还略微高一些。降低我们的图像尺寸,不仅能提高训练速度,还能增大我们的batch size尺寸。

浅层使用DW卷积速度很慢
从表格可以看出,浅层使用FuseMBConv是有V100速度提升的。但全部使用的话,参数量和计算量大幅上升。

Fused-MBConv(Fused Mobile Inverted Residual Bottleneck)结构是EfficientNetV2中引入的一种新型基础构建模块,旨在进一步优化模型的效率和训练速度。这一结构是基于EfficientNetV1中的MBConv模块发展而来的,但通过融合和简化原有组件,实现了更高效的计算和训练性能。以下是Fused-MBConv结构的详细解析:
MBConv vs. Fused-MBConv
-
MBConv结构:在EfficientNetV1中,MBConv模块由三个主要部分组成:扩张卷积(Expansion Convolution)、深度可分离卷积(Depthwise Convolution)、以及线性投影(Linear Projection)。首先,扩张卷积(通常是1x1卷积)用于增加通道数,然后是深度可分离卷积用于空间特征提取,最后是线性投影(又一个1x1卷积)用于减少通道数,通常伴有ReLU激活函数。
-
Fused-MBConv结构:在EfficientNetV2中,Fused-MBConv对上述流程进行了简化和融合。它将扩张卷积(如果有的话)和深度可分离卷积合二为一,使用一个标准的3x3卷积代替。这个单一的卷积层既负责通道扩张,又完成了空间特征的提取工作,因此减少了计算成本和模型复杂度。这种改动在模型的早期阶段(1-3阶段)尤其有效,能够显著提升训练速度,同时在参数和FLOPs(浮点运算次数)上的增加相对较小。
Fused-MBConv的优势
- 训练加速:通过减少计算步骤,Fused-MBConv能够加快模型前向和反向传播的速度,从而缩短训练时间。
- 资源效率:尽管Fused-MBConv在某些情况下可能会略微增加模型的参数量和计算量,但在模型的早期阶段,它能够以较小的资源开销实现更快的训练和推理。
- 性能保持:虽然进行了结构简化,但Fused-MBConv仍然能够维持或接近原始MBConv结构的性能水平,通过精心设计的架构搜索和缩放策略确保模型的有效性。
- 适应性增强:Fused-MBConv设计考虑到了现代硬件加速器的特性,如GPU和TPU,优化了计算密集型操作,使其更适合在这些平台上高效运行。
应用场景
Fused-MBConv主要被应用于模型的浅层,即网络的初始部分,因为在此阶段模型尺寸较小,简化结构带来的加速效果最为明显。随着网络深度增加,EfficientNetV2会逐渐回归使用更传统的MBConv模块,以保持模型的性能与效率之间的平衡。
总之,Fused-MBConv结构是EfficientNetV2在模型设计上的一个重要创新,它通过简化和融合关键的网络组件,实现了模型效率的大幅提升,特别是在模型训练阶段,这对于推动深度学习技术在资源受限环境下的应用具有重要意义。
同等的放大每个stage是次优的
V2的宽度和深度的缩放是非均匀的。(下图是V1)

V2做出的贡献
这里的提升11倍是V2的M和V1的B-7进行比较。
参数数量是V2与ResNet-Rs比较的。

1.3 V2的网络架构
mbconv后面的数字1,4,6代表升维的扩展因子expansion ratio,就是1x1卷积升维的倍数。
layers是重复堆叠的次数。channels对应是输出矩阵的channel。

对于Fused-MBconv模块,在源码的1-3stage中并没有SE注意力模块。
下图中,对于expansion=1的情况,主分支上只有3x3卷积,后面跟着BN和SiLu(就是swish)激活函数,然后dropout。对于expansion≠1的情况,3x3卷积后有一个1x1卷积。
注意:只有当输入输出channel相同时才有shortcut连接和dropout。

这里的dropout(V1也是这种dropout)和普通的dropout不一样,是stochastic depth。意思是网络从输入开始,经过网络的每一个block,每一个block都可以认为是一个残差结构,它的主分支上就是通过我们的f函数得到我们的输出,然后shortcut直接引入输入,然后这里会以一定的概率(这个概率是逐渐增大的)让“这一层block”失活,注意这里是将我们整个主分支上的输出进行丢弃。(这个dropout名称翻译过来就是随机深度)
因为只有输入输出channel相同时才有shortcut连接和dropout,所以不用担心通道数对不上的问题。
(这里的dropout仅指fused-mbconv以及mbconv层,不包括最后全连接前的dropout层)

Baseline
下图是V2中baseline的参数配置,下图中每个参数的含义看图:

V2-S
V2-S的参数(V2-S不是baseline,而是改进来的):
那行注释意思是在bseline基础上宽度(卷积核个数,详细去看V1的博客,下同)缩放1.4倍,深度(layer)缩放1.8倍。具体咋缩放的我们也不知道,我们知道结果就行。
下面就是缩放后的结果:

V2-M
V2-M的参数:(M比S多了一个stage,在最后一行)

其他训练参数

1.4 渐进式学习策略
EfficientNetV2中的渐进学习(Progressive Learning)是一种训练策略,旨在通过分阶段逐步增加模型的复杂度来加速训练过程并提高模型的最终性能。这一策略利用了模型在学习过程中的动态特性,通过逐步引入更复杂的特征表示和更深层次的网络结构,来优化训练效率和性能。以下是关于EfficientNetV2中渐进学习策略的详细解析:
核心思想
渐进学习的核心在于“逐步深化”,即从一个较小、较简单的模型开始训练,随着训练的进行,逐步增加模型的规模或者复杂度。这样做有几个好处:
- 加速初期收敛:小模型通常训练速度快,更容易收敛,可以快速捕捉到基本的特征和模式,为后续训练打下良好基础。
- 避免过早饱和:在训练的早期阶段,简单模型不容易陷入局部最优解,有利于探索更广阔的解空间。
- 资源高效:随着模型逐渐增大,已有的训练成果可以被继承,减少了从头训练大型模型所需的资源和时间。
- 性能提升:逐步增加模型复杂度可以逐步精细调整模型,从而在保持训练效率的同时,提升模型的最终性能。
实现方式
在EfficientNetV2中,渐进学习策略可能涉及以下方面:
- 分阶段训练:模型从一个小规模版本开始,完成初步训练后,增加网络的深度或宽度,或者引入更复杂的模块,然后继续训练。
- 动态图像尺寸:随着模型规模的增长,逐步增加输入图像的分辨率。这是因为较大的模型通常能更好地利用高分辨率图像中的细节信息。
- 适应性学习率:随着训练的深入,逐步降低学习率,以帮助模型在训练后期更精细地调整权重。
- 预训练与微调:在更大的数据集(如ImageNet21K)上预训练模型,然后在目标数据集(如ImageNet)上进行微调,这也是一种形式的渐进学习,先学习通用特征,再专注于特定任务。
效果与优势
- 更快的收敛速度:通过从小规模模型开始,EfficientNetV2能够迅速进入有意义的学习状态,进而加速整个训练过程。
- 更高的最终性能:渐进学习策略帮助模型在不同阶段逐步优化,最终达到更高的准确率和更好的泛化能力。
- 资源节约:与直接训练大型模型相比,分阶段训练可以更有效地利用计算资源,尤其是在硬件资源有限的情况下。
注意事项
尽管渐进学习带来了诸多优势,但其实施也面临着挑战,如如何平滑地从一个阶段过渡到下一个阶段,避免训练过程中的性能波动,以及如何优化不同阶段间的超参数选择等。因此,设计合理的训练策略和监控机制对于实现高效渐进学习至关重要。
使用不同的rand Aug等级的时候,会发现在size=128时,magnitude=5准确率最高,size=300时magnitude=15准确率最高。那么作者就在想是不是我们在使用不同的size的时候正则化的强度是不是也要进行一个相应的调整呢?

在一开始epoch=1,图像的尺寸较小,正则化方法也比较弱。随后逐渐增强。

具体的正则化强度是如何随着图像尺寸变化的策略:

下表给出了EfficientNetV2(S,M,L)三个模型的渐进学习策略参数:

为了证明这个渐进式学习策略是有效的,作者又将这个策略应用到了resnet和V1上:

1.5 模型性能



附
Stochastic Depth
Stochastic Depth是EfficientNetV2中采用的一种正则化技术,最初在论文《Deep Networks with Stochastic Depth》中提出,旨在提高深度神经网络的训练效率和泛化能力。这一技术在残差网络(ResNet)类架构中特别有效,包括EfficientNet系列中的模型。下面是关于EfficientNetV2中Stochastic Depth的详细解析:
基本概念
Stochastic Depth的基本思想是,在训练过程中以一定的概率随机丢弃(或“dropout”)网络中的某些残差块(Residual Block)的主路径输出,仅保留该块的快捷连接(Identity Connection或Shortcut Connection)的输出。这意味着,对于每个训练样本,网络的深度在每次前向传播时都是随机变化的。与传统的Dropout技术(随机失活神经元)不同,Stochastic Depth是作用在模型的结构层面,而非单个神经元。
工作原理
-
随机丢弃:对于每个残差块,设置一个丢弃概率 𝑝p,在训练时以概率 𝑝p 随机丢弃该块的主分支输出,只保留输入信号通过快捷连接直接传递到下一层。丢弃操作在整个训练过程中动态进行,每个块的丢弃是独立的。
-
动态网络深度:由于每个残差块都有可能被丢弃,实际上网络的深度在每次训练迭代中是随机变化的。这模拟了一个由浅到深的集成模型集合,每个模型具有不同的深度。
-
训练与推理的差异:在训练阶段应用Stochastic Depth,而在推理(测试)阶段,所有残差块都参与计算,但为了保持训练和测试行为的一致性,通常会按照训练时的期望深度调整残差块的权重。具体来说,每个残差块的输出在推理时会乘以 1−𝑝1−p(即保留概率),以补偿训练时的丢弃操作。
目标与优势
- 减轻过拟合:通过随机丢弃网络的一部分,Stochastic Depth增加了模型的多样性,有助于减少过拟合,提高泛化性能。
- 加速训练:丢弃部分网络可以减少计算量,尤其是在使用大规模数据集和深层网络时,有助于加速训练过程。
- 结构正则化:作为一种结构化的dropout形式,Stochastic Depth提供了额外的正则化手段,帮助模型学习更加鲁棒的特征表示。
- 模型压缩启发:通过观察哪些路径经常被丢弃,可以为模型剪枝提供线索,进一步压缩模型大小。
在EfficientNetV2中的应用
EfficientNetV2利用Stochastic Depth来优化其残差结构,尤其是那些包含shortcut连接的MBConv或Fused-MBConv模块。通过在训练期间随机丢弃部分网络块,模型能够以更少的计算成本探索更广泛的网络配置,进而提升效率和性能,同时保持模型在实际应用中的紧凑性和高效性。
RandAugment
RandAugment是一种自动化数据增强方法,它通过简化和自动化图像数据增强的参数选择过程,提高了机器学习和深度学习模型在计算机视觉任务中的训练效率和泛化能力。这种方法由Lukas Geiger等人在2020年提出,目的是减少传统数据增强方法中广泛存在的大量超参数调优需求,同时保持数据增强的多样性和有效性。
核心特点:
-
减少搜索空间:与之前的数据增强方法相比,RandAugment显著减小了参数搜索空间。它不需要对每个增强操作的强度和应用概率进行精细调整,而是通过两个超参数(N和M)来控制增强策略的整体强度和多样性。N代表从一组预定义的增强操作中选择的变换数量,而M是一个乘数,用来调节这些变换的强度。
-
无参数过程:为减少参数空间并保持图像多样性,RandAugment使用无参数过程替代了先前方法中的学习策略和概率选择。这意味着每次变换都是以均匀概率从N个预设的变换中选取的,并且所有变换都应用相同的强度M。
-
自动化和即插即用:由于其简化的参数设计,RandAugment可以直接应用于各种模型和数据集,无需为每项任务或数据集单独调整复杂的增强策略。这使得它成为一种即插即用的解决方案,易于集成到现有的训练流程中。
-
性能表现:在多个标准数据集(如CIFAR-10/100、SVHN和ImageNet)上,RandAugment展现出了与更复杂、搜索空间更大的数据增强方法相媲美或超越的性能。特别是在ImageNet上,它达到了85.0%的准确率,相比之前的最佳方法提高了0.6%,比标准增强技术高出1.0%。
-
泛用性:RandAugment不仅适用于图像分类任务,还被证明在目标检测等其他视觉任务上同样有效,能够提升模型性能,且在保持高效性的同时,减少了数据预处理的复杂性。
综上所述,RandAugment通过其简化的参数设计和自动化的增强策略,为数据增强提供了一种高效且实用的方法,有助于提升模型的训练效率和最终的预测性能。
RandAugment 应用实例:
假设你正在训练一个图像分类器,目标是识别不同类型的花卉。你的原始数据集包含了各种花卉的图片,每张图片都有一个对应的类别标签(例如,玫瑰、郁金香、百合等)。
-
定义 RandAugment 参数:首先,你需要设置 RandAugment 的两个关键超参数:
N和M。N表示从一组预定义的图像变换中选择的变换数量,而M控制这些变换应用的强度。例如,你可以设置N=2(每次数据增强从8种基础变换中随机选择2种)和M=10(变换强度范围为0到10的值)。 -
实施数据增强:对于数据集中的每张图片,算法会随机选择
N个变换(比如旋转和色彩抖动),并且为每个选定的变换独立地从[0, M]范围内抽取一个强度值。然后,按照这些参数对图像进行变换。例如,一张玫瑰花的图片可能会被随机旋转一个轻微的角度(比如5度)并增加一点色彩饱和度(强度系数为7)。 -
训练过程:经过 RandAugment 处理后的图像,连同其原始标签,被送入神经网络模型进行训练。由于每次迭代时增强方式都是随机的,这大大增加了模型看到的图像变化,促进了模型学习到更鲁棒的特征。
-
模型评估与优化:在训练过程中,通过验证集来监控模型性能,确保数据增强不仅增加了训练集的多样性,而且确实提高了模型在未见过数据上的分类准确性。
通过这种自动化且随机的过程,RandAugment 减少了手动设计数据增强策略的需要,同时在实践中已被证明能有效提升图像分类任务的性能。
Mixup
Mixup是一种创新的数据增强技术,由Hongyi Zhang等人在2017年的论文《mixup: Beyond Empirical Risk Minimization》中提出,并在ICLR 2018会议上发表。这项技术旨在通过创建训练样本的线性组合来提高机器学习模型的泛化能力,特别是深度学习模型。Mixup不仅限于图像数据,还适用于文本、语音等多种类型的数据。下面是mixup技术的详细解析:
基本原理
Mixup的核心思想是通过在训练过程中引入数据的线性插值,来生成“虚构”的训练样本,以此来平滑决策边界,减少过拟合,并促使模型学习更加鲁棒的特征表示。具体操作如下:
优势
实现细节
总之,mixup是一种简单而强大的技术,通过数据的创造性混合,有效促进了模型的泛化性能和鲁棒性。
例子:

通过在训练循环中反复执行这样的混合操作,模型学会了对输入数据进行更稳健的泛化,降低了过拟合的风险,并可能提高对对抗性攻击的抵抗力。
-
样本混合:对于数据集中的任意两个样本(𝑥𝑖,𝑦𝑖)和(𝑥𝑗,𝑦𝑗),首先随机抽取一个权重系数𝜆,通常𝜆∼𝐵𝑒𝑡𝑎(𝛼,𝛼),其中𝛼α是一个超参数,决定了𝜆的分布形状。然后,根据𝜆λ计算新样本的输入特征和标签:

-
当应用于多分类问题时,标签𝑦𝑖和𝑦𝑗通常是one-hot编码,因此上述公式中的加法变成了对应位置的数值相加。
-
损失函数调整:使用交叉熵损失函数时,也需要相应地调整,以适应混合后的标签𝑦^。模型对混合样本𝑥^的预测𝑝^与混合标签𝑦^计算损失,这有助于模型学习到不同类别间的平滑过渡。
- 减少过拟合:通过引入数据的线性组合,模型被迫学习更为平滑的决策边界,这有助于减轻过拟合现象。
- 提高泛化能力:由于模型在训练时看到了更多样化但仍然合理的数据,这能增强其在未见过的数据上的表现。
- 对抗样本防御:Mixup通过鼓励模型在样本间进行平滑的预测,增强了模型对小扰动的鲁棒性,从而在一定程度上提升了对抗攻击的防御能力。
- 超参数选择:𝛼α的值决定了𝜆的分布,较大的𝛼倾向于生成更接近原始数据点的样本,而较小的𝛼则会产生更广泛的插值样本。
- 适用范围:尽管mixup最初针对图像分类任务,但后来被广泛应用于自然语言处理、语音识别等领域,只要数据可以线性插值,理论上都可应用此方法。
- 变种与拓展:随着研究的深入,mixup出现了多种变体,如CutMix、Manifold Mixup、PatchUp等,每种变体都有其特定的增强策略和应用场景,进一步丰富了数据增强的工具箱。
相关文章:
28_EfficientNetV2网络详解
V1:https://blog.csdn.net/qq_51605551/article/details/140487051?spm1001.2014.3001.5502 1.1 简介 EfficientNetV2是Google研究人员Mingxing Tan和Quoc V. Le等人在2021年提出的一种深度学习模型,它是EfficientNet系列的最新迭代,旨在提…...
PyCharm查看文件或代码变更记录
背景: Mac笔记本上有一个截图的定时任务在运行,本地Python使用的是PyCharm IDE,负责的同事休假,然后定时任务运行的结果不符合预期,一下子不知道问题出现在哪里。 定位思路: 1、先确认网络、账号等基本的…...
Java开发手册中-避免Random实例被多线程使用、多线程下Random与ThreadLoacalRandom性能对比
场景 Java中使用JMH(Java Microbenchmark Harness 微基准测试框架)进行性能测试和优化: Java中使用JMH(Java Microbenchmark Harness 微基准测试框架)进行性能测试和优化_java热点函数-CSDN博客 参考以上性能测试工具的使用。 Java开发手册中有这样一条…...
【Arduino IDE】安装及开发环境、ESP32库
一、Arduino IDE下载 二、Arduino IDE安装 三、ESP32库 四、Arduino-ESP32库配置 五、新建ESP32-S3N15R8工程文件 乐鑫官网 Arduino官方下载地址 Arduino官方社区 Arduino中文社区 一、Arduino IDE下载 ESP-IDF、MicroPython和Arduino是三种不同的开发框架,各自适…...
【C++开源】GuiLite:超轻量UI框架-入门
开发环境说明 使用visual Studio 2022进行开发 下载源码 从如下的网址进行源码和示例代码的下载: GitHub源码网址为:idea4good/GuiLite示例代码路径为:idea4good/GuiLiteExample使用方法 GuiLite是一个仅有头文件的一个库,使用的时候直接include到自己的UIcode.cpp文件…...
SQL面试题练习 —— 查询每个用户最大连续登录天数
目录 1 题目2 建表语句3 题解 1 题目 查询每个用户最大连续登录天数 样例数据如下 login_log: 2 建表语句 --建表语句 create table if not exists login_log (user_id int comment 用户id,login_time date comment 登录时间 ); --数据插入 INSERT overwrit…...
服务器系统盘存储不够,添加数据盘并挂载(阿里云)
目录 1.获取数据盘设备名称 2.为数据盘创建分区 3.为分区创建文件系统 4.配置开机自动挂载分区 阿里云数据盘挂载说明链接:在Linux系统中初始化小于等于2 TiB的数据盘_云服务器 ECS(ECS)-阿里云帮助中心 1.获取数据盘设备名称 sudo fdisk -lu 运行结果如下所示…...
Visual Studio2022中使用.Net 8 在 Windows 下使用 Worker Service 创建守护进程
Visual Studio2022中使用.Net 8 在 Windows 下创建 Worker Service 1 什么是 .NET Core Worker Service1.1 确认Visual Studio中安装了 ASP.NET和Web开发2 创建 WorkerService项目2.1 新建一个WorkerService项目2.2 项目结构说明3 将应用转换成 Windows 服务3.1 安装Microsoft.…...
HTML5应用的安全防护策略与实践
随着HTML5及其相关技术(如CSS3和JavaScript)的普及,Web应用变得越来越强大和复杂,同时也成为黑客攻击的目标。本文将探讨HTML5应用面临的常见安全威胁,以及如何通过最佳实践和代码示例来增强应用的安全性。 HTML5安全…...
堆叠和集群
堆叠和集群 堆叠/集群:把多条/两台设备通过线缆进行连接,逻辑上组成一台设备,作为应该整体来管 理和转发流量 堆叠和集群的区别 1. 何时设备支持对贴,框式设备支持集群 2. 堆叠可以支持多台,框式只能支持两台 堆…...
【5G Sub-6GHz模块】专为IoT/eMBB应用而设计的RG520NNA、RG520FEB、RG530FNA、RG500LEU 5G模组
推出全新的5G系列模组: RG520NNADB-M28-SGASA RG520NNADA-M20-SGASA RG520FEBDE-M28-TA0AA RG530FNAEA-M28-SGASA RG530FNAEA-M28-TA0AA RG500LEUAA-M28-TA0AA ——明佳达 1、5G RG520N 系列——专为IoT/eMBB应用而设计的LGA封装模块 RG520N 系列是一款专为 IoT…...
云计算监控减少网络安全事件的五种方法
当企业没有对其IT基础设施采取足够的保护措施时,就会发生网络安全事件。网络罪犯利用其漏洞注入恶意软件或提取敏感信息。许多这样的漏洞存在于使用云计算平台进行操作的企业中。 云计算使企业在市场上更具生产力、效率和竞争力。这是因为他们的员工即使不在同一地点…...
java之 junit单元测试案例【经典版】
一 junit单元测试 1.1 单元测试作用 单元测试要满足AIR原则,即 A: automatic 自动化; I: Independent 独立性; R:Repeatable 可重复; 2.单元测试必须使用assert来验证 1.2 案例1 常规单元测试 1.…...
Golang面试题整理(持续更新...)
文章目录 Golang面试题总结一、基础知识1、defer相关2、rune 类型3、context包4、Go 竞态、内存逃逸分析5、Goroutine 和线程的区别6、Go 里面并发安全的数据类型7、Go 中常用的并发模型8、Go 中安全读写共享变量方式9、Go 面向对象是如何实现的10、make 和 new 的区别11、Go 关…...
uni-app:文字竖直排列,并且在父级view中水平竖直对齐
一、效果 二、代码 <template><view class"parent"><text class"child">这是竖直排列的文字</text></view> </template> <script>export default {data() {return {}},methods: {},}; </script> <sty…...
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
目录 问题 systemd Docker Service 和 Socket 警告的原因 解决方法 问题 使用如下命令停止 Docker # systemctl stop docker 执行后报的时候报了一个 warning,如下 Warning: Stopping docker.service, but it can still be activated by:docker.socket 这时…...
Git 用法
基本介绍 版本控制工具用处: 备份代码还原协同开发追溯 版本控制工具 1、集中式版本控制工具 版本库是集中存放在中央服务器的,team 里每个人 work 时从中央服务器下载代码,是必须联网才能工作,局域网或互联网。个人修改后然后…...
《昇思25天学习打卡营第20天|GAN图像生成》
生成对抗网络(GAN)是一种深度学习模型,用于生成逼真的图像。在手写数字识别的任务中,GAN 可以用来生成与真实手写数字相似的图像,以增强模型的训练数据集。GAN 主要由两个部分组成:生成器(Gener…...
【字幕】字幕特效入门
前言 最近两周调研了一下字幕特效的底层程序逻辑,因为工作内容的原因,就分享几个自己找的链接具体细节就不分享了,CSDN也是我的个人笔记,只记录一些简单的内容用于后续自己方便查询,顺便帮助一下正在苦苦查阅资料入门…...
Ubuntu 24.04安装Jellyfin媒体服务器图解教程
使用 Jellyfin 等开源软件创建媒体服务器肯定能帮助您管理和跨各种设备传输媒体集合。当你有一个封闭社区时,这尤其有用。 什么是 Jellyfin 媒体服务器? Jellyfin 媒体服务器,顾名思义,是一款开源软件,允许用户使用本…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
Vue记事本应用实现教程
文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展:显示创建时间8. 功能扩展:记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
