AnomalyGPT——使用大型视觉语言模型进行工业异常检测的算法解析与应用

1.概述

工业缺陷检测是工业自动化和质量控制中的一个重要环节,其目的是在生产过程中识别和分类产品或组件中的缺陷,以确保最终产品的质量满足既定标准。这项技术的应用可以显著提高生产效率,降低成本,并减少由于缺陷产品导致的潜在安全风险。

1.1 工业异常检测的关键点:

  1. 质量控制:通过检测产品制造过程中的缺陷,确保产品质量符合标准。
  2. 过程监控:实时监控生产过程,及时发现并纠正可能导致质量问题的因素。
  3. 预测性维护:通过分析设备状态,预测潜在的故障,从而在问题发生前进行维护。
  4. 自动化:减少人工检查的需求,提高检测速度和准确性。
  5. 数据驱动:利用从传感器、摄像头等收集的数据进行分析,以识别异常模式。

常用的工业异常检测方法:

  1. 统计过程控制(SPC):使用统计方法监控和控制生产过程,以减少变异。
  2. 机器学习:应用各种机器学习算法,如支持向量机(SVM)、随机森林、神经网络等,来识别异常。
  3. 深度学习:使用深度神经网络,尤其是卷积神经网络(CNN)来处理视觉数据,检测图像中的异常。
  4. 时间序列分析:分析传感器数据的时间序列,以识别设备运行中的异常模式。
  5. 视觉-语言模型:结合视觉和语言信息,提高对异常的识别能力。

1.2 工业异常检测的挑战:

  1. 数据获取:收集足够的、标注良好的训练数据可能很困难,尤其是在高度专业化的工业环境中。
  2. 实时性:在快速的生产线上实时检测异常是一个技术挑战。
  3. 泛化能力:模型需要能够泛化到不同类型的异常和不同的生产条件下。
  4. 解释性:在工业应用中,模型的决策过程需要足够透明,以便工程师能够理解并信任系统的输出。
  5. 集成:将异常检测系统与现有的生产线和IT基础设施集成可能需要克服技术和操作上的障碍。

1.3 工业异常检测的应用:

  • 半导体制造:检测晶片上的微小缺陷。
  • 汽车工业:检查装配线上的零部件。
  • 包装行业:确保包装完整性和标签正确。
  • 机械制造:监测机床状态,预防设备故障。

2. LLM与工业缺陷检测结合应用

随着大语言模型(LLMs)的兴起,它们在工业缺陷检测领域的应用变得越来越多样化和深入。以下是大语言模型与工业缺陷检测结合的几个关键方面:

自动化标注:LLMs可以自动生成或辅助生成训练数据的标注,减少人工标注的需求。通过理解缺陷的描述性语言,模型能够识别图像中的缺陷并标注。
缺陷识别:LLMs可以被训练来识别图像或传感器数据中的缺陷模式。它们可以从大量未标记的数据中学习,并通过迁移学习适应特定的工业应用。
多模态检测:结合视觉和语言信息,LLMs可以进行多模态学习,提高缺陷检测的准确性。例如,模型可以同时处理图像数据和相关的技术文档,以更好地理解和识别缺陷。
上下文理解:LLMs能够理解复杂的上下文信息,包括产品规格、制造过程和历史缺陷数据,这有助于提高缺陷检测的相关性和准确性。
预测性维护:LLMs可以分析历史维护记录和实时传感器数据,预测设备可能出现的故障,从而实现预测性维护。
交互式检测:LLMs可以提供交互式的缺陷检测体验,允许操作员通过自然语言查询来获得关于缺陷的详细信息和建议。
持续学习:LLMs可以不断地从新的数据中学习,自动更新其知识库,以适应生产过程中的变化。
报告和文档:LLMs可以自动生成关于缺陷检测结果的详细报告,包括缺陷的类型、位置、严重程度和可能的原因。
模型解释性:尽管LLMs通常被认为是“黑盒”模型,但它们可以提供一定程度的解释性,帮助理解缺陷检测的决策过程。
跨领域应用:LLMs的通用性使得它们可以跨不同的工业领域应用,从汽车制造到半导体生产,再到食品加工等。
然而,将LLMs应用于工业缺陷检测也面临一些挑战,包括但不限于:

  • 数据隐私和安全性:工业数据往往涉及敏感信息,需要确保在处理和分析数据时遵守数据保护法规。
  • 模型泛化能力:需要确保模型不仅在训练数据上表现良好,也能泛化到新的、未见过的数据。
  • 实时性能:工业环境要求缺陷检测系统具有高实时性,这可能对模型的复杂性和计算资源提出挑战。
  • 集成和兼容性:将LLMs集成到现有的工业系统中可能需要解决技术和操作上的兼容性问题。

