28_EfficientNetV2网络详解

news2024/9/22 1:27:11

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的优势

  1. 训练加速:通过减少计算步骤,Fused-MBConv能够加快模型前向和反向传播的速度,从而缩短训练时间。
  2. 资源效率:尽管Fused-MBConv在某些情况下可能会略微增加模型的参数量和计算量,但在模型的早期阶段,它能够以较小的资源开销实现更快的训练和推理。
  3. 性能保持:虽然进行了结构简化,但Fused-MBConv仍然能够维持或接近原始MBConv结构的性能水平,通过精心设计的架构搜索和缩放策略确保模型的有效性。
  4. 适应性增强: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中渐进学习策略的详细解析:

核心思想

渐进学习的核心在于“逐步深化”,即从一个较小、较简单的模型开始训练,随着训练的进行,逐步增加模型的规模或者复杂度。这样做有几个好处:

  1. 加速初期收敛:小模型通常训练速度快,更容易收敛,可以快速捕捉到基本的特征和模式,为后续训练打下良好基础。
  2. 避免过早饱和:在训练的早期阶段,简单模型不容易陷入局部最优解,有利于探索更广阔的解空间。
  3. 资源高效:随着模型逐渐增大,已有的训练成果可以被继承,减少了从头训练大型模型所需的资源和时间。
  4. 性能提升:逐步增加模型复杂度可以逐步精细调整模型,从而在保持训练效率的同时,提升模型的最终性能。

实现方式

