SpectralGPT: Spectral Foundation Model 论文翻译1

遥感领域的通用大模型 2023.11.13在CVPR发表

原文地址:[2311.07113] SpectralGPT: Spectral Foundation Model (arxiv.org)

摘要

​ 基础模型最近引起了人们的极大关注,因为它有可能以一种自我监督的方式彻底改变视觉表征学习领域。虽然大多数基础模型都是为了有效地处理各种视觉任务的RGB图像而定制的,但在光谱数据方面的研究存在明显的差距,光谱数据为场景理解提供了有价值的信息,特别是在遥感(RS)应用中。为了填补这一空白,我们首次创建了一个通用的RS基础模型,名为SpectralGPT,该模型专门用于使用新型3D generative pretrained transformer(GPT)处理光谱RS图像。与现有基础模型相比,SpectralGPT

  1. 以渐进式训练方式适应不同尺寸、分辨率、时间序列和区域的输入图像,充分利用广泛的遥感大数据;
  2. 利用3D token生成空间光谱耦合;
  3. 通过多目标重建捕获光谱序列模式;
  4. 在100万张光谱RS图像上进行训练,生成超过6亿个参数的模型。

我们的评估突出了预训练的SpectralGPT模型的显著性能改进,这意味着巨大的潜力

引言

​ 光谱成像能够捕获大量的光谱信息,从而实现对物体和场景的高度精确的分析和识别,这超出了单独使用RGB数据的可能性。这使得多/高光谱(MS/HS)遥感(RS)数据成为首选工具和广泛的地球观测(EO)应用的关键组成部分,包括土地利用/土地覆盖测绘、生态系统监测、天气预报、能源开发、生物多样性保护和地质勘探。遥感卫星任务(如Landsat-8/9、Sentinel-2、高分-1/2/6等)的光谱数据的可用性和可及性迅速扩大,进一步为EO相关领域的新发现和进步提供了机会。然而,这种增长也产生了两个具有挑战性的困难,需要迅速注意和有效解决。

  • 从海量光谱数据中提取和挖掘信息的能力有限。现有的以专家为中心和数据驱动的模型已经达到了极限,不足以有效地从如此大量的光谱RS数据中学习视觉表示。为了将光谱遥感大数据的智能处理和分析能力提高到与其体量相匹配的水平,迫切需要创建新一代模型。
  • 在少数标签和无标签的情况下对地球观测(EO)任务有限的预测和解释能力。与光谱遥感数据的可用性相比,在像素级和图像级都缺乏相应的标签。标记数据的缺乏阻碍了深度学习和人工智能模型在实际EO任务中的全面监督应用。需要采取紧急行动,创建包含谱知识的RS基础模型。

image-20231124123302270

​ 在自我监督学习技术以及基于transformer的方法的迁移能力进步的推动下,基于基础模型的预训练技术的飞速发展。值得注意的是,这种激增在自然语言处理和计算机视觉领域尤为明显。Pretraining agent tasks 通常分为对比学习和生成学习。顾名思义,前者旨在教会模型区分相似和不相似的示例,而后者侧重于训练模型生成新数据或从部分观测中恢复完整数据。它们的区别如图1所示。对比学习的两个代表性框架是动量对比(MoCo)[14]和简单对比学习(SimCLR)[15]。MoCo引入动量更新来改进对比学习过程,而SimCLR利用数据增强来增强用于对比学习的图像对的多样性和复杂性。自从MoCo和SimCLR框架最初提出建议以来,已经开发了许多变体。这些变体旨在解决原始框架的特定挑战或限制,或进一步提高其性能。例如,SimCLR的一些变体加入了新的数据增强类型或改进了训练目标,而MoCo的一些变体探索了不同的动量更新策略或使用额外的损失来改进对比学习。随着**视觉变形(vision transformer, ViT)**的兴起,基于掩膜图像建模(mask image modeling, MIM)的生成学习在视觉预训练任务方面取得了重大进展。来自图像转换器(BEiT)的双向编码器表示,如[23]所示,是构建在ViT之上的MIM架构的一个突出例子。MIM允许输入所有图像patches,这为适应各种网络体系结构提供了灵活性。然而,与MIM相关的高计算成本在一定程度上限制了它在某些应用中的实际应用。他等人[24]提出了掩码自编码器(MAE)作为MIM的一种特殊替代方案。在MAE中,使用未遮挡的补丁或像素来重建那些被遮挡的补丁或像素。这种方法计算效率更高,也增强了预训练模型的推理能力,从而使其更适用于各种应用。