3. AnomalyGPT

AnomalyGPT是第一个基于大型视觉-语言模型(LVLM)的工业异常检测(IAD)方法,可以在不需要手动指定阈值的情况下检测工业图像中的异常。现有的IAD方法只能提供异常评分并需要手动设置阈值,而现有的LVLMs无法检测图像中的异常。AnomalyGPT不仅可以显示异常的存在和位置,还可以提供图像的相关信息。
项目地址:https://anomalygpt.github.io/
论文地址:https://arxiv.org/pdf/2308.15366.pdf
Github地址:https://github.com/CASIA-IVA-Lab/AnomalyGPT

3.1 AnomalyGPT概述

本文提出了一种基于大型视觉语言模型的工业异常检测方法AnomalyGPT。该方法通过模拟异常图像并生成相应的文本描述来生成训练数据,并使用图像解码器提供细粒度语义。AnomalyGPT消除了手动阈值调整的需要,直接评估异常的存在和位置。此外,AnomalyGPT支持多轮对话,并展现了令人印象深刻的少样本上下文学习能力。在MVTec-AD数据集上,AnomalyGPT实现了86.1%的准确率,94.1%的图像级AUC和95.3%的像素级AUC的最新性能。

IAD任务旨在检测和定位异常。目前工业产品图像异常检测方法通常只提供测试样本的异常分数,并需要手动设置阈值来区分正常和异常实例,这在实际生产环境中不适用。

AnomalyGPT是一种基于LVLM的新型IAD方法,可以检测异常的存在和位置,无需手动设置阈值。此外,该方法可以提供图像信息和交互式参与,允许用户根据需要提出后续问题。AnomalyGPT还可以在少量正常样本的情况下进行上下文学习,快速适应以前未见过的对象。

图片

图片
工业产品图像异常检测(IAD)任务的目标是检测和定位异常。目前的工业产品图像异常检测方法通常只提供测试样本的异常分数,并需要手动设置阈值来区分正常和异常实例,这在实际生产环境中并不适用。

AnomalyGPT是一种基于LVLM的新型IAD方法,可以检测异常的存在和位置,无需手动设置阈值。此外,该方法可以提供图像信息和交互式参与,允许用户根据需要提出后续问题。AnomalyGPT还可以在少量正常样本的情况下进行上下文学习,快速适应以前未见过的对象。
图片

图片

图片

本文提出了一种使用合成的异常视觉-文本数据来微调LVLM模型的方法,并将IAD知识集成到模型中。由于IAD数据稀缺,我们使用提示嵌入来微调LVLM,而不是参数微调。我们还提出了一种轻量级的视觉-文本特征匹配解码器,用于生成像素级异常定位结果,并将其与原始测试图像一起通过提示嵌入引入LVLM,从而提高其判断准确性。

我们在MVTec-AD和VisA数据集上进行了大量实验。在MVTec-AD数据集上进行无监督训练时,我们实现了93.3%的准确率,97.4%的图像级AUC和93.1%的像素级AUC。当将模型迁移到VisA数据集时,我们实现了77.4%的准确率,87.4%的图像级AUC和96.2%的像素级AUC。相反,在VisA数据集上进行无监督训练后,将模型迁移到MVTec-AD数据集上,我们实现了86.1%的准确率,94.1%的图像级AUC和95.3%的像素级AUC。

