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

【论文解读】基于图的自监督学习联合嵌入预测架构

一、简要介绍

本文演示了一种学习高度语义的图像表示的方法,而不依赖于手工制作的数据增强。论文介绍了基于图像的联合嵌入预测架构(I-JEPA),这是一种用于从图像中进行自监督学习的非生成性方法。I-JEPA背后的idea很简单:从单个上下文块中,预测同一图像中不同目标块的表示。指导I-JEPA产生语义表示的核心设计选择是掩膜策略;具体来说,(a)预测图像中的几个目标块,(b)采样足够大规模的样本目标块(占图像的15%-20%),(c)使用足够丰富的(空间分布)上下文块是至关重要的。根据经验,当与视觉transformer结合时,论文发现I-JEPA具有高度的可缩放性。例如,论文在ImageNet上使用32个A100 GPU在38小时内训练一个ViT-Huge/16,以在需要不同抽象级别的广泛任务中实现强大的下游性能,从线性分类到对象计数和深度预测。

二、研究背景

在计算机视觉中,有两种常见的图像自监督学习方法:基于不变性的方法和生成方法。

基于不变性的预训练方法优化编码器,为同一图像的两个或多个视图产生类似的嵌入,图像视图通常使用一组手工制作的数据增强来构建,如随机缩放、裁剪和颜色抖动,以及其他。这些预训练方法可以产生高语义级别的表示,但它们也会引入强烈的偏差,可能对某些下游任务,甚至对不同数据分布的预训练任务有害。

认知学习理论认为,生物系统中表征学习背后的一个驱动机制是如何适应一个内部模型来预测感官输入反应。这个想法是自我监督生成方法的核心,它删除或损坏部分输入,并学习预测损坏的内容。特别是,掩膜去噪方法通过从输入的像素或令牌级别重建随机掩膜补丁来学习表示。与视图不变性方法相比,掩膜的预训练任务需要更少的先验知识,并且很容易推广到图像模态之外。然而,所得到的表示通常具有较低的语义级别,并且在现成的评估(如线性探测)和对语义分类任务监督有限的转移设置中缺乏基于不变性的预训练。因此,需要一个更复杂的适应机制(例如,端到端微调)来获得这些方法的充分优势。

在这项工作中,论文探索如何提高自我监督表示的语义水平,而不使用额外的先验知识编码的图像转换。为此,论文引入了一种图像联合嵌入预测架构(I-JEPA)。图3提供了该方法的一个说明。I-JEPA背后的构思是预测抽象表示空间中的缺失信息;例如,给定一个上下文块,预测同一图像中不同目标块的表示,其中目标表示是由学习到的目标编码器网络计算的。

与在像素/标记空间中进行预测的生成方法相比,I-JEPA利用抽象的预测目标,可能消除不必要的像素级细节,从而导致模型学习更多的语义特征。另一个指导I-JEPA产生语义表示的核心设计选择是所提出的多块掩膜策略。具体来说,论文演示了使用一个信息丰富的(空间分布的)上下文块来预测图像中的几个目标块(具有足够大的规模)的重要性。

通过广泛的实证评估,论文证明:

I-JEPA学习了强大的现成的语义表示,而不使用手工制作的视图增强(图1)。I-JEPA优于像素重建方法,如在ImageNet-1K线性探测上的MAE、半监督的1% ImageNet-1K和语义传输任务。

I-JEPA在语义任务上与视图不变预训练方法具有竞争力,并且在对象计数和深度预测等低级视觉任务上取得了更好的性能。通过使用一个更简单的模型和更少的刚性归纳偏差,I-JEPA是适用于更广泛的任务集。

I-JEPA也是可缩放的和高效的。在ImageNet上对ViT-H/14进行预训练大约需要2400 GPU小时,比使用iBOT 预训练的ViTB/16快50%,比使用MAE预训练的ViT-L/16的效率快140%。在表示空间中的预测显著减少了自我监督预训练所需的总计算量。

