【开放词汇分割】Side Adapter Network for Open-Vocabulary Semantic Segmentation

news2024/11/17 11:40:17

论文链接:Side Adapter Network for Open-Vocabulary Semantic Segmentation

代码链接:https://github.com/MendelXu/SAN

作者:Mengde Xu,Zheng Zhang,Fangyun Wei,Han Hu,Xiang Bai

发表单位:华中科技大学、微软亚洲研究院

会议/期刊:CVPR2023 Highlight

一、研究背景

ImageNet 上的分割结果。对于每个图像,将其类别与 coco 类别结合起来作为推理过程中的词汇表,并且仅可视化注释类别的掩码

现代语义分割方法依赖于大量标注数据,但数据集通常只包含数十到数百个类别,数据收集和标注成本高昂。近年来,大规模视觉-语言模型(如CLIP)在图像分类任务中取得了巨大成功,但在像素级别的语义分割中应用这些模型面临挑战,因为这些模型的训练侧重于图像级别的对比学习,它学习到的表示缺乏语义分割所需的像素级识别能力。弥补表示粒度差距的一种解决方案是在分割数据集上微调模型。然而,分割数据集的数据量远小于视觉语言预训练数据集,因此微调模型在开放词汇识别上的能力常常受到损害。

将语义分割建模为区域识别问题绕过了上述困难。早期尝试采用两阶段训练框架。

在第一阶段,训练一个独立模型来生成一组蒙版图像作物作为蒙版建议。

在第二阶段,使用视觉语言预训练模型(例如 CLIP)来识别蒙版图像裁剪的类别。然而,由于掩模预测模型完全独立于视觉语言预训练模型,它错过了利用视觉语言预训练模型强大特征的机会,并且预测的掩模图像裁剪可能不适合识别,这会导致模型笨重、缓慢且性能低下。

SAN 概述

为了实现这一目标,提出了一个新的框架(上图所示),称为侧适配器网络 (side adapter network, SAN)。由于端到端训练,它的掩模预测和识别是 CLIP 感知的,并且由于利用了 CLIP 的特性,它可以是轻量级的。

红色虚线表示训练期间的梯度流。在框架中,冻结的 CLIP 模型仍然充当分类器,并且侧适配器网络生成掩码提案和注意偏差,以指导 CLIP 模型的更深层来预测提案明智的分类逻辑。在推理过程中,将 mask proposal 和proposal logits 结合起来,通过 Matmul(矩阵乘法函数)得到最终的预测。

二、整体框架

本文提出了一种新的开放词汇语义分割框架——Side Adapter Network (SAN)。该方法将语义分割任务建模为区域识别问题。SAN附加在冻结的CLIP模型上,具有两个分支:一个用于预测掩码提案,另一个用于预测应用在CLIP模型中的注意力偏差,以识别掩码的类别。整个网络可以端到端训练,使附加的侧网络能够适应冻结的CLIP模型,从而使预测的掩码提案对CLIP感知。

作者证明这种解耦设计提高了分割性能,因为用于 CLIP 识别掩模的区域可能与掩模区域本身不同。为了最大限度地降低 CLIP 的成本,进一步提出了单前向设计:将浅层 CLIP 块的特征融合到 SAN,并将其他更深的块与注意力偏差相结合以进行掩模识别。

因为用于 CLIP 识别掩模的区域可能与掩模区域本身不同的理解:CLIP模型主要是通过对比学习在图像级别进行训练的,其学习到的特征更偏向于全局或大范围的图像特征,而不是具体的像素级别特征。当CLIP模型应用于掩模识别时,它的注意力机制可能会关注到一些与掩模区域有重叠但并不完全一致的区域。这种不完全一致性是因为CLIP的注意力机制可能会将注意力分散到整个图像中一些相关的部分,而不仅仅是掩模的边界或内部区域。