我们的贡献如下:

  • 首次将LVLM应用于工业异常检测领域,实现了自动检测和定位异常,并支持多轮对话。
  • 通过轻量级的视觉-文本特征匹配解码器,解决了LLM在细粒度语义辨别上的局限性,并减轻了LLM仅能生成文本输出的限制。
  • 使用提示嵌入进行微调,并与LVLM预训练数据同时训练,从而保留了LVLM的固有能力,并实现了多轮对话。
  • 本方法具有强大的迁移能力,在新数据集上能够进行上下文少样本学习,并取得了出色的性能。

4.相关工作

4.1 工业异常检测

工业异常检测方法主要可分为基于重构和基于特征嵌入的两种类型。

  • 基于重构的方法旨在将异常样本重构为其对应的正常样本,并通过计算重构误差来检测异常。RIAD、SCADN、InTra和AnoDDPM采用不同的重构网络架构,包括自编码器、生成对抗网络、Transformer和扩散模型。

  • 特征嵌入方法通过建模正常样本的特征嵌入来检测异常。这些方法包括PatchSVDD、Cflow-AD、PyramidFlow、PatchCore和CFA等。它们的实现方式包括寻找紧密包围正常样本的超球体、使用正态流将正常样本投影到高斯分布上、建立正常样本的嵌入存储库并通过测量测试样本嵌入与存储库中最近的正常嵌入之间的距离来检测异常。

传统的方法需要大量的正常样本来学习每个对象类的分布,因此对于新的对象类和动态生产环境来说并不实用。相比之下,我们的方法可以为新的对象类进行上下文学习,只需要少量的正常样本就可以进行推理。

4.2 少样本/零样本工业异常检测

最近的工作集中在利用少量正常样本来进行工业异常检测。PatchCore构建了一个只使用少量正常样本的存储库,导致性能下降。RegAD训练了一个图像配准网络来对齐测试图像和正常样本,然后计算对应补丁的相似度。WinCLIP利用CLIP计算图像和文本描述之间的相似度,区分正常和异常语义,但这些方法只能在推理过程中为测试样本提供异常分数。与之相反,我们的方法可以直接评估测试样本中是否存在异常并确定其位置,具有更强的实用性。

**大视觉-语言模型。**LLMs在视觉任务中得到了探索,BLIP-2、MiniGPT-4和PandaGPT等模型将视觉特征与语言模型相结合,进行了多模态输入和两阶段微调等操作。这些方法展示了LLMs在视觉任务中的潜力。

AnomalyGPT是一种新方法,通过利用模拟异常数据、图像解码器和提示嵌入,实现了IAD任务,无需手动指定阈值,同时也实现了少量上下文学习。与现有方法相比,AnomalyGPT在各种功能上具有更好的表现。

5.算法架构

AnomalyGPT是一种新颖的对话式IAD视觉-语言模型,主要用于检测工业制品图像中的异常并确定其位置。我们利用预训练的图像编码器和LLM通过模拟异常数据来对齐IAD图像和对应的文本描述。我们引入了解码器模块和提示学习模块,以提高IAD性能并实现像素级定位输出。使用提示调整和与预训练数据的交替训练可以保持LLM的可转移性并防止灾难性遗忘。我们的方法具有强大的少样本迁移能力,仅需提供一个正常样本即可检测和定位以前未见过的物品的异常。

5.1 模型架构

图片

AnomalyGPT模型架构包括图像编码器、线性层、局部线性模型、解码器、记忆库和提示学习器。在无监督学习中,模型使用中间层的补丁级特征和文本特征生成像素级异常定位结果。在少样本学习中,正常样本的补丁级特征存储在记忆库中,查询补丁与记忆库中最相似的补丁进行比较,从而得到异常定位结果。LLM利用图像输入、提示嵌入和用户提供的文本输入来检测异常并确定其位置,为用户生成响应。