自我监督学习是一种表征学习的方法,其中一个系统学习捕获其输入之间的关系。这个目标可以很容易地使用基于能量的模型(EBMs)的框架来描述,其中自我监督的目标是为不兼容的输入分配高能,并为兼容的输入分配低能量。许多现有的生成式和非生成式的自我监督学习方法确实可以在这个框架中进行转换;见图2。

联合嵌入式架构(Joint-Embedding Architectures)。基于不变性的预训练可以使用联合嵌入架构(JEA)在EBM的框架中进行强制转换;参见图2a。联合嵌入架构学习为兼容的输入x、y输出类似的嵌入,为不兼容的输入输出不同的嵌入。在基于图像的预训练中,兼容的x,y对通常是通过对相同的输入图像随机应用手工制作的数据增强来构建的。

JEA的主要挑战是表示坍缩,其中能量景观是平坦的(即,编码器产生一个恒定的输出,而不管输入如何)。在过去的几年里,已经研究了几种方法来防止表示坍缩,如明确推动负例子嵌入的对比损失,最小化嵌入的信息冗余的非对比损失,以及基于聚类的方法来最大化平均嵌入的熵。也有一些启发式的方法,利用x编码器和y编码器之间的非对称架构设计来避免坍缩的。

生成式架构(Generative Architectures)。基于重构的自监督学习方法也可以在使用生成式架构的EBM框架中进行强制转换;见图2b。生成式架构学习从一个兼容的信号x直接重建信号y,使用一个附加的(可能是潜在的)变量z的解码器网络,以促进重建。在基于图像的预训练中,计算机视觉中一种常见的方法是使用掩膜产生兼容的x,y对,其中x是图像y的一个副本,但有一些补丁被掩膜。然后,条件反射变量z对应于一组(可能是可学习的)掩膜和位置标记,它指定了要重建的图像补丁的解码器。只要z的信息容量比信号y要低,这些体系结构就不会关注表示坍缩。

联合嵌入式预测性架构(Joint-Embedding Predictive Architectures)。如图2c所示,联合嵌入预测架构在概念上类似于生成式架构;然而,一个关键的区别是,损失函数应用于嵌入空间,而不是输入空间。JEPA学习从兼容的信号x预测信号y的嵌入,使用一个附加(可能是潜在)变量z的预测网络以促进预测。论文提出的I-JEPA在使用掩膜的图像上下文中提供了该架构的实例化;参见图3。与联合嵌入架构相比,JEPA并不寻求对一组手工制作的数据增强不变的表示,而是寻求在附加信息z条件时相互预测的表示。然而,与联合嵌入架构一样,表示坍缩也是JEPA关注的一个问题。论文利用x和y编码器之间的非对称架构,以避免I-JEPA中的表示坍缩。

 三、方法介绍

论文现在描述了所提出的基于图像的联合嵌入预测体系结构(I-JEPA),如图3所示。总体目标如下:给定一个上下文块,预测同一图像中不同目标块的表示。论文使用视觉Transformer(ViT)架构作为上下文编码器、目标编码器和预测器。一个ViT由一堆Transformer层组成,每个Transformer层由一个自注意的操作和一个全连接的MLP组成。论文的编码器/预测器架构让人想起生成掩膜自动编码器(MAE)方法。然而,一个关键的区别是,I-JEPA方法是非生成性的,并且预测是在表示空间中做出的。

 

 

 

四、图像分类

为了证明I-JEPA在不依赖于手工制作的数据增强的情况下学习高级表示,论文报告了使用线性探测和部分微调协议的各种图像分类任务的结果。在本节中,论文将考虑在ImageNet-1K数据集上预先训练过的自监督模型。预训练和评估实施细节见附录a。所有的I-JEPA模型都在分辨率224×224中进行训练,除非另有明确说明。

ImageNet-1K.表1显示了在通用的ImageNet-1K线性评估基准上的性能。经过自监督预训练后,冻结模型权值,并使用完整的ImageNet-1K训练集在顶部训练一个线性分类器。与流行的掩膜自动编码器(MAE)和data2vec 方法相比,它们在训练前也不依赖大量手工制作的数据增强,论文看到I-JEPA显著提高了线性探测性能,同时使用了更少的计算量。此外,I-JEPA还受益于规模。在分辨率为448时训练的ViT-H/16与视图不变方法的性能相匹配,如iBOT,而不需要额外的手工数据扩充。

