当前位置: 首页 > news >正文

(Arxiv,2024)Mind the Modality Gap:通过跨模态对齐建立遥感视觉语言模型

文章目录

  • 相关资料
  • 摘要
  • 引言
  • 相关工作
    • 对比语言图像预训练
    • 遥感域专用 CLIP 模型
    • 遥感中的多模态 CLIP 启发模型
  • 方法
    • 模型算法
        • 输入阶段:
        • 输出阶段:
        • 步骤说明:
    • 第一阶段:通过权重插值修补CLIP
    • 将遥感图像模态与自然图像和文本对齐
  • 实验

相关资料

论文:Mind the Modality Gap: Towards a Remote Sensing Vision-Language Model via Cross-modal Alignment

摘要

深度学习(DL)正在经历一场范式转变,随着基础模型的出现,这些基础模型被称为关键但不完整的模型。在这项工作中,我们专注于对比语言-图像预训练(CLIP),这是一个开放词汇基础模型,可以在许多图像分类任务中取得很高的准确率,并且通常与完全监督的基线竞争性能而无需显式训练。然而,仍然存在一些域,其中零样本CLIP性能远非最佳,例如遥感(RS)和医学图像。这些领域不仅与自然图像相比具有根本不同的分布,而且通常依赖于RGB之外的互补模态来提取有意义的见解。为此,我们提出了一种方法,目的是将不同的RS图像模态CLIP的视觉和文本模态进行对齐。我们的两阶段过程包括对CLIP进行鲁棒微调以处理分布转移,同时伴随RS模态编码器的跨模态对齐,以扩展CLIP的零样本能力。最终,我们在RS图像分类和跨模态检索任务上展示了我们的方法。我们在几个RS基准数据集上经验性地展示,鲁棒微调和跨模态对准都能转化为显著的性能提升。值得注意的是,这些增强是在不依赖文本描述、不引入任何特定任务参数、不从头开始训练以及不引入灾难性遗忘的情况下实现的。

引言

相较于典型的图像分类器,开放词汇模型并不受限于固定的分类空间,能够使用分类名的文本描述执行任何图像分类任务。另一方面,作为基础模型的深度学习模型通常通过规模上的自监督训练,在大量通过网络爬虫方法获取的未标记数据上进行训练,它们是大型且多功能的深度学习模型,可以适用于各种下游任务。开放词汇基础模型结合了大规模预训练和处理固定词汇以外单词的能力,因此引起了极大关注,得益于其卓越性能和在不同领域的泛化能力,尤其在文本输入可能包含特定领域术语的情况下,这些模型尤其有用。
然而,在某些领域,如遥感和医学图像等领域,零样本CLIP性能仍远未达到最佳水平。尤其是在卫星场景分类方面,这是CLIP作者提出的少数任务之一,在EuroSAT数据集上,零样本CLIP表现明显低于完全监督的ResNet50基准模型,导致最大的差值(37.1%)。
为此,我们确定了卫星场景分类任务的三个主要差距,并在本研究中加以解决:

  • 第一个差距涉及分布转移,即在训练期间使用的数据与模型部署时遇到的数据明显不同时,导致性能显著下降的潜在数据分布变化。
  • 第二个差距来自仅依赖RGB模态所造成的信息约束。卫星影像通常利用超出RGB的辅助模态(如多光谱、高光谱和雷达数据),以及这些模态的副产品,如InSAR数据,从而获得有意义的见解。
  • 第三个差距涉及具有卫星影像及相应文本描述对的数据集的稀缺性
    通常使用的遥感图像-文本配对数据集仅限于航空和超高分辨率商业卫星图像。这些数据集存在两个相关缺点。首先,它们不依赖于免费开放数据,如庇护神哨卫星星座数据。其次,这些数据集的空间分辨率直接关系到从场景中检索的细节级别,导致与非商业卫星数据相比具有不同的基础数据分布。这两个因素限制了它们在下游应用中的可用性。