5.3 解码器和提示学习器

**解码器。**为了实现像素级别的异常检测,我们采用了一种轻量级的基于特征匹配的图像解码器,支持无监督IAD和少样本IAD。该解码器的设计主要受到PatchCore、WinCLIP和APRIL-GAN的启发。

本文将图像编码器分为四个阶段,提取每个阶段的中间补丁级特征,并使用线性层将其投影到文本特征上,以对齐正常和异常语义。通过这种方法,可以得到本地化结果。

图片

在few-shot IAD中,我们使用相同的图像编码器从正常样本中提取中间的补丁级特征,并将其存储在内存库中。这些特征用于不同阶段的处理。通过计算每个补丁与记忆库中最相似的补丁之间的距离,可以得到本地化结果M。

图片

**提示学习器。**为了利用图像的细粒度语义并保持LLM和解码器输出之间的语义一致性,我们引入了一个提示学习器,将定位结果转换为提示嵌入。此外,可学习的基本提示嵌入被纳入提示学习器中,为IAD任务提供额外信息。最后,这些嵌入以及原始图像信息被馈入LLM。

这个模型包括可学习的基础提示嵌入和卷积神经网络。网络将定位结果转换为提示嵌入,与图像嵌入结合成为LLM。

图像-文本对齐数据

**异常模拟。**主要采用NSA提出的方法,该方法结合了Cut-paste和Poisson image editing技术,可以有效地生成模拟异常样本。Cut-paste技术是一种常见的IAD领域的技术,但会导致明显的不连续性。Poisson editing方法可以无缝地将一个对象从一个图像克隆到另一个图像。

图片

**问答内容。**为了进行LVLM的快速调整,我们根据模拟的异常图像生成相应的文本查询。每个查询由两个部分组成。第一部分是关于输入图像的描述,提供有关图像中存在的对象及其预期属性的信息,例如“这是一张皮革的照片,应该是棕色的,没有任何损坏、瑕疵、缺陷、划痕、洞或破损部分”。第二部分查询对象中是否存在异常,即“图像中是否有异常?”LVLM首先回答是否存在异常。如果检测到异常,模型将继续指定异常区域的数量和位置,例如“是的,图像中有一个异常,在图像的左下方”或“不,图像中没有异常”。我们将图像分成一个3×3的网格,以便LVLM能够口头指示异常的位置。图像的描述内容为LVLM提供了关于输入图像的基础知识,有助于模型更好地理解图像内容。然而,在实际应用中,用户可以选择省略这个描述性输入,模型仍然可以正常工作。任务要求模型仅通过提供的图像输入执行IAD任务,详细说明了每个类别。附录C提供了详细描述。

图片

图片

损失函数

训练解码器和提示学习器主要使用了三种损失函数:交叉熵损失、焦点损失和Dice损失。后两种主要用于提高解码器的像素级定位精度。

**Cross-entropy Loss。**交叉熵损失常用于训练语言模型,用于衡量模型生成的文本序列与目标文本序列之间的差异。公式如下:

图片

根据每个标记的真实标签和预测概率,计算标记级别的交叉熵损失。

Focal Loss是用于解决类别不平衡问题的一种损失函数,常用于目标检测和语义分割。在IAD任务中,使用Focal Loss可以缓解类别不平衡问题。其计算方式可以通过公式(4)得出。

图片

n表示像素总数,pi表示正类的预测概率,γ是一个可调参数,用于调整难分类样本的权重。在实现中,我们将γ设置为2。

Dice Loss是语义分割任务中常用的损失函数,基于Dice系数计算。

图片

n为像素总数,yi为解码器输出,yˆi为真实值。

最终损失函数如下:

图片

三个损失函数的系数默认为1,用于平衡损失函数。

6. 实验

**数据集。**本文主要在MVTec-AD和VisA数据集上进行实验,这两个数据集都是IAD领域常用的数据集。MVTec-AD数据集包含15个类别的3629张训练图像和1725张测试图像,VisA数据集包含12个类别的9621张正常图像和1200张异常图像。我们只使用这些数据集中的正常数据进行训练。