​ 然而,这些先进的模型在RS中的探索相对不足。针对RS任务设计,Wang等人[25]训练了包含1亿参数transformer的模型,开发了一种新的旋转变大小窗口注意机制,用于对下游任务的模型进行微调。不同于仅依赖少数可见图像patches来推断整个图像的mae方法,Sun等人[26]通过在其RS预训练模型中实施MIM策略,考虑了所有图像patches,无论是掩码的还是未掩码的。尽管计算成本增加,推理效率降低,但MIM允许灵活地使用各种深度架构作为网络骨干,如ViT和Swin transformer[27]。这两项初步研究的成功表明,预训练模型在红外光谱中的应用潜力巨大。成像光谱学的快速发展巩固了光谱遥感在红外光谱中的重要性。这种突出源于它有效利用丰富的光谱信息的独特能力。然而,现有的遥感基础模型由于对多波段数据的建模能力有限,在应用于光谱数据时遇到了挑战。光谱数据与现有基础模型之间的具体差距可以总结如下:

  1. (对比现有的RS基础模型):它们通常难以捕获三维张量数据中固有的空间光谱表示。这些模型中的大多数主要设计用于处理类似RGB图像的数据,这限制了它们完全捕获和表征光谱信息的能力。因此,它们处理此类数据类型的适用性仍然受到限制。
  2. (对比视频数据基础模型):计算机视觉中已经有针对视频数据设计的基础模型[28],[29],但视频数据与光谱数据之间存在显著差异。主要区别在于视频中连续帧之间的内容变化以及所有帧之间经常存在的冗余。因此,针对视频数据预先训练的网络设计往往不太适合频谱数据。
  3. (对比光谱数据基础模型):事实上,最近关于光谱数据基础模型的研究相对较少。只有一篇会议论文,即SatMAE[30],深入研究了预训练transformer的利用,例如MAE,用于光谱卫星图像。SatMAE的核心设计方法包括对相邻的光谱带进行分组,类似于RGB波段。然而,这种做法无意中破坏了光谱的连续性,导致三维空间-光谱耦合特征和光谱序列数据的不理想捕获。此外,有关预训练样本数量和有效训练策略的限制进一步阻碍了这方面的性能提高。

​ 为了填补这些空白,我们设计了SpectralGPT,这是一种为光谱数据精心定制的开创性RS基础模型。SpectralGPT具有开创性的元素,例如3D掩蔽策略,用于从空间-光谱混合令牌中学习视觉表示的编码器,以及用于保留光谱序列特征的多目标重建解码器。这些创新显著增强了SpectralGPT从光谱数据中学习内在知识表示的能力,为各种RS下游应用的场景理解提供了有价值的见解。图2展示了SpectralGPT预训练的视觉概述及其在不同下游任务中的通用应用,强调了其深远的贡献。

  • 光谱数据定制基础模型:SpectralGPT是第一个专门为光谱遥感数据设计的基础模型。SpectralGPT在MAE框架中考虑了光谱数据的独特特征,即空间光谱耦合和光谱序列性,具有简单而有效的3D GPT网络。
  • 大规模训练数据:SpectralGPT是在来自Sentinel-2卫星的广泛数据集上进行训练的,该数据集拥有超过100万张光谱图像。这项工作在三个不同的模型迭代(base、Large和huge)的创建中达到高潮,分别包含大约1亿个、3亿个和6亿个参数。
  • 预训练的灵活性:SpectralGPT采用渐进式训练策略,使其能够处理不同大小、分辨率、时间序列和地理区域的输入图像。这种创新的设计使模型的编码器暴露在各种各样的信息中,最终增强了其有效表示广泛特征的能力。
  • 先进的3D掩模和重建:SpectralGPT利用3D张量形状的空间光谱掩模,对光谱RS数据的掩模率至少为90%。此外,它采用开创性的多目标重建策略,全面捕获局部空间光谱特征和光谱序列信息。这些创新通过推理极大地提高了模型的学习能力。
  • 在下游任务中的卓越性能:SpectralGPT的影响扩展到下游RS模型,在各种任务中,它优于现有的最先进的(SOTA)竞争对手,包括单/多标签场景分类、语义分割和变化检测。
  • 新的基准数据集:我们策划了一个新的基准数据集,名为SegMunich,它专注于德国慕尼黑市内的城市地区及其邻近社区。该数据集是为了满足语义分割任务的需求而设计的,有13个类,便于下游分析。