假设有一张图像,其中有一只狗在草地上。CLIP模型可能会关注到整只狗以及周围的草地作为特征进行分类,而语义分割任务仅需要标注出狗的具体轮廓区域。这时,CLIP的识别区域(整只狗和部分草地)与实际需要的掩模区域(狗的轮廓)并不完全一致。

出于公平性和可重复性的目的,该研究基于官方发布的 CLIP 模型。重点关注已发布的 ViT CLIP 模型,因为视觉 Transformer 事实上已经取代 ConvNet 成为计算机视觉社区的主导骨干网,并且为了概念的一致性和简单性,侧适配器网络也由视觉 Transformer 实现。

准确的语义分割需要高分辨率图像,但已发布的ViT CLIP模型是针对低分辨率图像(例如224×224)设计的,直接应用于高分辨率图像,性能较差。为了缓解输入分辨率的冲突,在 CLIP 模型中使用低分辨率图像,在侧适配器网络中使用高分辨率图像。作者证明这种不对称输入分辨率非常有效。此外,还探索仅微调 ViT 模型的位置嵌入并注意改进。

三、核心方法 Side Adapter Network

3.1 架构介绍

Side Adapter Network (SAN) 是一个端到端的框架,旨在充分利用CLIP模型在开放词汇语义分割中的能力。SAN由一个轻量级的视觉Transformer实现,可以利用CLIP的特征,并且有两个输出:掩码提案和用于掩码识别的注意力偏差。这些注意力偏差应用于CLIP的自注意力机制,以识别掩码提案的类别。

在实践中,将浅层 CLIP 层的特征融合到 SAN 中,并将注意力偏差应用于更深的 CLIP 层以进行识别。通过这种单前向设计,可以最大限度地降低 CLIP 模型的成本。

SAN的详细架构

  • 输入图像:输入图像被分割成16×16的图像块,每个块通过线性嵌入层投射为视觉tokens。

  • 视觉tokens与查询tokens:这些视觉tokens与N个可学习的查询tokens连接在一起,并输入到随后的Transformer层中。

  • 输出:SAN有两个输出:掩码提案和用于掩码识别的注意力偏差。查询tokens和视觉tokens分别通过两个独立的3层MLP(多层感知器)投射为256维度的向量,用于生成掩码提案和注意力偏差。

投影查询标记可以表示为 \mathbf{Q}_{\mathrm{mask}}\in\mathbb{R}^{N\times256},其中N是查询标记的数量,默认等于100。投影视觉标记可以表示为\mathbf{V}_{\mathrm{mask}}\in\mathbb{R}^{\frac{H}{16}}\times\frac{W}{16}\times256 ,其中H和W是输入的高度和宽度图像。最后的预测mask由Q mask和V mask的内积生成:

\mathbf{M}=\mathbf{V}_\text{mask}\mathbf{Q}_\text{mask}^\mathrm{T}

其中,\mathbf{M}\in\mathbb{R}^{\frac{H}{16}}\times\frac{W}{16}\times N ,产生注意力偏差类似于掩模预测。查询标记和视觉标记也由 3 层 MLP 投影,表示为 \mathbf{Q}_{\mathrm{attn}}\in\mathbb{R}^{N\times256} , {V}_{\mathrm{attn}}\in\mathbb{R}^{\frac{H}{16}\times\frac{W}{16}\times K\times256},其中 K 是 ViT CLIP 的注意力头数量。通过内部生成Q attn和V attn,得到了注意力偏差:

\mathbf{B=V_{attn}Q_{attn}^{T}}

其中, \mathbf{B}\in\mathbb{R}^{\frac{H}{16}\times\frac{W}{16}\times K\times N},此外,如果需要,注意力偏差将进一步调整为 \mathbf{B}\in\mathbb{R}^{h\times w\times K\times N},其中h和w是 CLIP 中注意力图的高度和宽度。在实践中,Q mask和Q attn可以共享,并且注意力偏差将应用于CLIP的多个自注意力层中,即偏差用于不同的自注意力层中。