**评估指标。**本文采用现有的IAD方法,使用接收器操作特征曲线下面积(AUC)作为评估指标,分别评估异常检测和异常定位的性能。此外,我们的方法还可以在不需要手动设置阈值的情况下确定异常的存在,因此我们还使用图像级别的准确性来评估我们的方法的性能。

**实验细节。**使用ImageBind-Huge作为图像编码器,Vicuna-7B作为推理LLM,并通过线性层连接。模型初始化使用PandaGPT的预训练参数。图像分辨率设置为224×224。使用ImageBind-Huge的图像编码器的第8、16、24和32层的输出作为图像解码器的输入。训练在两个RTX-3090 GPU上进行,共进行50个epoch,学习率为1e-3,批量大小为16。应用线性预热和一周期余弦学习率衰减策略。我们使用PandaGPT的预训练数据和异常图像-文本数据进行交替训练。只有解码器和提示学习器进行参数更新,其余参数都保持冻结状态。

定量结果

**少样本工业异常检测。**我们的方法在工业异常检测中表现优于之前的方法,包括SPADE、PaDiM、PatchCore和WinCLIP。我们的方法在图像级AUC方面表现出色,并且在像素级AUC和准确率方面也具有竞争力。

图片

**无监督工业异常检测。**MAD-GAN使用生成对抗网络(GAN)来学习正常样本的分布,并使用重构误差来检测异常。与其他方法相比,MAD-GAN在MVTec-AD数据集上表现出更好的性能。

图片

定性样例

图片

图片

本模型能够进行无监督异常检测和1-shot上下文学习,并能指示异常的存在、定位异常位置并提供像素级定位结果。用户可以进行与异常相关的多轮对话。1-shot in-context learning是一种新的学习方式,相比无监督学习,其模型的定位性能稍微差一些。

消融分析

图片

通过对MVTec-AD和VisA数据集进行广泛的消融实验,证明了所提出的模块的有效性。主要关注四个方面:解码器、提示学习器、LLM用于推理和使用LoRA微调LLM。实验结果表明,解码器表现出令人印象深刻的像素级异常定位性能,LLM在推理准确性和功能方面优于手动设置阈值,提示调整在准确性和可转移性方面优于LoRA。

8.环境配置

当然!这里是一些润色后的文本:

2.1 下载环境

首先,将项目克隆到本地:

git clone https://github.com/CASIA-IVA-Lab/AnomalyGPT.git

接着,安装所需的软件包:

pip install -r requirements.txt

2.2 准备ImageBind检查点

您可以通过以下链接下载预先训练的图像绑定(ImageBind)模型。下载完成后,请将文件(imagebind_huge.pth)放置在路径[./pretrained_ckpt/imagebind_ckpt/]下。

ImageBind下载链接

2.3 准备Vicuna检查点

要准备预先训练的Vicuna模型,请按照以下说明操作:

下载Vicuna

2.4 准备AnomalyGPT的Delta权重文件

我们使用PandaGPT的预训练参数来初始化我们的模型。您可以在下表中获得不同策略下的PandaGPT的权重。在实验和在线演示中,由于计算资源的限制,我们建议使用vicuna-7b和pandagpt_7b_max_len_1024。如果切换到Vicuna-13b,预计会获得更好的结果。

将已下载的7B delta权重文件放置在以下路径:

./pretrained_ckpt/pandagpt_ckpt/7b/

如果是13B delta权重文件,将其放置在以下路径:

./pretrained_ckpt/pandagpt_ckpt/13b/

接下来,下载AnomalyGPT的模型权重文件。下载完成后,将其放置在项目路径下的 ./code/ckpt/ 中。在官方项目的在线演示中,默认使用了监督设置作为模型的默认配置,以提升用户体验。您也可以在本地尝试其他权重。

2.5 运行演示