为了解决这些差距,我们提出了一个新颖的方法学,包括两个连续阶段,旨在在CLIP的背景下对RS图像模态进行跨模态对齐。我们的研究基于OpenAI的CLIP预训练图像-文本模型的集合。在第一步中,我们定义了一个修补过程,通过使用RS数据的RGB混合图像对CLIP进行强化微调,以处理上述分布偏移,而不影响CLIP在自然图像分类任务上的零样本性能。至于第二步,我们通过将预训练的RS编码器CLIP的视觉和文本模态进行跨模态对齐,扩展了CLIP的零样本能力。

我们的主要贡献可以总结如下:

  • 我们提出了一种在CLIP背景下对RS图像模态进行跨模态对齐的新方法,无需依赖文本描述,无需引入任何特定于任务的参数,无需从头开始训练,也无需发生灾难性遗忘。
  • 我们评估了修补和对齐模型的泛化能力,并在一系列著名的RS图像数据集上提供了关于RS图像分类和跨模态检索任务的广泛基准数据。

相关工作

对比语言图像预训练

  • LAION-AI基于OpenAI的CLIP开源实现OpenCLIP展示了令人印象深刻的结果。他们设法复制了OpenAI的专有预训练数据集,随后在各种数据源和计算预算范围从小到大的实验中使用不同构架对多个模型进行了训练和发布。在CLIP预训练的背景下最近取得的进展展示了在预训练数据过滤、模型架构和计算效率方面的显著成就,导致了实质性的改进,并最终确立了在预训练CLIP模型时代的新标准。

遥感域专用 CLIP 模型

数据被视为基础模型训练的基石,CLIP也不例外。就RS领域而言,在与CLIP相关的发展方面落后,主要是因为领域内图像-文本配对数据稀缺。因此,近期的发展主要围绕着利用现有有限范围的RS数据集以及数据高效调整CLIP模型以解决手头的问题。

  • Arutiunian等人利用三个小型现有的RS图像字幕数据集对CLIP进行了微调,并展示了他们在检索相关任务上的结果。
  • Czerkawski等人强调,在零样本设置下,CLIP难以检测到无云图像,并通过在CLIP图像编码之上的单个线性层进行几百次优化步骤的低成本训练阶段来减轻这一限制,展示了改进的性能及跨各种传感器类型和光谱波段的可转移性。
  • Singha等人提出了一种基于图像情境提示学习策略的APPLeNet,用于利用CLIP模型进行少样本RS图像泛化。他们的方法专注于多尺度特征学习,并在RS中域泛化任务中对视觉风格和内容基元进行解耦,优于几个RS基准数据集中的零样本CLIP。
  • Liu等人提出了RemoteCLIP,一种RS领域专门化的CLIP模型。
  • Zhang等人提出了RS5M,一个500万 RS 图像字幕数据集,通过过滤公开可用的图像-文本配对数据集和使用预训练的 VLM 对仅具有字幕标签的 RS 数据集进行字幕化,旨在微调 CLIP。 他们尝试了完全微调和几种参数高效微调方法,并最终展示了他们的最终模型 GeoRSCLIP,在零样本分类、跨模态图像-文本检索以及与最先进的 RS 定制 CLIP 模型相比的语义定位任务上的表现。
  • Yuan等人引入了一种参数高效的迁移学习(PETL)方法,用于 RS 图像-文本检索,利用了预训练的 CLIP 模型、多模态适配器和混合多模态对比学习目标,优于传统方法,并且大幅降低了训练成本,相比完全微调。
  • Mo等人提出了 S-CLIP,一种用于微调 CLIP 的半监督学习方法,通过使用特定设计用于对比学习的伪标签策略,利用额外的未配对图像,显著提高微调结果,使用的图像-文本对数量比通常所需的更少。
  • Bhattacharya等人提出了 C-SAW,一种自监督提示学习技术,将重建任务纳入 RS 应用中的图像泛化。在微调过程中,他们保持了 CLIP 骨干网络冻结,并为两个 CLIP 编码器引入了一小组投影器,使用 C-SAW 进行对比训练。
  • Dhakal等人提出了一种用于基于自由形式文本描述创建地图的新型弱监督方法,称为无标记映射。 他们利用一个名为 Sat2Cap 的对比学习框架,训练了配对的高空和地面级图像,以从卫星图像中预测地面景观的 CLIP 嵌入。他们成功地映射了各种属性,而无需文本标记数据,克服了以前仅能映射预定义属性的模型的局限性。
  • Mall等人通过对训练一个将 RGB 卫星图像映射到相同表示空间的冻结 CLIP 图像编码器的对比学习,使用大量配对的互联网图像和 RGB 卫星图像复合物,解决了文本描述稀缺性的问题。 利用大量的地面卫星图像对而无需伴随文本比在小数据集上进行有监督微调更为有益。