掩模预测和识别的解耦设计背后的动机很直观:用于在 CLIP 中识别掩模的感兴趣区域可能与掩模区域本身不同。

3.2 Feature fusion on visual tokens 视觉标记上的特征融合

在ViT模型中,视觉tokens和[CLS] token是主要的特征表示。为了充分利用CLIP模型的强大特征,SAN将CLIP模型的视觉tokens与SAN的视觉tokens进行特征融合。具体步骤如下:

  • 特征重排:由于CLIP和SAN的视觉tokens数量和特征维度可能不同,首先将CLIP的视觉tokens重新排列为特征图,经过1×1卷积和重尺寸操作来调整通道维度和特征图大小。

  • 特征融合:将调整后的CLIP特征图与SAN的对应特征图进行逐元素相加,从而实现特征融合。特征融合在多个层次上进行,例如在12层的ViT-B/16 CLIP模型和8层的SAN模型中,将CLIP的{stem,3,6,9}层的特征与SAN的{stem,1,2,3}层的特征融合。

3.3 Mask recognition with attention bias 带有注意偏差的掩模识别

原始的CLIP模型只能通过[CLS] token进行图像级的识别,为了在CLIP模型中实现精确的掩码识别,SAN引入了注意力偏差,这些偏差用于指导CLIP模型的[CLS] token在感兴趣区域进行识别。

在 CLIP 中使用注意偏差来预测掩模的图示

左图创建一组 [SLS] 令牌(即影子 [CLS] 令牌副本)并将其应用于 CLIP。这些[SLS]令牌在注意力偏差的影响下更新。 右图该图显示了不同类型的令牌如何相互作用。方块的颜色表示query token和key token之间的关系:黑色表示query没有被key更新,白色表示query可以正常被key更新,灰色表示在attention的作用下query可以被key更新偏见。

过程总结:

  • 生成[SLS] tokens:创建一组[CLS] token的影子副本([SLS] tokens),这些副本在更新时仅受视觉tokens的影响,而不会反过来影响视觉tokens或[CLS] tokens。

  • 添加注意力偏差:在计算注意力时,将预测的注意力偏差Bk添加到注意力矩阵中,从而引导[SLS] tokens的特征逐渐适应掩码预测。

  • 类别预测:通过比较[SLS] token与CLIP文本嵌入的类别名称之间的距离或相似度,轻松获得掩码的类别预测。

在计算注意力时,预测的注意力偏差 Bk 被添加到注意力矩阵中,从而引导[SLS] tokens的特征逐渐适应掩码预测。公式如下:

X_{[SLS]}^{l+1}=\text{softmax}(Q_{[SLS]}^lK_{\text{visual}}^l+B_k)V_{[SLS]}^l

其中,l 表示层数,k表示第 k个注意力头,Q[SLS]=Wq X[SLS]和 V[SLS]=Wv X[SLS] 是[SLS] tokens的查询和value嵌入,Kvisua l=Wk Xvisual 是视觉tokens的键嵌入,Wq,Wk,Wv 是查询、键、value嵌入层的权重。

在原始设计中,计算复杂度为:

\mathcal{O}((T_{\mathrm{visual}}+T_{[\mathrm{CLS}]}+T_{[\mathrm{SLS}]}))^2

Tvisual​ 是视觉tokens的数量,T[CLS] 是[CLS] token的数量(通常为1),T[SLS]​ 是[SLS] tokens的数量。

这个计算复杂度考虑了所有类型的tokens,并假设它们都通过屏蔽自注意力层(masked self-attention layer)进行更新。具体来说,每个token与所有其他token进行交互,导致了二次复杂度。

为了降低计算复杂度,作者提出使用交叉注意力(cross-attention)来更新[SLS] tokens。交叉注意力与自注意力共享嵌入权重,但只涉及特定类型的token之间的交互。这使得计算复杂度降低为:

\mathcal{O}((T_{\mathrm{visual}}+T_{[\mathrm{CLS}]})^2+T_{[\mathrm{SLS}]}(T_{\mathrm{visual}}+T_{[\mathrm{CLS}]}))

随着注意力偏差的应用,[SLS] tokens 的特征逐渐演化以适应掩码预测。掩码的类别预测通过比较[SLS] tokens和CLIP文本嵌入的类别名称之间的距离或相似度来获得:

P\in\mathbb{R}^{C\times N}

其中 C 是类别数量,N 是查询tokens的数量。

3.4 Segmentation map generation

最后,结合掩码提案 M\in\mathbb{R}^{\frac H{16}\times\frac W{16}\times N}和掩码的类别预测 P\in\mathbb{R}^{C\times N},通过矩阵乘法生成最终的分割图 S:

\large S=M\times P^T

其中, S\in\mathbb{R}^{\frac H{16}\times\frac W{16}\times C}

为了训练模型,mask生成通过dice损失L mask_dice和二元交叉熵损失L mask_bce进行监督。mask模识别通过交叉熵损L cls进行监督。总损失为:

L_{\mathrm{seg}}=\lambda_{1}L_{\mathrm{mask_dice}}+\lambda_{2}L_{\mathrm{mask_bce}}+\lambda_{3}L_{\mathrm{cls}}

损失权重𝜆1、𝜆2、𝜆3分别为 5.0、5.0 和 2.0。 通过端到端训练,侧适配器网络可以最大限度地适应冻结的CLIP模型,因此掩模建议和注意偏差是CLIP感知的。

四、实验结果

在 6 个数据集上进行了实验:COCO Stuff、ADE20K-150、ADE20K-847、Pascal Context-59、Pascal Context-459 和 Pascal VOC。按照常见的做法,所有模型都在 COCO Stuff 的训练集上进行训练,并在其他数据集上进行评估。

  • COCO Stuff:它包含 164K 图像和 171 个注释类,分为训练集、验证集和测试集,分别包含 118K、5K 和 41K 图像。在实验中,默认使用完整的118K训练集作为训练数据。

  • ADE20K-150(ADE-150):它是一个大规模场景理解数据集,包含 20K 训练图像和 2K 验证图像,总共 150 个注释类。

  • ADE20K-847(ADE-847):它具有与 ADE20K-150 相同的图像,但有更多注释的类(847 个类),这对于开放词汇语义分割来说是一个具有挑战性的数据集。

  • Pascal VOC(VOC) :Pascal VOC 包含 20 类语义分割注释,其中训练集和验证集分别包含 1464 个和 1449 个图像。

  • Pascal Context-59:它是一个用于语义理解的数据集,包含 5K 训练图像、5K 验证图像以及总共 59 个带注释的类。

  • Pascal Context-459:它具有与 Pascal Context-59 相同的图像,但有更多注释的类(459 个类),这也广泛用于开放词汇语义分割。

Dataset Analysis:为了澄清并有利于对开放词汇能力的理解,作者通过计算其他数据集和训练数据集 COCO Stuff 之间的类别相似度来进行简单的分析,结果显示在表1。

  • 提取文本嵌入:使用预训练的CLIP模型,将每个数据集的类别名称转换为文本嵌入向量。

  • 计算余弦相似度:对于每一对数据集,计算其类别嵌入向量之间的余弦相似度。具体来说,对于两个类别集合A和B中的每个类别对(a, b),计算它们的余弦相似度,然后利用这些相似度计算Hausdorff(豪斯多夫,对于点集 A 中的每个点 a,找到点集 B 中距离 a 最近的点,然后在这些最近距离中取最大值)距离,作为这两个数据集之间的相似度度量。

  • 生成相似度表:通过上述步骤,得到不同数据集之间的相似度,结果显示在表1中。