完成上述步骤后,您可以运行以下命令,在本地启动演示Demo:

cd ./code/
python web_demo.py

在这里插入图片描述

在用了Hugging Face上的AnomalyGPT Demo,虽然需要2-3分钟的运行时间,但模型的异常检测能力值得肯定!
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.总结

AnomalyGPT是一种新型的对话式图像异常检测模型,利用了LVLM的强大能力。它可以确定图像是否包含异常,并指出其位置,无需手动指定阈值。此外,AnomalyGPT还能够进行多轮对话,展现出在少量数据下的上下文学习能力。该模型在两个常见数据集上的有效性得到验证,为工业异常检测领域提供了新的思路和可能性。

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

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

相关文章

sgg_ssm学习--前端搭建遇到的问题

目录 问题1:由于我是解压缩软件nodejs,没有添加系统路径 解决:添加nodejs的路径 到系统 path中 问题2:vscode 终端输入npm命令 报错 解决(如图所示在vscode打开前端工程,终端修改如下配置): 问题1&…

如何在iPhone上恢复出厂设置后恢复数据

你不想让这种情况发生,但它确实发生了。您必须将iPhone恢复出厂设置。当您的 iPhone 上出现软件问题且无法修复时,可能会发生这种情况。相反,在更新期间,或者您的iPhone遇到问题时,iPhone上的数据不再存在。 不过不用…

Spark SQL编程初级实践