SpectralGPT 介绍

A.简要回顾MAE

​ MAE是一种简单的自动编码方法[31],可以重建原始信号。像所有的自编码器一样,MAE包括一个编码器,它将观察到的信号映射到一个电位表示,以及一个解码器,从电位表示重建原始信号。然而,与经典的自编码器相比,MAE采用非对称设计,使编码器只能对部分和观察到的信号(没有掩码令牌)进行操作。此外,MAE采用轻量级解码器从潜在表示和掩码令牌重构完整信号。具体而言,MAE的实施过程可分为以下几个步骤:

  1. 给定H × W × C的输入图像,采用ViT中的策略将其划分为规则的、不重叠的patch,大小为p × p × C; 记为 x = { x 1 , x 2 , . . . , x H p × W p } x=\{x_1,x_2,...,x_{\frac{H}{p}\times \frac{W}{p}}\} x={x1,x2,...,xpH×pW}
  2. 接下来,对这些patch执行掩膜操作,以识别可见(或未掩膜)和掩膜的patch。即 $ x_{vis} = {x_i |i \in vis}$。只有可见的patch被发送到待学习的编码器中。
  3. 编码器 f e n f_{en} fen使用ViT实现,其中每个可见patch首先由共享矩阵 E s E_s Es线性投影,结合位置嵌入 E p o s E_{pos} Epos,然后通过一系列transformer块进行处理。因此,第i个patch的编码器输出可以表示为 z i = f e n ( E s x i + E p o s ) z_i= f_{en}(E_sx_i + E_{pos}) zi=fenEsxi+Epos
  4. MAE解码器的输入,用 g d e g_{de} gde表示,是一组完整的tokens,包括编码的可见patch和掩码tokens(例如, z m z_m zm)。编码特征(来自编码器的潜在表示)和掩码tokens用作输入,并与轻量级ViT解码器的位置嵌入相结合。解码器的最后一层是一个线性投影(例如,W),它输出的几个通道等于一个patch中的像素数。然后对输出进行重塑以重建图像为 x ^ = g d e ( W ( [ z v i s , z m ] ) + p o s ) \hat{x} = g_{de}(W([z_{vis},z_m])+pos) x^=gde(W([zvis,zm])+pos),其中 z v i s z_{vis} zvis是可见补丁的编码表示。
  5. MAE中使用的损失函数是均方误差(mean squared error, MSE),对可见和被掩盖的patch进行计算(类似于BERT[32])

​ 值得注意的是,我们进行了归一化处理,即计算每个patch中像素值的均值和标准差,并对patch进行归一化处理,即 x n o r m = x i − u i σ i ∣ i ∈ v i s x_norm = {\frac{x_i-u_i}{\sigma_i}|i\in vis} xnorm=σixiuiivis。在这种情况下,编码器重建任务更改为重建归一化像素值。

B. SpectralGPT方法概述

​ 我们的SpectralGPT模型由三个关键组件组成:用于处理光谱数据的3D掩模用于学习光谱视觉表示的编码器用于多目标重建的解码器。使我们的方法与众不同的是一种渐进的训练方式,其中模型使用不同类型的光谱数据进行训练。该策略增强了所提出的SpectralGPT基础模型,赋予其更大的灵活性、鲁棒性和泛化能力。图2提供了具有各种下游任务的拟议SpectralGPT的说明性工作流程。

image-20231124125343064

C.光谱数据的3D掩膜

​ 受基于mae框架的视频类数据的时空不可知采样的启发[29],我们将多波段光谱图像建模为三维张量数据。为了实现这一点,我们实现了一个3D立方体掩蔽策略,可以有效地处理类张量光谱数据。我们的方法利用90%的掩蔽率以有效的方式捕获空间和光谱的视觉表示,从而从输入的光谱数据中提取更准确和多样化的知识。