遥感中的多模态 CLIP 启发模型

  • Allen等人利用三种不同的RS图像模态(Sentinel-2 RGB光学和Sentinel-1 SAR雷达振幅和干涉相干性)在覆盖地球总陆地面积较小百分比的五个AOI上预训练了基于ViT的CLIP模型。该模型由三个单独的单通道ViT-based输入编码器组成,这些编码器在预训练期间对每种模态都选择随机的通道进行操作,旨在在所有三种模态之间创建一个共享的嵌入空间,同时测量每对模态的相似性然后求平均。
  • Klemmer等人[65]展示了SatCLIP,一个全球性的地理位置编码器,利用全球可用的卫星图像学习通用隐式表示,通过使用CLIP目标来匹配卫星图像及其各自的坐标进行预训练。
  • Cepeda等人[66]引入了GeoCLIP,一种基于CLIP灵感的用于全球定位的图像到GPS检索方法。与SatCLIP不同,GeoCLIP利用预训练的CLIP图像编码器,并强化与相应GPS位置的对齐。使用分层学习和随机傅里叶特征,GeoCLIP在有限数据设置中展示了出色的有效性,并在众多下游任务中有潜在应用。
  • Khanal等人[67]提出了GeoCLAP,基于声音与地理位置的视觉特征之间的关系为声景映射任务提出了一种对比学习框架。他们利用基于CLIP的模型对三种数据进行编码:地理标记的音频记录,音频的文本描述以及其拍摄位置的高空图像。

方法

D = { ( I S A T 1 , y 1 ) , . . . , ( I S A T n , y n ) } D = \{(I^1_{SAT} , y_1), . . . , (I^n_{SAT} , y_n)\} D={(ISAT1,y1),...,(ISATn,yn)} 成为一个标记的 RS 成像存档,其中包含 n n n 个图像-标签对,其中 ( I S A T n , y n ) (I^n_{SAT} , y_n) (ISATn,yn) 是存档中的第 n 个图像-标签对。每个图像 I S A T i I^i_{SAT} ISATi 都有一个相应的 RGB 复合图像 I R G B i ⊊ I S A T i I^i_{RGB} ⊊I^i_{SAT} IRGBiISATi,使用一个取决于 I S A T I_{SAT} ISAT 的 RS 模态的专用函数 T R G B ( ) T_{RGB} () TRGB()生成。鉴于 RS 成像集合 I S A T I_{SAT} ISAT 和相应的 RGB 复合物集合 I R G B ( ) I_{RGB} () IRGB(),以及相关的标签 y y y,我们旨在通过利用 RGB 复合物和标签作为锚点来学习一个共享的嵌入空间 E E E,以有效地对齐这些模态。目标是找到一个映射 f : I S A T ∪ I R G B ∪ y → E f: I_{SAT} ∪I_{RGB} ∪ y → E f:ISATIRGByE,使得对于每个三元组 ( I S A T i , I R G B i , y i ) (I^i_{SAT} , I^i_{RGB} , y^i ) (ISATi,IRGBi,yi),嵌入 f ( I S A T i ) 、 f ( I R G B i ) f (I^i_{SAT} )、f (I^i_{RGB}) f(ISATi)f(IRGBi) f ( y i ) f (y^i ) f(yi) E E E中紧密对齐。最终的嵌入空间 E E E 通过学习的表示,促进了 RS 成像模态、RGB 图像和文本之间的关联,从而实现了多模态下游任务。
为此,我们采用了一个分为两个阶段的方法,明确定义如算法 1。
在这里插入图片描述