Low-Shot ImageNet-1K.表2显示了在1%的ImageNet基准测试上的性能。这里的方法是将预先训练好的模型用于ImageNet分类,只使用1%的ImageNet标签,对应于每个类大约12或13张图像。模型通过微调或线性探测来进行调整,这取决于每种方法的最佳效果。当使用类似的编码器架构时,I-JEPA优于MAE,同时需要更少的预训练时期。I-JEPA,使用ViTH/14架构,与使用数据2vec预训练的ViT-L/16的性能相匹配,同时使用了明显更少的计算量。通过提高图像输入分辨率,I-JEPA优于以前的方法,包括联合嵌入方法,在训练前利用额外的手工数据增强,如MSN、DINO 和iBOT 。

Transfer learning.表3显示了使用线性探头的各种下游图像分类任务的性能。I-JEPA显著优于以前不使用增强的方法(MAE和数据2vec),并减少了在训练前利用手工制作的基于观点不变的最佳方法的差距,甚至超过了CIFAR100和Place205上流行的DINO。

五、本地预测任务(Local Prediction Tasks)

I-JEPA学习语义图像表示,显著提高了以往方法的下游图像分类性能,如MAE和data2vec。此外,I-JEPA受益于规模,并可以缩小差距,甚至超越,利用额外的手工制作的数据增强的基于视图不变性的方法。在本节中,论文发现I-JEPA也能学习局部图像特征,并在低水平和密集的预测任务中,如对象计数和深度预测中,超越了基于视图不变性的方法。

表4显示了使用线性探测的各种低级任务的性能。特别是,经过预训练后,模型的权值被冻结,并在顶部训练一个线性模型,对Clevr数据集进行对象计数和深度预测。与DINO和iBOT等视图不变性方法相比,I-JEPA方法在训练前有效地捕获了低级图像特征,并在对象计数(Clevr/Count)和(大幅度)深度预测(Clevr/Dist)方面优于它们。

 六、可缩放性(Scalability)

模型效率(Model Efficiency) 与以前的方法相比,I-JEPA具有高度的可缩放性。图5显示了对1% ImageNet-1K作为GPU hour的函数的半监督评估。I-JEPA比以前的方法需要更少的计算,并且在不依赖手工数据增强的情况下获得了强大的性能。与直接使用像素作为目标的MAE等基于重建的方法相比,I-JEPA通过在表示空间中计算目标而引入了额外的开销(每次迭代的时间大约慢7%)。

 缩放数据大小(Scaling data size)。论文还发现I-JEPA受益于更大数据集的预训练。表5显示了在增加训练前数据集的大小(IN1KvsIN22K)时,在语义任务和低水平任务上的迁移学习性能。当对更大更多样化的数据集进行预训练时,这些概念不同的任务上的迁移学习性能会提高。

缩放模型大小(Scaling model size)。表5还显示,在IN22K上进行预训练时,I-JEPA受益于更大的模型规模。与ViT-H/14模型相比,对ViT-G/16的预训练显著提高了对Place205和INat18等图像分类任务的下游性能。ViTG/16模型并不能提高对低级下游任务的性能。ViT-G/16使用更大的输入补丁大小,这可能对本地预测任务有害。

 七、预测可视化(Predictor Visualizations)

I-JEPA中预测器的作用是取上下文编码器的输出,并以位置掩膜令牌为条件,预测掩膜令牌指定的位置上目标块的表示。一个问题是,以位置掩模令牌条件的预测器是否正在学习正确捕获目标中的位置不确定性。为了定性地研究这个问题,论文将预测器的输出可视化。在预训练后,论文冻结了上下文编码器和预测器的权值,并按照RCDM框架训练一个解码器,将预测器输出的平均池映射回像素空间。图6显示了各种随机种子的解码器输出。在样本之间常见的特性表示包含在平均合并预测器表示中的信息。I-JEPA预测器能正确地捕捉到位置的不确定性,并产生具有正确姿态的高级物体部件(例如,鸟的背部和汽车的顶部)。不同样本中不同的质量表示表示法中不包含的信息。在这种情况下,I-JEPA预测器丢弃了精确的低级细节和背景信息。

 八、消融(Ablations)