​ 给定一个H×W×D给定三维立方体光谱图像,我们沿着空间和光谱维度将其划分为非重叠的3D张量token。每个token的大小为p × p × k,其中p和k分别是空间维度和光谱维度的token大小。如此,我们可以得到 H p × W p × D k \frac{H}{p}\times\frac{W}{p}\times\frac{D}{k} pH×pW×kD个token,记为记为 x = { x 1 , x 2 , . . . , x H p × W p × D k } x=\{x_1,x_2,...,x_{\frac{H}{p}\times\frac{W}{p}\times\frac{D}{k}}\} x={x1,x2,...,xpH×pW×kD},可见图像和掩膜图像表示为 x v i s x_{vis} xvis x m a s k x_{mask} xmask
[ x v i s , x m a s k ] = M ⋅ x , [x_{vis},x_{mask}] = M \cdot x, [xvis,xmask]=Mx,
​ 其中 M ∈ 0 , 1 H p × W p × D k M\in {0,1}^{\frac{H}{p}\times\frac{W}{p}\times\frac{D}{k}} M0,1pH×pW×kD是一个标记的二进制掩码,指示应该屏蔽哪些标记,即标记中的所有像素都设置为零。

D.可见标记的编码器

​ 与MAE中的编码器类似,所有可见标记 x v i s = { x i ∣ i ∈ v i s } x_{vis} = \{x_i |i \in vis\} xvis={xiivis} 空间-光谱混合表示首先使用共享线性投影 E s E_s Es转换为特征嵌入。通过编码器 f θ f_θ fθ学习到的关于变量 θ θ θ的表示表示为 f θ ( E s x i + E p o s ) f_θ(E_sx_i+ E_{pos}) fθ(Esxi+Epos),其中 E p o s E_{pos} Epos表示位置编码。编码器 f θ f_θ fθ由多个堆叠自注意(SA) transfromer块组成。编码器中使用的SA模块可以构造如下。

  • 对输入嵌入 z i z_i zi使用可训练矩阵 W Q , W K , W V W_Q ,W_K,W_V WQ,WK,WV,线性变化为query Q i Q_i Qi、key K i K_i Ki、value V i V_i Vi

  • 查询和关键字嵌入之间的注意力分数 S i S_i Si以点积的形式计算并乘 1 d \frac{1}{\sqrt d} d 1 ,通过softmax。然后,结果分数被用来对值嵌入进行加权,这些值嵌入被求和以产生最终的输出嵌入。原SA的完整过程公式为
    Q i = w i W Q , K i = x i W K , V i = x i W V S i = s o f t m a x ( Q i K i T d ) , z i = A t t e n t i o n ( Q i , K i , V i ) = S i V i , Q_i =w_iW_Q,K_i = x_iW_K,V_i = x_iW_V\\ S_i = softmax(\frac{Q_iK^T_i}{\sqrt d}),\\ z_i = Attention(Q_i,K_i,V_i) = S_iV_i,\\ Qi=wiWQ,Ki=xiWK,Vi=xiWVSi=softmax(d QiKiT),zi=Attention(Qi,Ki,Vi)=SiVi,

  • 最后,输出特征z具有相同的维度a,可以被后续编码器进一步处理

E.具有多目标重构的轻量级解码器给定编码器输出特征

​ 我们同时训练一个轻量级解码器,该解码器具有相对于变量z的多目标重建策略,以从可见和掩码图像标记的潜在嵌入中恢复原始图像标记。数学上,重建的图像标记可以表示为 x ^ = g ( f θ ( M ⋅ x ) ) \hat x = g (f_θ(M\cdot x)) x^=g(fθ(Mx))。解码器通常比编码器更窄、更浅,通常由几个transformer块和一个线性重构层组成。提出的SpectralGPT以端到端方式训练编码器和解码器,以最大限度地减少重建图像token和原始图像token之间的重建损失。在我们的方法中,重构损失由两个部分组成:token到token,频谱到频谱。这种多目标重构使得学习表征能够有效地捕获空间-频谱耦合特征和频谱序列信息。使用像素空间中的MSE作为损失函数。

F.渐进式预训练

​ 所提出的SpectralGPT模型具有对不同输入图像尺寸具有高度适应性的优点,这对于处理具有不同尺寸、分辨率、时间变化率和地理覆盖范围的图像的大型数据集特别有用。这是通过将输入图像分成固定大小的3D tokens(例如,8 × 8 × 3),然后通过编码器-解码器管道独立处理来实现的。然后将产生的标记拼接在一起,形成最终的输出图像。这种方法确保了模型理论上可以处理任意维度的图像,而不需要对体系结构或超参数进行任何更改。有了这个特性,所提出的模型允许将不同大小的图像输入到编码器网络中,并且只要将3D tokens裁剪为固定大小,就可以使用不同的传感器、分辨率、时间序列和模态来输入图像。