模型算法

输入阶段:
  1. 初始化预训练的CLIP模型 M和分词器 T:加载预训练的CLIP模型和用于文本处理的分词器。

  2. 定义数据集D:包含若干图像-标签对 (xi, yi),类别名称集合Dclassnames,以及提示集合Dprompts。

  3. 初始化预训练的卫星成像模式编码器Msat:加载用于处理卫星图像数据的预训练编码器。

输出阶段:
  • 输出对齐的卫星编码器Msat:返回经过对齐的卫星成像模式编码器,该编码器能够与CLIP模型的视觉和文本模式更好地协同工作。
步骤说明:
  1. 创建分类头cls_head()

    • 设置CLIP模型为推理模式。
    • 为每个类别创建一个分类头,通过将类别名称格式化为提示、分词、编码文本,然后归一化和平均文本嵌入。
  2. 对齐模型align(Mteach, Mstud)

    • 初始化一个冻结的分类头h,使用cls_head()创建的分类头。
    • 设置Mstud(卫星成像模式编码器)为可训练状态,同时冻结Mteach(CLIP图像编码器)。
    • 对于数据集中的每一对图像xi(RGB图像)和其对应的卫星图像xi,获取它们在CLIP模型和卫星编码器中的嵌入表示。
    • 使用分类头h对卫星图像的嵌入进行分类,并计算损失函数,该函数是均方误差(MSE)和交叉熵(CE)的线性组合。
  3. 主函数main()

    • 步骤 1: CLIP模型修补Patching
      • 使用BigEarthNet-S2数据集的RGB组合图像对CLIP模型进行微调。
      • 通过微调前后的权重线性插值,找到平衡修补任务和支持任务性能的混合系数α。
    • 步骤 2: 跨模态对齐
      • 加载卫星成像模式编码器Msat,并使用align()函数将其与CLIP模型的图像和文本编码器进行对齐。

这个算法的目的是通过两个阶段的处理,使得卫星成像模式编码器能够在一个共享的嵌入空间中与CLIP模型的视觉和文本模式有效对齐,从而提高遥感图像的分类和检索性能。
第一步解决卫星成像中的分布偏移,通过对 CLIP 图像编码器进行稳健的微调。
随后,在第二阶段,卫星多光谱模态嵌入与 RGB 图像和文本嵌入对齐,即将 Sentinel-2 多光谱成像对齐到 RGB 复合物和文本。由此产生的嵌入空间有效地关联了模态对,使得可以进行大量交叉模态检索和基于文本的零样本下游任务。

第一阶段:通过权重插值修补CLIP

在这里插入图片描述

Patching with Interpolation(PAINT)能显著提高在分布转变下的准确性,同时在目标分布上保持高性能。PAINT采用两步过程,包括对模型进行微调,然后在微调之前和之后的模型权重之间进行线性插值。这种方法使得模型在更多任务上实现高准确性,而无需引入任何特定任务的参数,也无需从头重新训练模型,同时避免灾难性遗忘。
为了处理自然图像与卫星图像之间的分布转变,我们首先对CLIP进行了稳健微调,如图1所示,遵循了Ilharco等人描述的补丁协议。最终,我们得到了一个精炼的嵌入空间,从而为便于进行卫星交叉模态对准阶段奠定了坚实的基础。鉴于一个开放词汇模型,即CLIP,带有权重 W z s W_{zs} Wzs ,我们在来自一个补丁任务 D p a t c h D_{patch} Dpatch 的训练数据上对 W z s W_{zs} Wzs 进行了微调,目的是产生权重 W f t W_{ft} Wft,在 D p a t c h D_{patch} Dpatch上表现高准确性,而不降低已经足够良好的支持任务 D s u p p D_{supp} Dsupp上的性能。因此,通过保留的 D p a t c h D_{patch} Dpatch D s u p p D_{supp} Dsupp上的留出验证集确定一个混合系数 α ∈ [ 0 , 1 ] α ∈ [0, 1] α[0,1],以线性插值 W z s W_{zs} Wzs W f t W_{ft} Wft并生成 W p a t c h = ( 1 − α ) × W z s + α × W f t W_{patch} = (1-α)×W_{zs} +α×W_{ft} Wpatch=(1α)×Wzs+α×Wft 。实质上, W z s W_{zs} Wzs W f t W_{ft} Wft W p a t c h W_{patch} Wpatch是CLIP图像编码器的权重。Ilharco等人[68]在微调过程中,使用CLIP的文本冻结输出作为图像编码器的输出层,以将图像特征映射到类别空间,而不是引入一个可学习的分类层。