在表示空间中的预测( Predicting in representation space.)。表7比较了在像素空间和表示空间中计算1% ImageNet-1K时的low-shot性能。论文推测,I-JEPA的一个关键组成部分是,损失完全在表示空间中计算,从而使目标编码器能够产生抽象的预测目标,从而消除了无关的像素级细节。从表7中可以清楚地看出,在像素空间中的预测会导致线性探测性能的显著下降。

掩膜策略(Masking strategy)。在表8中,论文减少了在I-JEPA预训练过程中所提出的multi-block掩膜策略(如图4所示)中的目标块的数量以及上下文和目标块的规模。论文使用具有各种多块设置的I-JEPA训练了300个周期,并使用线性探针比较了在1% ImageNet-1K基准测试上的性能。简而言之,论文发现预测几个相对较大的(语义)目标块,并使用信息充分的(空间分布的)上下文块是很重要的。

表6在与其他掩膜策略进行比较时,也进行了类似的消融。论文与rasterized掩膜策略进行了比较,其中图像被分割成四个大象限,其目标是使用一个象限作为上下文来预测其他三个象限。论文还比较了通常用于基于重建的方法的传统的block和random掩膜策略。在block掩膜中,目标是单个图像块,上下文是图像补体。在random掩膜中,目标是一组随机的(可能是不连续的)图像补丁,而上下文是图像的补体。请注意,在所有考虑的掩膜策略中,上下文块和目标块之间没有重叠。所提出的multi-block掩膜策略是I-JEPA学习语义表示的关键。即使切换到传统的block掩膜,ImageNet的性能也会降低超过24%。

九、结论

论文提出了I-JEPA,一种简单而有效的学习语义图像表示的方法,而不依赖于手工制作的数据增强。论文表明,通过在表示空间中进行预测,I-JEPA比像素重建方法收敛速度更快,并学习高语义水平的表示。与基于视图不变性的方法相比,I-JEPA强调了使用联合嵌入架构学习一般表示的路径,而不依赖于手工制作的视图增强。

附录见原文,原文链接:https://arxiv.org/abs/2301.08243

相关文章:

【论文解读】基于图的自监督学习联合嵌入预测架构

一、简要介绍 本文演示了一种学习高度语义的图像表示的方法,而不依赖于手工制作的数据增强。论文介绍了基于图像的联合嵌入预测架构(I-JEPA),这是一种用于从图像中进行自监督学习的非生成性方法。I-JEPA背后的idea很简单&#xff…...

C++ 容器

string 1. 构造 string s1(); // 1 string s2("hello"); // hello string s3(3, k); // kkk string s4("hellohello", 2, 4); // lloh2. 赋值 string s1 "hellohello"; // hellohello string s2.assign(s1); // he…...

【PHP】PHP文件操作详解

PHP是一种广泛使用的服务器端脚本语言,用于开发Web应用程序。在PHP中,文件操作是一项重要的功能,包括文件的读取、写入、删除和其他操作。本文将详细介绍PHP文件操作的各个方面,并通过示例代码进行说明。 一、文件读取 要读取一…...

硬核旗舰南卡OE CC开放式耳机发布,重新定义百元开放式耳机新标杆!

​随着现在健康意识的不断提高,人们对于日常用品的要求越来越高,在耳机市场中,健康因素也逐渐成为消费者所考虑的因素之一,入耳式耳机因为会引发中耳炎、耳膜炎等疾病,正在逐渐被开放式蓝牙耳机所取代,南卡…...

785. 判断二分图

785. 判断二分图 原题链接:完成情况:解题思路:参考代码: 原题链接: 785. 判断二分图 https://leetcode.cn/problems/is-graph-bipartite/description/ 完成情况: 解题思路: 题目解释&#x…...