在EfficientNetV2中,渐进学习策略可能涉及以下方面:

  1. 分阶段训练:模型从一个小规模版本开始,完成初步训练后,增加网络的深度或宽度,或者引入更复杂的模块,然后继续训练。
  2. 动态图像尺寸:随着模型规模的增长,逐步增加输入图像的分辨率。这是因为较大的模型通常能更好地利用高分辨率图像中的细节信息。
  3. 适应性学习率:随着训练的深入,逐步降低学习率,以帮助模型在训练后期更精细地调整权重。
  4. 预训练与微调:在更大的数据集(如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是作用在模型的结构层面,而非单个神经元。

工作原理

  1. 随机丢弃:对于每个残差块,设置一个丢弃概率 𝑝p,在训练时以概率 𝑝p 随机丢弃该块的主分支输出,只保留输入信号通过快捷连接直接传递到下一层。丢弃操作在整个训练过程中动态进行,每个块的丢弃是独立的。

  2. 动态网络深度:由于每个残差块都有可能被丢弃,实际上网络的深度在每次训练迭代中是随机变化的。这模拟了一个由浅到深的集成模型集合,每个模型具有不同的深度。

  3. 训练与推理的差异:在训练阶段应用Stochastic Depth,而在推理(测试)阶段,所有残差块都参与计算,但为了保持训练和测试行为的一致性,通常会按照训练时的期望深度调整残差块的权重。具体来说,每个残差块的输出在推理时会乘以 1−𝑝1−p(即保留概率),以补偿训练时的丢弃操作。

目标与优势

  • 减轻过拟合:通过随机丢弃网络的一部分,Stochastic Depth增加了模型的多样性,有助于减少过拟合,提高泛化性能。
  • 加速训练:丢弃部分网络可以减少计算量,尤其是在使用大规模数据集和深层网络时,有助于加速训练过程。
  • 结构正则化:作为一种结构化的dropout形式,Stochastic Depth提供了额外的正则化手段,帮助模型学习更加鲁棒的特征表示。
  • 模型压缩启发:通过观察哪些路径经常被丢弃,可以为模型剪枝提供线索,进一步压缩模型大小。

在EfficientNetV2中的应用

EfficientNetV2利用Stochastic Depth来优化其残差结构,尤其是那些包含shortcut连接的MBConv或Fused-MBConv模块。通过在训练期间随机丢弃部分网络块,模型能够以更少的计算成本探索更广泛的网络配置,进而提升效率和性能,同时保持模型在实际应用中的紧凑性和高效性。

RandAugment

RandAugment是一种自动化数据增强方法,它通过简化和自动化图像数据增强的参数选择过程,提高了机器学习和深度学习模型在计算机视觉任务中的训练效率和泛化能力。这种方法由Lukas Geiger等人在2020年提出,目的是减少传统数据增强方法中广泛存在的大量超参数调优需求,同时保持数据增强的多样性和有效性。

核心特点:

  1. 减少搜索空间:与之前的数据增强方法相比,RandAugment显著减小了参数搜索空间。它不需要对每个增强操作的强度和应用概率进行精细调整,而是通过两个超参数(N和M)来控制增强策略的整体强度和多样性。N代表从一组预定义的增强操作中选择的变换数量,而M是一个乘数,用来调节这些变换的强度。

  2. 无参数过程:为减少参数空间并保持图像多样性,RandAugment使用无参数过程替代了先前方法中的学习策略和概率选择。这意味着每次变换都是以均匀概率从N个预设的变换中选取的,并且所有变换都应用相同的强度M。

  3. 自动化和即插即用:由于其简化的参数设计,RandAugment可以直接应用于各种模型和数据集,无需为每项任务或数据集单独调整复杂的增强策略。这使得它成为一种即插即用的解决方案,易于集成到现有的训练流程中。

  4. 性能表现:在多个标准数据集(如CIFAR-10/100、SVHN和ImageNet)上,RandAugment展现出了与更复杂、搜索空间更大的数据增强方法相媲美或超越的性能。特别是在ImageNet上,它达到了85.0%的准确率,相比之前的最佳方法提高了0.6%,比标准增强技术高出1.0%。

  5. 泛用性:RandAugment不仅适用于图像分类任务,还被证明在目标检测等其他视觉任务上同样有效,能够提升模型性能,且在保持高效性的同时,减少了数据预处理的复杂性。

综上所述,RandAugment通过其简化的参数设计和自动化的增强策略,为数据增强提供了一种高效且实用的方法,有助于提升模型的训练效率和最终的预测性能。

RandAugment 应用实例:

假设你正在训练一个图像分类器,目标是识别不同类型的花卉。你的原始数据集包含了各种花卉的图片,每张图片都有一个对应的类别标签(例如,玫瑰、郁金香、百合等)。

  1. 定义 RandAugment 参数:首先,你需要设置 RandAugment 的两个关键超参数:NMN 表示从一组预定义的图像变换中选择的变换数量,而 M 控制这些变换应用的强度。例如,你可以设置 N=2(每次数据增强从8种基础变换中随机选择2种)和 M=10(变换强度范围为0到10的值)。

  2. 实施数据增强:对于数据集中的每张图片,算法会随机选择 N 个变换(比如旋转和色彩抖动),并且为每个选定的变换独立地从 [0, M] 范围内抽取一个强度值。然后,按照这些参数对图像进行变换。例如,一张玫瑰花的图片可能会被随机旋转一个轻微的角度(比如5度)并增加一点色彩饱和度(强度系数为7)。

  3. 训练过程:经过 RandAugment 处理后的图像,连同其原始标签,被送入神经网络模型进行训练。由于每次迭代时增强方式都是随机的,这大大增加了模型看到的图像变化,促进了模型学习到更鲁棒的特征。

  4. 模型评估与优化:在训练过程中,通过验证集来监控模型性能,确保数据增强不仅增加了训练集的多样性,而且确实提高了模型在未见过数据上的分类准确性。

通过这种自动化且随机的过程,RandAugment 减少了手动设计数据增强策略的需要,同时在实践中已被证明能有效提升图像分类任务的性能。

Mixup

Mixup是一种创新的数据增强技术,由Hongyi Zhang等人在2017年的论文《mixup: Beyond Empirical Risk Minimization》中提出,并在ICLR 2018会议上发表。这项技术旨在通过创建训练样本的线性组合来提高机器学习模型的泛化能力,特别是深度学习模型。Mixup不仅限于图像数据,还适用于文本、语音等多种类型的数据。下面是mixup技术的详细解析:

基本原理

Mixup的核心思想是通过在训练过程中引入数据的线性插值,来生成“虚构”的训练样本,以此来平滑决策边界,减少过拟合,并促使模型学习更加鲁棒的特征表示。具体操作如下:

优势

实现细节

总之,mixup是一种简单而强大的技术,通过数据的创造性混合,有效促进了模型的泛化性能和鲁棒性。

例子:

通过在训练循环中反复执行这样的混合操作,模型学会了对输入数据进行更稳健的泛化,降低了过拟合的风险,并可能提高对对抗性攻击的抵抗力。

  1. 样本混合:对于数据集中的任意两个样本(𝑥𝑖,𝑦𝑖)和(𝑥𝑗,𝑦𝑗),首先随机抽取一个权重系数𝜆,通常𝜆∼𝐵𝑒𝑡𝑎(𝛼,𝛼),其中𝛼α是一个超参数,决定了𝜆的分布形状。然后,根据𝜆λ计算新样本的输入特征和标签:

  2. 当应用于多分类问题时,标签𝑦𝑖和𝑦𝑗​通常是one-hot编码,因此上述公式中的加法变成了对应位置的数值相加。

  3. 损失函数调整:使用交叉熵损失函数时,也需要相应地调整,以适应混合后的标签𝑦^。模型对混合样本𝑥^的预测𝑝^与混合标签𝑦^​计算损失,这有助于模型学习到不同类别间的平滑过渡。

  4. 减少过拟合:通过引入数据的线性组合,模型被迫学习更为平滑的决策边界,这有助于减轻过拟合现象。
  5. 提高泛化能力:由于模型在训练时看到了更多样化但仍然合理的数据,这能增强其在未见过的数据上的表现。
  6. 对抗样本防御:Mixup通过鼓励模型在样本间进行平滑的预测,增强了模型对小扰动的鲁棒性,从而在一定程度上提升了对抗攻击的防御能力。
  7. 超参数选择:𝛼α的值决定了𝜆的分布,较大的𝛼倾向于生成更接近原始数据点的样本,而较小的𝛼则会产生更广泛的插值样本。
  8. 适用范围:尽管mixup最初针对图像分类任务,但后来被广泛应用于自然语言处理、语音识别等领域,只要数据可以线性插值,理论上都可应用此方法。
  9. 变种与拓展:随着研究的深入,mixup出现了多种变体,如CutMix、Manifold Mixup、PatchUp等,每种变体都有其特定的增强策略和应用场景,进一步丰富了数据增强的工具箱。

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

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

相关文章

golang单元测试性能测试常见用法

关于go test的一些说明 golang安装后可以使用go test工具进行单元测试 代码片段对比的性能测试,使用起来还是比较方便,下面是一些应用场景 平时自己想做一些简单函数的单元测试,不用每次都新建一个main.go 然后go run main.go相对某个功能做下性能测试 看下cpu/内存…

Anthropic推出1亿美元AI基金,加剧与OpenAI的竞争|TodayAI

人工智能初创公司Anthropic和风险投资公司Menlo Ventures宣布,他们将共同推出一支价值1亿美元的基金,以支持早期初创公司并推动它们使用Anthropic的技术。这个名为Anthology Fund的新基金,将为初创公司提供资金和技术支持,旨在模仿…

三、GPIO口

我们在刚接触C语言时,写的第一个程序必定是hello world,其他的编程语言也是这样类似的代码是告诉我们进入了编程的世界,在单片机中也不例外,不过我们的传统就是点亮第一个LED灯,点亮电阻,电容的兄弟&#x…

锁策略和CAS指令

锁策略 一、锁策略的引入二、锁策略的分类(1)乐观锁和悲观锁(2)重量级锁和轻量级锁(3) 自旋锁和挂起等待锁(4)可重入锁和不可重入锁(5)公平锁和非公平锁&…

SQL面试题练习 —— 统计最大连续登录天数区间

目录 1 题目2 建表语句3 题解 1 题目 2 建表语句 CREATE TABLE IF NOT EXISTS user_login_tb (uid INT,login_date DATE ); insert into user_login_tb(uid, login_date) values( 1, 2022-08-02),(1, 2022-08-03),(2, 2022-08-03),(2, 2022-08-04),(2, 2022-08-05),(2, 2022-08…

使用Python的Turtle模块绘制小黄人

引言 在Python编程的世界里,turtle 模块是一个非常有趣且实用的工具,它允许程序员通过简单的指令控制一个虚拟的画笔(称为“海龟”)在屏幕上移动和绘制图形。本篇博客将详细介绍如何使用turtle模块来绘制一个卡通人物&#xff0c…

Redis-布隆过滤器(Bloom Filter)详解

文章目录 什么是布隆过滤器 布隆过滤器的优点:布隆过滤器的缺点:其他问题 布隆过滤器适合的场景布隆过滤器原理 数据结构增加元素查询元素删除元素 如何使用布隆过滤器 Google开源的Guava自带布隆过滤器Redis实现布隆过滤器 Redis中配置布隆过滤器Redis…

给Wordpress添加评分功能到评论表单

今天要 给你的 Wordpress 添加评分功能到评论表单 吗? 评分功能效果图 什么类型的网站需要评分? 资源站教程站其他,我也没想到。。。 但我这个网站,因为是电影类的网站,好像还是有点需要的,所以&#xf…

完美的用户体验:如何设计一个直观和有效的网站导航?

APP的顶部导航栏对我们来说很熟悉。导航栏是UI设计中不可或缺的一部分,几乎每个页面都使用导航栏。虽然导航栏看起来很简单,不需要太多精力,但是设计一个与产品需求和客户目标高度匹配的导航栏并不是那么容易的。导航栏的设计标准有很多细节需…

SpringBoot集成MQTT实现交互服务通信

引言 本文是springboot集成mqtt的一个实战案例。 gitee代码库地址:源码地址 一、什么是MQTT MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe&…

C++ : 移除链表元素/合并两个有序链表题解

目录 1.移除链表元素 分析 代码 2.合并两个有序链表 分析 代码 1.移除链表元素 分析 像这种移除元素的,加个哨兵位头节点会比较方便,因为旧的头会有被移除的情况,不好控制。这里只需要用cur指向待遍历的节点,prev指向cur的…

AI大牛Karpathy创办Eureka Labs专注AI+教育

🦉 AI新闻 🚀 AI大牛Karpathy创办Eureka Labs专注AI教育 摘要:前OpenAI大牛Karpathy离职半年后宣布创办专注AI与教育的公司Eureka Labs,旨在通过生成式AI优化教育体验。公司首个项目LLM101n课程已在GitHub获得高赞,目…

C++ 继承详解:从基础到深入

继承是面向对象编程中最强大的功能之一,它不仅促进了代码的重用,还帮助我们构建复杂的系统。在C中,通过继承,我们可以创建一个新的类(称为派生类)来扩展现有类(基类)的功能。本文将全…

基于python的百度资讯爬虫的设计与实现

研究背景 随着互联网和信息技术的飞速发展,网络已经成为人们获取信息的主要来源之一。特别是搜索引擎,作为信息检索的核心工具,极大地改变了人们获取信息的方式。其中,百度作为中国最受欢迎的搜索引擎之一,其新闻搜索…

[GXYCTF2019]Ping Ping Ping1

打开靶机 结合题目名称,考虑是命令注入,试试ls 结果应该就在flag.php。尝试构造命令注入载荷。 cat flag.php 可以看到过滤了空格,用 $IFS$1替换空格 还过滤了flag,我们用字符拼接的方式看能否绕过,ag;cat$IFS$1fla$a.php。注意这里用分号间隔…

【总结】逻辑运算在Z3中运用+CTF习题

国际赛IrisCTF在前几天举办,遇到了一道有意思的题目,特来总结。 题目 附件如下:📎babyrevjohnson.tar 解题过程 关键main函数分析如下: int __fastcall main(int argc, const char **argv, const char**envp){int v4…

Golang | Leetcode Golang题解之第236题二叉树的最近公共祖先

题目: 题解: func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {parent : map[int]*TreeNode{}visited : map[int]bool{}var dfs func(*TreeNode)dfs func(r *TreeNode) {if r nil {return}if r.Left ! nil {parent[r.Left.Val] rdfs(r.L…

用 WireShark 抓住 TCP

Wireshark 是帮助我们分析网络请求的利器,建议每个同学都装一个。我们先用 Wireshark 抓取一个完整的连接建立、发送数据、断开连接的过程。 简单的介绍一下操作流程。 1、首先打开 Wireshark,在欢迎界面会列出当前机器上的所有网口、虚机网口等可以抓取…

气膜体育馆进校园:政策支持与市场前景—轻空间

过去20多年,气膜建筑、场馆相关项目在国内落地众多,展现出强大的市场潜力。2022年8月,《北京晚报》粗略统计,北京全市已建有气膜馆百余座,且数量还在不断增加。这一发展趋势不仅仅体现在北京,全国范围内也都…

微软GraphRAG +本地模型+Gradio 简单测试笔记

安装 pip install graphragmkdir -p ./ragtest/input#将文档拷贝至 ./ragtest/input/ 下python -m graphrag.index --init --root ./ragtest修改settings.yaml encoding_model: cl100k_base skip_workflows: [] llm:api_key: ${GRAPHRAG_API_KEY}type: openai_chat # or azu…