将遥感图像模态与自然图像和文本对齐

在这里插入图片描述

在跨模态对齐阶段(如图 2 所示),我们利用第一阶段中使用的已修补的 CLIP 图像编码器 M p a t c h e d M_{patched} Mpatched 作为教师网络,以及一个预训练的卫星模态编码器 M s a t M_{sat} Msat 作为学生网络。为了有效地对齐这两个网络,我们采用一个基于以下假设的简单方法,即与相同样本相关的多种模态应在共享的CLIP嵌入空间中产生类似的嵌入。该过程涉及一对模态 I R G B I_{RGB} IRGB I S A T I_{SAT} ISAT 对应于 RGB 组合和其他遥感模态。对于给定的来自这两个模态的图像 x i ∈ I R G B x_i ∈ I_{RGB} xiIRGB 和其对应的样本 x ~ i ∈ I S A T \widetilde{x}_i ∈ I_{SAT} x iISAT,我们获得它们各自的嵌入 E i = M p a t c h e d ( x i ) E_i = M_{patched}(x_i) Ei=Mpatched(xi) E ~ i = M s a t ( x ~ i ) \widetilde{E}_i = M_{sat}(\widetilde{x}_i) E i=Msat(x i)
在嵌入维度 E i E_i Ei E ~ i \widetilde{E}_i E i 不同的情况下,我们为学生网络 M s a t M_{sat} Msat 引入一个线性投影头,以确保输出嵌入尺寸匹配。
受知识蒸馏 [72] 损失函数以及先前的蒸馏工作 [73]-[76] 启发,通过一个联合目标函数 L I , M L_{I,M} LI,M,指导学生模仿教师的视觉和文本嵌入,该函数由交叉熵损失 L C E L_{CE} LCE 和均方误差损失 L M S E L_{MSE} LMSE 的线性组合构成。
在这里插入图片描述
L C E L_{CE} LCE通过使用 CLIP 文本编码器的冻结输出作为锚点利用标记数据监督确定,将图像特征映射到类别空间,而 L M S E L_{MSE} LMSE 鼓励学生模仿教师的输出嵌入,与原始知识蒸馏损失的相对柔化的类别得分形成对比。

实验

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

相关文章:

(Arxiv,2024)Mind the Modality Gap:通过跨模态对齐建立遥感视觉语言模型

文章目录 相关资料摘要引言相关工作对比语言图像预训练遥感域专用 CLIP 模型遥感中的多模态 CLIP 启发模型 方法模型算法输入阶段:输出阶段:步骤说明: 第一阶段:通过权重插值修补CLIP将遥感图像模态与自然图像和文本对齐 实验 相关…...

区块链 | 一文了解 NFT 的生态系统(上)

🐶原文: Understanding Security Issues in the NFT Ecosystem 🐶写在前面: 本博客只摘取了原论文的第二、三节。 技术背景知识 在本节中,我们将介绍以太坊生态系统的构建模块,重点关注「NFT,…...

为什么centos官方版不支持arm架构?