限时 180 天,微软为 RHEL 9 和 Ubuntu 22.04 推出 SQL Server 2022 预览评估版

导读近日消息,微软公司今天发布新闻稿,宣布面向 Red Hat Enterprise Linux(RHEL)9 和 Ubuntu 22.04 两大发行版,以预览模式推出 SQL Server 2022 评估版。 近日消息,微软公司今天发布新闻稿,宣布…...

一款ccm的功率因素校正控制器ncp1654

产品概述: NCP1654是用于连续传导模式的控制器(CCM)功率因数校正升压预转换器。它控制固定频率模式下的电源开关导通时间(PWM)并且取决于瞬时线圈电流。 该电路封装在SO8封装中,最大限度地减少了外部组件&a…...

4.若依框架上传文件

1.服务端代码-控制器 /*** 上传文件*/PostMapping("/upload")Operation(summary "上传")public AjaxResult uploadFile(MultipartFile file) throws Exception {try {// 上传文件路径String filePath RuoYiConfig.getUploadPath();// 上传并返回新文件名…...

Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required

项目场景: 最近因为公司业务需要在搭一个新架构,用的springboot3和jdk17,在整合mybatis多数据源的时候报错 (引用的mybatisplus 和 mybatisplusjion的是最新的包-2023-08-26) Error creating bean with name ‘XXXServiceImpl’:…...

idea的debug断点的使用

添加断点(目前不知道如何添加断点,就给AutoConfigurationImportSelector的每个方法都加上断点): 然后将StockApplication启动类以debug方式运行,然后程序就会停在119行 点击上边的step over让程序往下运行一行&#x…...

【UE】蓝图通信——事件分发器

目标 比如我现在希望点击控件蓝图A中的按钮后,蓝图B能够马上做出响应 实现步骤 1. 这里控件蓝图A叫“UI_按钮”,我在该蓝图中创建了一个名为“btnIsClicked”的事件分发器 当按钮被点击时,就会调用“btnIsClicked” 2. 蓝图B这里叫做“BP_…...

Python爬虫分布式架构问题汇总

在使用Python爬虫分布式架构中可能出现以下的问题,我们针对这些问题,列出相应解决方案: 1、任务重复执行 在分布式环境下,多个爬虫节点同时从消息队列中获取任务,可能导致任务重复执行的问题。 解决方案:…...

AIGC人工智能涉及三十六职业,看看有没有你的职业(一)

文章目录 一只弹吉他的熊猫 神奇的企鹅 功夫熊猫 视觉光影下的女子 闪光灯效 局部柔光 生物光 LOGO设计 制作儿童绘本故事 换脸艺术 打造专属动漫头像 包装设计之美 建筑设计 如何转高清图 生成3D质感图标 生成微信表情包 探索美食摄影的奇妙之旅 蛋糕创意设…...

万界星空科技/免费MES系统/免费质量检测系统

质量管理也是万界星空科技免费MES中的一个重要组成部分,旨在帮助制造企业实现全面的质量管理。该系统涵盖了供应商来料、生产过程、质量检验、数据分析等各个环节,为企业提供了一站式的质量管理解决方案。 1. 实时质量监控 质量管理能够实时监控生产过程…...

解决IndexError: index 0 is out of bounds for axis 1 with size 0

标题 引言问题背景解决思路如何防止总结参考资料 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客👦🏻 《java 面试题大全》 🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭…...

Java中hashTable的基本介绍,细节讨论,使用注意事项,常用方法和底层的扩容机制

Hashtable 是 Java 标准库中提供的一个古老的散列表(Hash Table)实现,用于存储键值对。它是线程安全的,基于哈希表的数据结构。然而,由于其线程安全性引入的同步机制,使得在多线程环境下性能相对较低。在现…...

redis -实战记录

redis -实战记录 一、安装二、使用 一、安装 centos - docker安装redisWindows10安装redis(图文教程) 二、使用 node-red进行读写redis...

Mysql知识梳理

Mysql知识梳理 索引索引分类索引未命中的原因性能调优命令Explain回表 mysql性能优化事务四大特性事务隔离级别设置事务隔离级别 存储引擎聚簇索引和非聚簇索引聚簇索引非聚簇索引 最左前缀结合原则全文索引 索引 索引分类 mysql有普通索引、空间索引、主键索引、唯一索引、组…...

文生图模型之Stable Diffusion

原始文章地址 autoencoder CLIP text encoder tokenizer最大长度为77(CLIP训练时所采用的设置),当输入text的tokens数量超过77后,将进行截断,如果不足则进行paddings,这样将保证无论输入任何长度的文本&…...

Java List循环安全删除元素

Java List循环安全删除元素的几种方式如下: 使用迭代器(Iterator):通过调用List的iterator()方法获取List的迭代器,然后使用迭代器的remove()方法删除元素。这种方式可以避免在遍历过程中修改List导致的并发修改异常&…...

2023年03月 C/C++(三级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:和数 给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。 比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。 时间限制:10000 内存限制:65536 输入 共两行,第一行是数列中数的个数n ( 1 <= n <= 100),第二行是由n个…...

bert-base-chinese 判断上下句

利用BERT等模型来实现语义分割。BERT等模型在预训练的时候采用了NSP&#xff08;next sentence prediction&#xff09;的训练任务&#xff0c;因此BERT完全可以判断两个句子&#xff08;段落&#xff09;是否具有语义衔接关系。这里我们可以设置相似度阈值 MERGE_RATIO &#…...

vue3+vue-cli使用mockjs

1.下载mockjs包 npm i mockjs -D 2.main.js中全局引入 // mock模拟后端数据 import /mock/index.js 3.axios下baseUrl注释掉&#xff0c;让其不走本地代理 // 使用mock数据的话&#xff0c;将这一项注释即可 // axios.defaults.baseURL process.env.VUE_APP_BASE_API; 4.s…...

Android 全局监听软键盘弹起隐藏 动态修改布局并适配无限循环的问题

思路&#xff1a; 要在 Android 应用中全局检测软键盘的弹起&#xff0c;您可以使用 ViewTreeObserver.OnGlobalLayoutListener 监听器来监听布局树的变化。当软键盘弹起或隐藏时&#xff0c;布局树会发生变化&#xff0c;因此您可以在监听器中捕获这些变化。 以下是一个示例…...

第 k 小整数

题目描述 现有 n 个正整数&#xff0c;要求出这 n 个正整数中的第 k 个最小整数&#xff08;相同大小的整数只计算一次&#xff09;。 输入格式 第一行为 n 和 k; 第二行开始为 n 个正整数的值&#xff0c;整数间用空格隔开。 输出格式 第kk个最小整数的值&#xff1b;若无…...

LeetCode 1448. 统计二叉树中好节点的数目:DFS

【LetMeFly】1448.统计二叉树中好节点的数目 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-good-nodes-in-binary-tree/ 给你一棵根为 root 的二叉树&#xff0c;请你返回二叉树中好节点的数目。 「好节点」X 定义为&#xff1a;从根到该节点 X 所经过的节点…...

AR室内导航技术之技术说明与效果展示

随着科技的飞速发展&#xff0c;我们周围的环境正在经历着一场数字化的革命。其中&#xff0c;AR室内导航技术以其独特的魅力&#xff0c;为我们打开了一扇通往全新数字化世界的大门。本文将为您详细介绍这一技术的实现原理、工具应用以及成品展示&#xff0c;带您领略AR室内导…...

06-Numpy基础-线性代数

线性代数&#xff08;如矩阵乘法、矩阵分解、行列式以及其他方阵数学等&#xff09;是任何数组库的重要组成部分。 NumPy提供了一个用于矩阵乘法的dot函数&#xff08;既是一个数组方法也是numpy命名空间中的一个函数&#xff09; x.dot(y)等价于np.dot(x, y) 符&#xff08;…...

SpringBootWeb 登录认证

登录认证&#xff0c;那什么是认证呢&#xff1f; 所谓认证指的就是根据用户名和密码校验用户身份的这个过程&#xff0c;认证成功之后&#xff0c;我们才可以访问系统当中的信息&#xff0c;否则就拒绝访问。 在前面的案例中&#xff0c;我们已经实现了部门管理、员工管理的…...

【JVM 内存结构丨栈】

栈 -- 虚拟机栈 简介定义压栈出栈局部变量表操作数栈方法调用特点作用 本地方法栈&#xff08;C栈&#xff09;定义栈帧变化作用对比 主页传送门&#xff1a;&#x1f4c0; 传送 简介 栈是用于执行线程的内存区域&#xff0c;它包括局部变量和操作数栈。 Java 虚拟机栈会为每…...

LeetCode 138.复制带随机指针的链表

文章目录 &#x1f4a1;题目分析&#x1f4a1;解题思路&#x1f6a9;步骤一&#xff1a;拷贝节点插入到原节点的后面&#x1f369;步骤一代码 &#x1f6a9;步骤二&#xff1a;控制拷贝节点的random进行连接&#x1f369;步骤二代码 &#x1f6a9;步骤三&#xff1a;拷贝节点解…...

基于SSM的小说网站的设计与实现(论文+源码)_kaic

目 录 1 绪论................................................................................................... 1 1.1 项目背景................................................................................................................ 1 1.2 发展历程..…...

【Python】代理池针对ip拦截破解

代理池是一种常见的反反爬虫技术&#xff0c;通过维护一组可用的代理服务器&#xff0c;来在被反爬虫限制的情况下&#xff0c;实现数据的爬取。但是&#xff0c;代理池本身也面临着被目标网站针对ip进行拦截的风险。 本文将详细介绍代理池针对ip拦截破解的方法&#xff0c;包含…...

P1065 [NOIP2006 提高组] 作业调度方案

[NOIP2006 提高组] 作业调度方案 题目描述 我们现在要利用 m m m 台机器加工 n n n 个工件&#xff0c;每个工件都有 m m m 道工序&#xff0c;每道工序都在不同的指定的机器上完成。每个工件的每道工序都有指定的加工时间。 每个工件的每个工序称为一个操作&#xff0c;…...

设计模式三原则

1.1单一职责原则 C 面向对象三大特性之一的封装指的就是将单一事物抽象出来组合成一个类&#xff0c;所以我们在设计类的时候每个类中处理的是单一事物而不是某些事物的集合。 设计模式中所谓的单一职责原则&#xff0c;就是对一个类而言&#xff0c;应该仅有一个引起它变化的原…...

dll载入时发生的事情

dll是什么 DLL 是一个包含可由多个程序同时使用的代码和数据的库。 对于 Windows 操作系统&#xff0c;操作系统的大部分功能都由 DLL 提供。 另外&#xff0c;当您在这些 Windows 操作系统之一上运行某一程序时&#xff0c;该程序的很多功能可能是由 DLL 提供的。 例如&…...

k8s-ingress-context deadline exceeded

报错&#xff1a; rancher-rke-01:~/rke # helm install rancher rancher-latest/rancher --namespace cattle-system --set hostnamewww.rancher.local Error: INSTALLATION FAILED: Internal error occurred: failed calling webhook "validate.nginx.ingress.kube…...

css盒模型

盒模型的组成&#xff1a; content&#xff0c;padding&#xff0c;border&#xff0c;margin 盒模型的分类&#xff1a; 内容盒模型(标准盒模型) — 盒子的宽widthpaddingborder 边框盒模型 — 盒子的宽width 参考 盒模型【CSS面试题】_哔哩哔哩_bilibili...

cuda11.1和cuDNN v8.8.1的安装目录问题

cuda的不同版本文件路径是不一致的&#xff0c;在cuda10.1中&#xff0c;配置cudnn的文件路径是&#xff1a; sudo cp cuda/include/cudnn.h /usr/local/cuda-10.1/include/ sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda-10.1/lib64/但是在cuda11.1中&#xff0c;文件路径…...

微信小程序scroll-view的触发机制

一、scroll-view 可滚动视图区域。使用竖向滚动时&#xff0c;需要给scroll-view一个固定高度&#xff0c;通过 WXSS 设置 height。组件属性的长度单位默认为px&#xff0c;2.4.0起支持传入单位(rpx/px)。 两个属性是作为上拉加载下拉刷新触发事件 scroll-view属性bindrefresh…...

为本地文件创建URL

1.搭建Nginx流媒体服务器 2.nginx.conf中添加 server {#listen 80 default_server;#listen [::]:80 default_server;location /var/www/html/Dir {autoindex on;}root /var/www/html; # 设置默认网页的根目录index index.html; # 设置默认网页的文件名}在/var/www/html中加…...

UI位置与布局

UI位置与布局 引言 发现UGUI的RectTransform定位还是很复杂的&#xff0c;感觉有必要详细了解一下 RectTransform 继承自Transform。他的local position由其他几个变量控制。建议不要直接设置position 目的是为了实现UI自动布局。这套方法将绝对定位&#xff0c;相对定位&a…...

《存储IO路径》专题:DDIO对系统性能的影响

DDIO对系统性的影响 想象一下,有一天,你在网上冲浪,突然,一个巨大的数据包从天而降,直接砸在了你的电脑上。你一看,哇,是全新的《英雄联盟》版本!你迫不及待地打开了游戏,发现加载速度简直快如闪电。 那么,这个神奇的事情是怎么发生的呢? 其实,这都要归功于DDIO技…...

ModaHub魔搭社区:WinPlan经营大脑数据采集

目录 WinPlan经营大脑数据采集介绍 WinPlan经营大脑数据采集模版 WinPlan经营大脑数据采集介绍 基于指标、维度来创建业务表单,通过业务表单的形式来采集实际数据,最终生成企业统一的经营数据库。由于需要客户创建数据采集模版(业务流程),然后可以基于各个业务模版作为…...

缓存最佳实践

目录 前言 一、Cache Aside&#xff08;旁路缓存&#xff09;策略 二、不一致解决场景及解决方案 一、数据库主从不一致 二、缓存与数据库不一致 三、问题分析 三、缓存误用 一、多服务共用缓存实例 二、调用方缓存数据 三、缓存作为服务与服务之间传递数据的媒介 四…...

Linux 终端命令之文件目录操作,对比Dos相关命令

目录 前言 基础命令&#xff08;文件目录相关的&#xff09; cd命令 【英文帮助】 【对应Dos命令】 pwd命令 【英文帮助】 【对应Dos命令】 ls命令 【英文帮助】 【对应Dos命令】 tree命令 【英文帮助】 【对应Dos命令】 mkdir命令 【英文帮助】 【对应Dos命令…...

C++学习第十八天----switch语句

1. &#xff1f;:运算符 条件运算符&#xff0c;又叫三元运算符&#xff1b; 该运算符的通用格式为&#xff1a; expression1&#xff1f;expression2 &#xff1a;expression3&#xff1b; 意义是假如1为true&#xff0c;则整个条件表达式的值为2的值&#xff0c;否则为3的值&…...

基于poi生成excel模板并生成下拉选择框

直接上代码&#xff08;有注释&#xff09; public void downloadImportTemplate(HttpServletResponse response) {try {ServletOutputStream outputStream response.getOutputStream();//创建工作表XSSFWorkbook workbook new XSSFWorkbook();//标题行的标题List<String…...

Redis五种类型

Redis 基础类型 String 应用场景 缓存功能&#xff1a;string 最常用的就是缓存功能&#xff0c;会将一些更新不频繁但是查询频繁的数据缓存起来&#xff0c;以此来减轻 DB 的压力。 底层实现 如果字符串对象保存的是一个字符串值&#xff0c; 并且这个字符串值的长度大于…...

通过IP地址如何防范钓鱼网站诈骗?

随着互联网的普及和发展&#xff0c;钓鱼网站诈骗的风险日益增加。钓鱼网站通过伪装成合法网站&#xff0c;诱导用户输入个人敏感信息进而进行非法活动。IP地址作为网络通信的基本单位&#xff0c;可以在一定程度上帮助我们防范钓鱼网站诈骗。本文将探讨IP地址防范钓鱼网站诈骗…...