在五个验证数据集中,Pascal VOC和Pascal Context-59的相似度高达0.9,这意味着它们更擅长衡量视觉类别方面的域内开放词汇能力。此外,Pascal Context-459、ADE20K-150和ADE20K-847的相似度得分较低,这使得它们能够更好地评估跨领域开放词汇能力。

表 1:验证数据集和训练集(即 COCO Stuff)之间的标签集相似度。基于CLIP文本编码器通过Hausdorff距离和余弦相似度测量。

与最先进方法的性能比较。 † SimSeg [33] 在其论文中使用 COCO Stuff 的子集进行训练。为了公平比较,使用他们官方发布的代码在完整的 COCO Stuff 上重现了他们的方法。 * RN101:ResNet-101 [14]; EN-B7:EfficientNet-B7 [29]; SAN 整体。ensemble是使用集成技巧的结果,而不是默认设置。

与其他方法的训练和测试效率比较。

Param.代表方法中可训练参数的总数(以百万为单位)。输入图像的分辨率为640×640。CLIP型号为ViT-B/16。 * 目前还没有可用的官方代码,按照他们论文中的描述重新实现他们的方法。 OvSeg与 SimSeg具有相似的结构,但它对整个 CLIP 模型进行了微调,从而产生了更多的可训练参数。

不同的特征融合策略。 ViT-B/16 的最后 3 层用于所有实验中的掩模预测。

特征融合层数量和掩模预测层数量之间的权衡

SAN轻量级的关键是利用CLIP模型的强大功能。通过实验说明了表中特征融合的重要性。 如果不融合 CLIP 功能,mIoU 将从 27.8 下降到 21.1。

此外,还注意到,融合较深层(例如第9层)的特征比融合较浅层(例如stem层)的特征要好,并且仅融合第9层的特征可以达到27.1 mIoU,比融合高+6.0 mIoU没有特征融合的基线。这一观察结果与更深层次的特征往往更具语义性的直觉是一致的。此外,与单层融合相比,融合多层特征可以进一步提高性能 +0.8 mIoU。

为了最小化 CLIP 的推理成本,采用单前向设计,即较浅的层用于特征融合,其他较深层用于mask识别,因此需要进行权衡,如上表所示。 当前9层用于特征融合,后3层用于掩模识别时,性能最佳。

掩模预测头的设计选择。 (a) 单头和来自 CLIP 的阻塞梯度的两阶段训练; (b) 单头端到端训练; (c) 解耦头端到端训练。红色虚线表示训练期间的梯度流。

与其他两阶段框架不同,本文的方法是端到端的训练框架。

作者研究了其他两个框架之间的差异。由于注意力偏差分支必须通过 CLIP 进行训练,为了进行比较,在 CLIP 的自注意力层中使用 mask proposal 代替注意力偏差。如果来自 CLIP 的梯度被阻止,则该方法退化为两阶段框架,即掩模预测与 CLIP 识别隔离。否则,该方法是单头端到端训练框架,并且掩模预测是 CLIP 感知的。

两阶段与端到端。这一显着改进证明了 CLIP 感知掩模预测的重要性。

单头和解耦头的比较。只需很少的额外参数和触发器,解耦头就可以显着提高性能。所有模型都经过端到端训练。

单头设计意味着模型只有一个注意力头来处理掩码预测和识别。解耦头设计意味着模型在处理掩码预测和识别时,使用了多个注意力头,这些头之间的计算是解耦的。

ViT-B/16 CLIP 模型输入分辨率的影响。改变 CLIP 输入分辨率,同时始终在侧面适配器网络中使用 640*640 图像。

微调位置嵌入可以提高性能

方法的定性结果。 (a) 和 (b) 是具有不同词汇表(分别为 ADE-150 和 ADE-847)的相同输入图像的结果

SAN容量的影响。代表模型中可训练参数的总数(以百万为单位)。