​ 值得强调的是,将不同类型的输入图像逐步输入到网络中,不仅有助于在输入图像的类型和大小上实现更大的灵活性,而且还有助于提高模型从不同数据源中提取有价值知识的能力,从而增强模型的泛化。例如,可以先输入96 ×96像素的图像,然后逐步输入128 x 128像素的图像,或者从哨兵2号数据开始,然后过渡到陆地卫星8号或高分2号数据。更广泛地说,处理不同类型和大小的输入图像的能力可以产生更健壮和可泛化的特征,而不限于特定的输入图像类型或大小,从而提高模型的泛化和先前未见过的数据的性能。此外,这种输入图像大小和类型的灵活性在实际应用中特别有益,在实际应用中,输入图像可能来自不同的来源或具有不同的分辨率,从而允许模型更适应输入图像不可预测的现实场景。

G.预训练数据集

​ 我们的基础模型是在一个全面的数据集上训练的Sentinel-2卫星。该数据集包括12个光谱波段,并从两个主要来源获取:(1)fMoW- s2[30],一个基于世界功能地图(fMoW)[33]的全球多样化收集,标记为62个类别,(2)BigEarthNet[34],一个源自10多个欧洲国家的区域数据集。为了提供数据集的概述,图3显示了地球上有人居住地区的图像样本分布,总共有1,473,105张图像。

image-20231124142851814

​ 斯坦福大学的研究人员精心制作了一项研究数据集,利用fMoW数据集的地理坐标和时间戳。这个过程的目的是构造一个时间哨兵2号的一系列图像为了确保数据质量,排除了sentinel -2之前的fMoW图像。对于部分之前的fMoW图像的位置,进行选择性管理,包括排除这些特定于速度的图像,并每隔6个月引入补充捕获,以丰富时间序列。这种方法最终创建了fMoW Sentinel2数据集,表示为fMoW- s2。该数据集主要覆盖了fMoW位置,并保留了与原始fMoW数据集中的标签镜像。fMoW-S2数据集由Sentinel-2光谱图像(B1-12和B8A)组成,分为三个子集:712874张训练图像、84939张验证图像和84966张测试图像,共882779张。每个图像的平均尺寸约为45像素高和60像素宽。有关fMoW-S2数据集的更多详细信息,有兴趣的人士可参阅专门的网站,在这!。

​ 此外,该研究结合了BigEarthNet数据集,特别是BigEarthNet- s2变体,在这!,包括590,326个不同的、不重叠的Sentinel-2光谱图像标记。使用该方法对不同变体模型进行预训练,涉及使用712,874张fMoW-S2图像和354,196张bigearth - s2图像。值得注意的是,只有10%的带有标签的bigearth - s2图像(总计35420张)被用于下游任务的微调。

H.实现细节和实验设置

​ 根据既定惯例,我们承认Sentinel-2图像包含13个光谱波段。然而,为了在信道组成方面协调预训练和下游任务之间的数据集,我们选择在所有fMoW数据集图像中保留12个优势波段,不包括波段B10。为了保证数据的一致性,我们将光谱图像逐波段归一化,将其值缩放到0到1的标准化范围。随后,我们遵循既定的方法[30]进行预处理。这包括在原始大小的0.2倍到1.0倍范围内随机裁剪图像,将它们调整为96 × 96像素,并应用水平翻转。这些细致的步骤共同有助于我们的谱基础模型的鲁棒性和兼容性。我们采用普通的ViT-Base架构作为网络骨干。为了使模型适应光谱数据,我们使用了8×8×3像素的令牌大小,有效地划分了图像。例如,一个大小为96 × 96 × 12像素的图像被分割成12 × 12 × 4个标记。从先前的工作[29]中获得灵感,我们的方法结合了两个可学习的位置嵌入。其中一种嵌入是专门用于空间信息的,而另一种是专门用于捕获跨光谱通道的变化的。这种增强进一步提高了模型从光谱输入中提取有意义特征的能力。