参考链接 Spark编程: Spark SQL基本操作 2020.11.01_df.agg("age"->"avg")-CSDN博客 RDD编程初级实践-CSDN博客 Spark和Hadoop的安装-CSDN博客 1. Spark SQL基本操作 { "id":1 , "name":" Ella" , "age":…

使用多网络和Kubernetes转变您的通讯应用程序

传统的 Kubernetes 网络在基本的 Pod 到 Pod 连接方面表现出色,但在满足通讯工作负载的安全性、性能和合规性要求时可能存在不足。这限制了通讯提供商充分利用 Kubernetes 的可扩展性和敏捷性优势的能力。 Google Cloud 的多网络方法使通讯提供商能够克服这些限制&a…

笔记-PPT绘图导出高清无失真图片

问题描述:PPT绘图已经用了高清图(jpg、tif格式),但论文图片还是不清晰,打印出来还是有点糊 以下是PPT导出高清不失真图片(emf格式)的具体描述。 目录 一、绘图工具二、操作步骤 一、绘图工具 …

数据挖掘之基于Lightgbm等多模型消融实验的信用欺诈检测实现

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在当前的金融环境中,信用欺诈行为日益增多,给金融机构和消费者带来了巨大的损…

【已解决】pandas读excel中长数字变成科学计数法的问题

pandas 读excel中的长数字时,即使excel中已经设置为文本,读进df后也会自动变成科学计数法。 在日常的数据分析和处理工作中,Excel和pandas是数据分析师们不可或缺的得力助手。然而,在使用pandas读取Excel文件时,我们有…

Spring Boot的热部署工具“AND”Swagger测试工具

Spring Boot的热部署&Swagger测试页面的使用 热部署指的是在项目无需重启的情况下,只需要刷新页面,即可获得已经修改的样式或功能。要注意该工具一般用于开发环境,在生产环境中最好不要添加这个工具。 对于无需重启便可刷新这么方便的工…

【linux-1-Ubuntu常用命令-vim编辑器-Vscode链接ubuntu远程开发】

目录 1. 安装虚拟机Vmare和在虚拟机上安装Ubuntu系统:2. 常用的Ubuntu常识和常用命令2.1 文件系统结构2.2 常用命令2.3 vim编辑器 3. Ubuntu能联网但是ping不通电脑:4. Windows上安装VScode链接ubuntu系统,进行远程开发: 1. 安装虚…

理解sourcemap:调试和部署的利器

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

根据顶层的id递归查询出全部子节点

效果图 根据输入的id为2查询出所有的红色框起来的节点 mapper接口 TSystemOrg getOrgByorgId(String orgId); List<TSystemOrg> getOrgListByParentId(String parentId);mapper.xml <!--根据id查询org--> <select id"getOrgByorgId" resultType&…

【JVM】简述类加载器及双亲委派机制

双亲委派模型&#xff0c;是加载class文件的一种机制。在介绍双亲委派模型之前&#xff0c;我需要先介绍几种类加载器&#xff08;Class Loader&#xff09;。 1&#xff0c;类加载器 Bootstrap&#xff0c;加载lib/rt.jar&#xff0c;charset.jar等中的核心类&#xff0c;由…

【算法】【贪心算法】【leetcode】870. 优势洗牌

题目地址&#xff1a;https://leetcode.cn/problems/advantage-shuffle/description/ 题目描述&#xff1a; 给定两个长度相等的数组 nums1 和 nums2&#xff0c;nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。 返回 nums1 的任意排列&…

界面组件DevExpress中文教程 - 如何在Node.js应用中创建报表?

DevExpress Reporting是.NET Framework下功能完善的报表平台&#xff0c;它附带了易于使用的Visual Studio报表设计器和丰富的报表控件集&#xff0c;包括数据透视表、图表&#xff0c;因此您可以构建无与伦比、信息清晰的报表。 获取DevExpress Reporting最新正式版下载(Q技术…

【SQL Server】入门教程-基础篇(三)

目录 前言 SQL 常用函数学习 AVG – 平均值 COUNT – 汇总函数 ​编辑MAX – 最大值 ​编辑MIN – 最小值 ​编辑SUM – 求和 UCASE/UPPER – 大写 LCASE/LOWER – 小写 ROUND – 数值取舍 NOW/SYSDATE – 当前时间 前言 这一篇博客&#xff0c;是Sql Server函数学…

本地构建编译Apache-Seatunnel2.3.5适配Web1.0.0运行实现Mysql-CDC示例

本地构建编译Apache-Seatunnel2.3.5适配Web1.0.0运行实现Mysql-CDC示例 文章目录 1.前言2.编译2.1版本说明2.2 seatunnel2.3.4-release分支配置2.3maven调优配置 3.web1.0.0适配3.1配置文件修改和新增文件3.2手动拷贝jar修改依赖3.3修改web不兼容的代码3.4 web编译打包 4.运行m…

什么是 Web3 的生成式 AI?

从 Web 1.0 的静态、单向通信到 Web 2.0 的动态、用户驱动的格局&#xff0c;互联网在二十年的时间里经历了一场显着的转变。现在&#xff0c;当我们站在 Web 3.0 时代的边缘时&#xff0c;我们正在见证更具颠覆性的事物的曙光&#xff1a;生成式人工智能 (AI) 融入我们的数字世…

DB-GPT部署验证

一、DB-GPT简介 DB-GPT是一个开源的数据库领域大模型框架。目的是构建大模型领域的基础设施&#xff0c;通过开发多模型管理、Text2SQL效果优化、RAG框架以及优化、Multi-Agents框架协作等多种技术能力&#xff0c;让围绕数据库构建大模型应用更简单&#xff0c;更方便。 GITHU…

找不到msvcr120.dll怎么办,msvcr120.dll丢失的5种修复方法分享

计算机系统在运行某应用程序时无法正常启动&#xff0c;具体表现为缺少了一个至关重要的动态链接库文件——msvcr120.dll。这个DLL文件是微软Visual C Redistributable Package的一部分&#xff0c;对于确保许多基于Windows平台的软件能够顺利运作起着不可或缺的作用。msvcr120…

C、Minimizing the Sum(线性dp)

思路&#xff1a; 用dp[i][j] 来表示前i个数操作了j次的最小和&#xff0c;然后对于每个a[i]&#xff0c;我们分别枚举i前面操作了x次以及后面操作了j次&#xff0c;对于每次操作&#xff0c;都是将一段区间全换位区间最小值. 代码&#xff1a; void solve(){int n, k;cin &…