注意偏差设计的消融和[SLS]令牌的初始化方法

Prompt工程的效果。单个模板“{} 的照片”。用于不使用Prompt工程的模型。

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

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

相关文章

CesiumJS【Basic】- #039 绘制渐变线(Entity方式)- 需要自定义着色器

文章目录 绘制渐变线(Entity方式)- 需要自定义着色器1 目标2 代码2.1 main.ts绘制渐变线(Entity方式)- 需要自定义着色器 1 目标 使用Entity方式绘制渐变线 2 代码 2.1 main.ts import * as Cesium from cesium;const viewer = new Cesium.Viewer

[工业网络][2] 安全背景知识

安全背景知识 物理、网络和人员安全 在考虑企业和工业的安全性时,安全从业人员传统上将自己划分为三个专业领域。我们借助于安全中经常使用的两个术语来描述这三个领域 业内人士。属于您的设施的人员,包括员工和受邀承包商,访客或交付和服…

docker部署wg-easy和firefly

Background WireGuard是一种新型的VPN协议,它通过在内核层运行,提供高效、安全、简单和现代的VPN解决方案。wg-easy是一个专为简化 WireGuard VPN配置和管理而设计的工具,提供了界面化的管理,进一步降低WireGuard 的使用门槛,让用户无需深入了…

【总线】AXI4第四课时:握手机制详解

大家好,欢迎来到今天的总线学习时间!如果你对电子设计、特别是FPGA和SoC设计感兴趣,那你绝对不能错过我们今天的主角——AXI4总线。作为ARM公司AMBA总线家族中的佼佼者,AXI4以其高性能和高度可扩展性,成为了现代电子系统中不可或缺的通信桥梁…

【大模型系列】Language-Vision Transformer(LaVIT, ICLR2024)

Title:Unified Language-Vision Pretraining in LLM with Dynamic Discrete Visual TokenizationPaper:https://arxiv.org/abs/2309.04669Github:https://github.com/jy0205/LaVITAuthor:Yang Jin, 北大,快…

谈谈创意设计中的AI、AGI、AIGC

在当今的数字化时代,创意设计领域正经历着前所未有的变革。随着人工智能(AI)、通用人工智能(AGI)以及人工智能生成内容(AIGC)的迅猛发展,设计师们的工作方式和创作手段都发生了深刻的…

【CSAPP】-datalab实验

实验原理与内容 本实验每位学生拿到一个datalab-handout.tar文件。学生可以通过U盘、网盘、虚拟机共享文件等方式将其导入到Unbuntu实验环境中,选择合适位置存放。然后在Ubuntu环境下解压。解压后,根据文件中的叙述和要求更改bits.c文件。本次实验的主要…

奇瑞员工控诉强制加班,加班费最多10元;高德数据被不正当抓取,一审判赔1250万元;知乎入局AI搜索;苹果手机出货量激增

一、商业圈 1.奇瑞员工控诉非法加班:加班费最多10元 根据脉脉平台热搜,近期,有多位网友曝奇瑞上海属地员工发起多项投诉,控诉奇瑞非法加班。据悉,奇瑞汽车正在积极准备上市中,若此事未得到妥善解决&#xf…

【React】上传文章封面基础实现

<Form.Item label"封面"><Form.Item name"type"><Radio.Group onChange{onTypeChange}><Radio value{1}>单图</Radio><Radio value{3}>三图</Radio><Radio value{0}>无图</Radio></Radio.Group&…

用好华为小助手,生活总能快人一步

嘿&#xff01;朋友们&#xff01;你们有没有想过&#xff0c;如果身边有一个小助手&#xff0c;他不仅聪明伶俐&#xff0c;还能在生活的方方面面给予你最贴心的关怀和帮助&#xff0c;让我们的日常生活变得更加方便和快捷&#xff0c;那该有多好&#xff01;没错&#xff0c;…