​ 我们的预训练严格遵循先前研究中概述的方法[30]。利用8个NVIDIA GeForce RTX 4090 gpuAMD EPYC7Y83的计算能力。我们实现了AdamW优化器[35],其基本学习率为 1 0 − 4 10^{-4} 104 ,加上半周期余弦衰减学习率调整策略。为了保证鲁棒性,我们采用了90%的3D掩蔽率,便于有效的训练。该模型在fMoW-S2数据集上进行了跨越200个epoch的综合预训练。在此阶段之后,模型继续在BigEarthNetS2数据集上进行100 epoch的训练。虽然这个阶段需要将输入尺寸修改为128 × 128 × 12,但其他设置保持一致。为了区分不同的阶段,仅在fMoW数据集上预训练的模型表示为SpectralGPT,而在两个数据集上以渐进的方式预训练的模型表示为SpectralGPT+。这种细致的策略有效地提高了模型在不同数据集上的适应性和性能。

SpectralGPT: Spectral Foundation Model 论文翻译 实验部分

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VAE模型及pytorch实现

VAE模型及pytorch实现 VAE模型推导部分最小化KL散度推导代码部分损失函数Encoder部分Decoder部分VAE整体架构 VAE问题参考资料 VAE(变分自编码器)是一种生成模型,结合了自编码器和概率图模型的思想。它通过学习数据的潜在分布,可以…

人工智能|机器学习——机器学习如何判断模型训练是否充分

一、查看训练日志 训练日志是机器学习中广泛使用的训练诊断工具,每个 epoch 或 iterator 结束后,在训练集和验证集上评估模型,并以折线图的形式显示模型性能和收敛状况。训练期间查看模型的训练日志可用于判断模型训练时的问题,例…

【Android知识笔记】性能优化专题(四)

App 线程优化 线程调度原理 任意时刻,只有一个线程占用CPU,处于运行状态多线程并发:轮流获取CPU使用权JVM负责线程调度:按照特定机制分配CPU使用权线程调度模型 分时调度模型:轮流获取、均分CPU时间抢占式调度模型:优先级高的获取,JVM采用Android线程调度 nice值:Proc…

Linux Nmap命令解析(Nmap指令)(功能:主机发现、ping扫描、arp扫描、端口扫描、服务版本检测、操作系统识别等)

文章目录 Linux Nmap 命令解析简介Nmap 的核心功能主机发现端口扫描服务版本检测OS 指纹识别(操作系统指纹识别)脚本扫描 安装 NmapNmap 命令结构Nmap 命令文档英文中文 主机发现Ping 扫描ARP 扫描关于nmap -PR(ARP Ping Scan)和n…

Unity 关于生命周期函数的一些认识

Unity 生命周期函数主要有以下一些: Awake(): 在脚本被加载时调用。用于初始化对象的状态和引用。 OnEnable(): 在脚本组件被启用时调用。在脚本组件被激活时执行一次,以及在脚本组件被重新激活时执行。 Reset(): 在脚本组件被重置时调用。用于重置脚本…

卷积神经网络(CNN)识别验证码

文章目录 一、前言二、前期工作1. 设置GPU(如果使用的是CPU可以忽略这步)2. 导入数据3. 查看数据4.标签数字化 二、构建一个tf.data.Dataset1.预处理函数2.加载数据3.配置数据 三、搭建网络模型四、编译五、训练六、模型评估七、保存和加载模型八、预测 …

Windows下Linkis1.5DSS1.1.2本地调试

1 Linkis: 参考: 单机部署 | Apache Linkis技术分享 | 在本地开发调试Linkis的源码 (qq.com)DataSphere Studio1.0本地调试开发指南 - 掘金 (juejin.cn) 1.1 后端编译 参考【后端编译 | Apache Linkis】】 修改linkis模块下pom.xml,将mysql.connetor.scope修改…

基于命令行模式设计退款请求处理

前言 这篇文章的业务背景是基于我的另一篇文章: 对接苹果支付退款退单接口-CSDN博客 然后就是说设计模式是很开放的东西,可能我觉得合适,你可能觉得不合适,这里只是做下讨论,没有一定要各位同意的意思.... 相关图文件 这里我先把相关的图文件放上来,可能看着会比较清晰点 代码逻…

从零开始的c语言日记day37——数组指针练习

一、 取地址数组储存在了*p里,里面储存的是整个数组的地址但本质也是第一个元素的地址解引用后1为4个字节所以就可以打印数组了。但一般不用这种方法 这样更方便一些 打印多维数组 如果不用这样传参,用指针传参怎么做呢? Main里函数的arr表示…