为什么centos官方版不支持arm架构? 1、资源限制:CentOS是由社区维护的开源操作系统,其开发和维护需要大量的人力和物力资源。由于ARM架构的设备相对较少,社区资源有限,因此官方版CentOS选择集中精力在x86架构上进行开发…...

awk小尝试2(随手记)

文章目录 需求1解法 需求2解法(3种-grep/sed/awk) 需求1 使用hostname -I创建文件名 echo hostname -I.txt 10.0.0.124 .txt # 需要注意,这里的.txt前有一个空格,需要去掉,不然就是两个文件名解法 echo hostname -I…...

Vue的项目启动指令分析

通过Vue CLI脚手架创建的项目,默认的启动项目方式是 npm run serve 这里的serve是可以修改的。 在创建的项目目录中,找到package.json 双击打开,找到scripts部分 在scripts部分,有一个"serve"键值对,这里的…...

年轻人刮疯了,刮刮乐断货了

年轻人刮疯了 刮刮乐缺货了。 00后彩票店老板陆诗等得有点着急。她的福彩店开在深圳,今年4月才开门营业,但从开业到今天,刮刮乐总共就来了一回货——开业时发的20本。 那之后,刮刮乐就彻底断供了。原本,陆诗想把刮刮…...

25 JavaScript学习:var let const