openEuler AArch64 架构 vCPU 热插拔技术内幕

OpenAtom openEuler&#xff08;简称"openEuler"&#xff09;社区引领技术浪潮&#xff0c;早在openEuler 20.09 创新版本就率先使能并对外开放了 AArch64 架构 vCPU 热插特性。时隔四年&#xff0c;openEuler 24.03 LTS 版本补充了 vCPU 热拔能力&#xff0c;vCPU 热…

MySQL学习(6):SQL语句之数据控制语言:DCL

DCL用来管理数据库用户&#xff0c;控制数据库的访问权限 1.管理用户 1.1查询用户 use mysql; select * from user; #用户信息都存放在系统数据库mysql的user表中 在user表中&#xff0c;一个用户是由用户名和主机名共同决定的&#xff0c;上图中的host一栏就是用户的主机名…

Stable Diffusion用AI绘画古诗文视频副业项目,轻松涨粉10W+,项目拆解分享给你【附详细玩法教程】

项目介绍 古诗文自古以来就有着广泛的受众&#xff0c;特别是在短视频平台上&#xff0c;它不仅有很高的流量潜力&#xff0c;还能给观众带来美的享受和教育意义。通过使用AI绘画工具&#xff0c;创作者能够将古诗文中的场景生动地呈现出来&#xff0c;制作出有艺术性、有教育…

【源码+文档+调试讲解】居家养老系统

摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了居家养老系统的开发全过程。通过分析高校学生综合素质评价管理方面的不足&#xff0c;创建了一个计算机管理居家养老系统的方案。文章介绍了居家养老系统的系统分…

操作系统真象还原:进一步完善内核

第12章-进一步完善内核 12.1 Linux系统调用浅析 系统调用就是让用户进程申请操作系统的帮助&#xff0c;让操作系统帮其完成某项工作&#xff0c;也就是相当于用户进程调用了操作系统的功能&#xff0c;因此“系统调用”准确地来说应该被称为“操作系统功能调用”。 Linux 系…

用Vue3和Plotly.js打造交互式3D图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 基于 Plotly.js 的动态图表交互&#xff1a;颜色和可见性控制 应用场景介绍 本代码旨在为数据可视化提供一个交互式图表&#xff0c;允许用户动态控制图表中线条的颜色和可见性。此功能对于探索大型数据集或突…

网络安全 文件上传漏洞-18 第十八关 Pass-18

点击进入第十八关&#xff0c;并选择显示代码&#xff1a; //index.php $is_upload false; $msg null; if (isset($_POST[submit])) {require_once("./myupload.php");$imgFileName time();$u new MyUpload($_FILES[upload_file][name], $_FILES[upload_file][tmp…

网络爬虫(一)

1. 深度优先爬虫&#xff1a;深度优先爬虫是一种以深度为优先的爬虫算法。它从一个起始点开始&#xff0c;先访问一个链接&#xff0c;然后再访问该链接下的链接&#xff0c;一直深入地访问直到无法再继续深入为止。然后回溯到上一个链接&#xff0c;再继续深入访问下一个未被访…

SAP 替代关系完全替代简介

最近用户在对长周期物料进行备料的时候又提出替代料的问题,主料库存不足的时候需要考虑替代料的在途库存,经常会忘了SAP标准的替代料逻辑,这次一次性把这个逻辑写清楚。 关于替代料的逻辑在前面的博文中测试多个替代料的使用场景 1、后继物料 2、组合替代 本文主要测试一下…

时序(流式)图谱数据仓库AbutionGraph功能介绍-Streaming Graph OLAM Database

AbutionGraph是一款端到端的流式数据实时分析的图谱数据库&#xff0c;实时&#xff08;流式写入实时、高QPS决策分析实时、流式预处理实时&#xff09;表现在&#xff1a; 构建实时查询QPS响应时长与历史数据量无关的图模型&#xff1b;接入流式数据并实时更新图计算指标&…