第1章 爬虫基础

目录 1. HTTP 基本原理1.1 URI 和 URL1.2 HTTP 和 HTTPS1.3 请求1.3.1 请求方法1.3.2 请求的网址1.3.3 请求头1.3.4 请求体 1.4 响应1.4.1 响应状态码1.4.2 响应头1.4.3 响应体 2. Web 网页基础2.1 网页的组成2.1.1 HTML2.1.2 CSS2.1.3 JavaScript 2.2 网页的结构2.3 节点树及节…

windows上 adb devices有设备 wsl上没有

终于解决了!!!! TAT,尝试了很多种办法。 比如WSL中的adb和Windows中的adb版本必须一致,一致也没用,比如使用 ln 建立链接也没用。 这个解决办法的前提是windows中的abd是好用的。 ●在windows…

JSP:JDBC

JDBC(Java Data Base Connectivity的缩写)是Java程序操作数据库的API,也是Java程序与数据库相交互的一门技术。 JDBC是Java操作数据库的规范,由一组用Java语言编写的类和接口组成,它对数据库的操作提供基本方法&#…

anaconda换源安装pytorch(附带bug解决办法)

1.安装anaconda 如何安装anaconda可以看这篇文章:如何安装anaconda 2.换源安装pytorch: 首先进入到pytorch官网,选对好参数之后复制命令进入到anaconda prompt即可: 然后进入自己的环境之后输入该命令(即conda install …),则可以进行下载。下载完成…

pandas教程:USDA Food Database USDA食品数据库

文章目录 14.4 USDA Food Database(美国农业部食品数据库) 14.4 USDA Food Database(美国农业部食品数据库) 这个数据是关于食物营养成分的。存储格式是JSON,看起来像这样: {"id": 21441, &quo…

入侵redis之准备---Linux关于定时任务crontab相关知识了解配合理解shell反弹远程控制

入侵redis之准备—Linux关于定时任务crontab相关知识了解配合理解shell反弹远程控制 几点需要知道的信息 【1】crontab一般来说服务器都是有的,依赖crond服务,这个服务也是必须安装的服务,并且也是开机自启动的服务,也就是说&…

C语言做一个恶作剧关机程序

一、项目介绍 C语言实现一个简单的"流氓软件"&#xff0c;一个可以强制关机恶作剧关机程序&#xff0c;输入指定指令可以解除 二、运行截图 然后当你输入“n”才可以解锁关机。 三、完整源码 #include <stdlib.h> #include <stdio.h> #include <s…

机器学习8:在病马数据集上进行算法比较(ROC曲线与AUC)

ROC曲线与AUC。使用不同的迭代次数&#xff08;基模型数量&#xff09;进行 Adaboost 模型训练&#xff0c;并记录每个模型的真阳性率和假阳性率&#xff0c;并绘制每个模型对应的 ROC 曲线&#xff0c;比较模型性能&#xff0c;输出 AUC 值最高的模型的迭代次数和 ROC 曲线。 …

【传智杯】儒略历、评委打分、萝卜数据库题解

&#x1f34e; 博客主页&#xff1a;&#x1f319;披星戴月的贾维斯 &#x1f34e; 欢迎关注&#xff1a;&#x1f44d;点赞&#x1f343;收藏&#x1f525;留言 &#x1f347;系列专栏&#xff1a;&#x1f319; 蓝桥杯 &#x1f319;请不要相信胜利就像山坡上的蒲公英一样唾手…

Vue框架学习笔记——事件scroll和wheel的区别

文章目录 前文提要滚动条滚动事件 scroll鼠标滚动事件 wheel二者不同点 前文提要 本人仅做个人学习记录&#xff0c;如有错误&#xff0c;请多包涵 滚动条滚动事件 scroll scroll事件绑定html页面中的指定滚动条&#xff0c;无论你拖拽滚动条&#xff0c;选中滚动条之后按键盘…

【深度学习】CNN中pooling层的作用

1、pooling是在卷积网络&#xff08;CNN&#xff09;中一般在卷积层&#xff08;conv&#xff09;之后使用的特征提取层&#xff0c;使用pooling技术将卷积层后得到的小邻域内的特征点整合得到新的特征。一方面防止无用参数增加时间复杂度&#xff0c;一方面增加了特征的整合度…