JavaScript全局变量 JavaScript中全局变量存在多种情况和定义方式,下面详细解释并提供相应的举例: 使用var关键字声明的全局变量: var globalVar "我是全局变量";未使用var关键字声明的变量会成为全局变量(不推荐使用&…...

docker部署的nacos2.2x开启鉴权功能

注意在2.2.0版本之后如果不开启鉴权,那么默认不需要登录就可以访问 所以我们需要手动开启鉴权,nacos启动好以后来到容器内部修改 docker exec -it nacos /bin/shvim conf/application.properties在第34行下面添加 nacos.core.auth.enabledtrue nacos.cor…...

【数据结构与算法】之五道链表进阶面试题详解!

目录 1、链表的回文结构 2、相交链表 3、随机链表的复制 4、环形链表 5、环形链表(||) 6、完结散花 个人主页:秋风起,再归来~ 数据结构与算法 个人格言:悟已往之不谏,知…...

vue2实现生成二维码和复制保存图片功能(复制的同时会给图片加文字)

<template><divstyle"display: flex;justify-content: center;align-items: center;width: 100vw;height: 100vh;"><div><!-- 生成二维码按钮和输入二维码的输入框 --><input v-model"url" placeholder"输入链接" ty…...

Redis之字符串类型深入之SDS底层结构

作为一名程序员不可能不知道redis 知道redis不可能不知道redis的字符串 如果你真的熟悉redis不能不知道sds, 我们探究一下redis字符串的底层结构 sds翻译过来就是动态扩容(Simple Dynamic String)、先看一下最早版本redis的sds结构体 struct sdshdr{int len; //记录数组中…...

Cesium 3dTileset 支持 uv 和 纹理贴图

原理: 使用自定义shader实现uv自动计算 贴图效果: uv效果:...

C++可变参数模板中的省略号

看可变参数模板代码时常会遇到省略号的使用&#xff0c;这类奇特的“...”出现位置还不固定&#xff0c;容易引起困惑。C最近一直不用都快废了&#xff0c;在此想对省略号的使用做个简单归纳以提醒自己。可变参数模板以两种方式使用省略号。 在参数名称的左侧&#xff0c;表示“…...

uni-ui 使用uni-icons有些图标显示不出来,如down,up图标

问题描述 我使用的是uni创建时勾选的uni-ui模板&#xff0c;一次偶然机会发现down图标显示不出&#xff0c;left&#xff0c;right等其他图标又可以。 最后发现使用uni-icons不是最新版本导致的&#xff0c;使用模板生成的icons是1.3.5版本&#xff0c;我在插件市场找到的是2.0…...

动态增删表格

期望目标&#xff1a;实现一个能通过按钮来动态增加表格栏&#xff0c;每次能添加一行&#xff0c;每行末尾有一个删减按钮。 <el-button type"text" class"primary"click"addMember()">添加</el-button> <el-table:data"m…...

Java-(乘法表之后)增强for循环

这里我们先做个了解&#xff0c;之后我会在数组中进行详细介绍Java5引入了一种主要用于数组或集合的增强型for循环Java增强型for循环语法格式如下 For(声明语句&#xff1a;表达式&#xff09;{ //代码语句 } 声明语句&#xff1a;声明新的局部变量&#xff0c;该变量的类型…...

Celery(分布式任务队列)入门学习笔记

Celery 的简单介绍 用 Celery 官方的介绍&#xff1a;它是一个分布式任务队列; 简单&#xff0c;灵活&#xff0c;可靠的处理大量消息的分布式系统; 它专注于实时处理&#xff0c;并支持任务调度。 Celery 如果使用 RabbitMQ 作为消息系统的话&#xff0c;整个应用体系就是下…...

【网络】tcp协议如何保证可靠性

TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的传输层协议&#xff0c;为网络通信提供了可靠性和连接稳定性。本文将详细介绍 TCP 协议如何保证数据的可靠传输和连接的稳定性&#xff0c;并分析其优缺点。 可靠性保证 序号和确认机制&…...

select,poll,epoll

在 Linux Socket 服务器短编程时&#xff0c;为了处理大量客户的连接请求&#xff0c;需要使用非阻塞I/O和复用&#xff0c;select&#xff0c;poll 和 epoll 是 Linux API 提供的I/O复用方式。 \selectpollepoll操作方式遍历遍历回调底层实现数组链表哈希表IO效率每次调用都进…...

【48天笔试强训】day18

题目1 描述 有一种兔子&#xff0c;从出生后第3个月起每个月都生一只兔子&#xff0c;小兔子长到第三个月后每个月又生一只兔子。 例子&#xff1a;假设一只兔子第3个月出生&#xff0c;那么它第5个月开始会每个月生一只兔子。 一月的时候有一只兔子&#xff0c;假如兔子都…...

链表经典面试题01

目录 引言 面试题01:返回倒数第k个节点 题目描述: 思路分析: 代码展示: 面试题02:链表的回文结构 题目描述: 描述 思路分析: 代码展示: 面试题03:相交链表 题目描述: 思路分析: 代码展示: 小结: 引言 这次的题均来自力扣和牛客有关链表的经典面试题,代码只会展示…...

基于java的CRM客户关系管理系统的设计与实现(论文 + 源码 )

【免费】基于Java的CRM客户关系管理系统的设计和实现.zip资源-CSDN文库https://download.csdn.net/download/JW_559/89273409 基于Java的CRM客户关系管理系统的设计与实现 摘 要 随着互联网的高速发展&#xff0c;市场经济的信息化&#xff0c;让企业之间的竞争变得&#xff0…...

【动态规划-最长上升子序列模型part2】:拦截导弹、导弹防御系统、最长公共上升子序列【已更新完成】

1、拦截导弹 某国为了防御敌国的导弹袭击&#xff0c;发展出一种导弹拦截系统。 但是这种导弹拦截系统有一个缺陷&#xff1a;虽然它的第一发炮弹能够到达任意的高度&#xff0c;但是以后每一发炮弹都不能高于前一发的高度。 某天&#xff0c;雷达捕捉到敌国的导弹来袭。 由于…...

Spring 如何解决 Bean 循环依赖

循环依赖解释 bean A 属性注入时依赖bean B &#xff0c;并且bean B属性注入时也依赖bean A &#xff0c;造成 bean A 和bean B 都无法完成初始化问题&#xff0c;形成了闭环。 注意 项目中存在Bean的循环依赖&#xff0c;是Bean对象职责划分不明确、代码质量不高的表现&#…...

【driver4】锁,错误码,休眠唤醒,中断,虚拟内存,tasklet

文章目录 1.互斥锁和自旋锁选择&#xff1a;自旋锁&#xff08;开销少&#xff09;的自旋时间和被锁住的代码执行时间成正比关系2.linux错误码&#xff1a;64位系统内核空间最后一页地址为0xfffffffffffff000~0xffffffffffffffff&#xff0c;这段地址是被保留的&#xff0c;如果…...

python之 函数相关知识解析

01 函数的注释与嵌套 1.函数的注释 函数的注释与普通注释的区别&#xff1a;用来说明当前函数的参数含义 param 参数名: 参数的注释信息 return: 函数的返回值 例如&#xff1a; def fun1(name):""":param name: 参数的注释信息:return: 函数的返回值"…...

监视器和显示器的区别,普通硬盘和监控硬盘的区别

监视器与显示器的区别&#xff0c;你真的知道吗&#xff1f; 中小型视频监控系统中&#xff0c;显示系统是最能展现效果的一个重要环节&#xff0c;显示系统的优劣将直接影响视频监控系统的用户体验满意度。 中小型视频监控系统中&#xff0c;显示系统是最能展现效果的一个重要…...

Linux:升级OpenSSL和OpenSSH

原因是现有版本存在安全漏洞&#xff0c;需要升级到新版本 原有版本和升级后的版本 OpenSSL 1.0.2k-fips 26 Jan 2017 -> OpenSSL 1.1.1w 11 Sep 2023OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 -> OpenSSH_9.5p1, OpenSSL 1.1.1w 11 Sep 2023目录 查看现有版…...

方法的入栈和出栈

一.作用域问题 1.全局作用域 在全局都能进行访问的变量 var a 10;function fn() {var b 20;return a b;}console.log(fn()); 2.局部的作用域 只能在限定的范围内进行访问 function fn() {var b 20;}console.log(b); b is not defined 打印的结果是b这个变量没用定义 3…...

PHP介绍

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;PHP❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、PHP是什么&#xff1f; 二、 PHP 文件是什么&#xff1f; 三、PHP能做什么&#xff1f; 四、P…...

产品网站建设/百度营销是什么

array array_slice ( array $array , int $offset [, int $length [, bool $preserve_keys ]] ) array_slice() 返回根据 offset 和 length 参数所指定的 array 数组中的一段序列。 如果 offset 非负&#xff0c;则序列将从 array 中的此偏移量开始。如果 offset 为负&#xff…...

乌鲁木齐seo网站建设/济南seo公司报价

c输入和输出流1 流的概念和流类库的结构程序的输入指的是从输入文件将数据传送给程序&#xff0c;程序的输出指的是从程序将数据传送给输出文件。C输入输出包含以下三个方面的内容&#xff1a;对系统指定的标准设备的输入和输出。即从键盘输入数据&#xff0c;输出到显示器屏幕…...

免费ppt模板下载 知乎/seo的概念

编辑vi etc/vimrc 在文本前面添加以下命令&#xff0c;然后保存退出:wq! set fileencodingsutf-8,gb2312,gbk,gb18030 ​set termencodingutf-8 ​set fileformatsunix ​set encodingprc OK!现在vim可以顺利编译中文了 作者&#xff1a;赖忠标 转载于:https://www.cnblogs.co…...

中天建设集团有限公司第九建设公司/德州seo优化

对列的顺序进行处理 order [date, time, open, high] df df[order]会按照新的列规则来进行排列...

动态网站开发毕业论文/求网址

给定一个 32 位有符号整数&#xff0c;将整数中的数字进行反转。 示例 1: 输入: 123 输出: 321 示例 2&#xff1a; 输入: -123 输出: -321 示例 3&#xff1a; 输入: 120 输出: 21 注意: 假设我们的环境只能存储 32 位有符号整数&#xff0c;其数值范围是 [−231, 231 − 1]。…...

高端网站制作/市场推广外包团队

搜索附加驱动或者drive 然后会出现让你选择nvidia binary driver,然后点击应用更改即可。 转载于:https://www.cnblogs.com/huangshiyu13/p/6209039.html...