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

【风格迁移】对比度保持连贯性损失 CCPL:解决图像局部失真、视频帧间的连贯性和闪烁

对比度保持连贯性损失 CCPL:解决图像局部失真、视频帧间的连贯性和闪烁

    • 提出背景
    • 解法:对比度保持连贯性损失(CCPL)= 局部一致性假设 + 对比学习机制 + 邻域调节策略 + 互信息最大化
      • 对比学习:在无需标签的情况下有效学习区分特征
      • 应用CCPL的步骤 - 高层次描述
      • 应用CCPL的步骤 - 技术细节
      • 简单协方差变换(SCT)的详细过程
      • 逻辑链条

 


提出背景

论文:https://arxiv.org/pdf/2207.04808.pdf

代码:https://github.com/JarrentWu1031/CCPL

 

如果你能将心爱的照片转换成梵高或毕加索的画作风格,又或者让一段视频流畅地展现出古典油画的韵味,这一切听起来是不是很神奇?

近年来,一项名为“风格转换”的技术正让这种想象成为现实。

把一种图像的风格应用到另一张图像上,但要做得好却非常复杂。

特别是在处理视频时,我们希望转换后的每一帧都能够保持风格的一致性,同时又不失原有的动态效果。

过去的技术往往在保持这种一致性上遇到困难,导致视频在播放时会出现闪烁或是帧与帧之间不连贯的现象。

研究人员提出了一种新的方法,名为“对比度保持连贯性损失”(CCPL)。

方法创新: 与传统的风格转换技术不同,CCPL通过对比学习框架最大化正样本对的互信息来保持局部连贯性,同时避免了与风格化目标的直接矛盾,即避免了生成图像简单复制内容图像的问题。

CCPL通过专注于图像的局部细节,而不是整体,来确保风格转换的连贯性和一致性。

就是让图片的每一小块都进行独立的风格转换,但又能保证整体上的和谐统一。

  • CCPL引入的邻域调节策略显著减少了图像的局部失真问题。这意味着在风格转换过程中,生成的图像在细节上更加准确,同时在视觉质量上得到了显著提升。

除此之外,为了更好地融合不同的风格特征,研究团队还提出了一个名为“简单协方差变换”(SCT)的技术。

通过这种方法,可以更精确地将一个风格的特点融入到另一张图片中,从而达到更自然、更贴近原作风格的转换效果。

这项技术的美妙之处在于,它不仅适用于艺术风格的转换,也同样适用于视频和照片级真实感的风格转换。

 

对于解决图像和视频风格转换中的帧间连贯性和局部一致性问题。

CCPL的核心思想在于通过一种对比学习的框架来维持内容的连贯性,同时允许风格的灵活转换。

这种方法特别适用于处理视频风格转换,其中需要在连续帧之间保持高度的连贯性,以避免产生闪烁或其他视觉不一致的现象。

解法:对比度保持连贯性损失(CCPL)= 局部一致性假设 + 对比学习机制 + 邻域调节策略 + 互信息最大化

大餐制作 = 准备食材 + 烹饪技术 + 调味品匹配 + 味道平衡

准备食材(局部一致性假设):

  • 每道菜的食材需要新鲜且适合该菜式。
  • 这就像局部一致性假设中的每个小区域(或补丁),都需要保持其内容和风格上的连贯性,确保整体风格转换的自然和谐。
  • 之所以用“准备食材”,是因为每道菜的成功都建立在优质食材的基础上

烹饪技术(对比学习机制):

  • 使用正确的烹饪方法来处理不同的食材,比如煎、炒、烤等,以达到最佳风味。
  • 这对应于CCPL中的对比学习机制,通过比较正样本对和负样本对来学习如何在保持内容连贯性的同时进行风格迁移。
  • 之所以用“烹饪技术”,是因为正确的技术能最大化食材的风味,就如对比学习机制最大化风格迁移的效果

调味品匹配(邻域调节策略):

  • 选择合适的调味品来补充和提升食物的味道,保证不同菜品之间的味道是协调的。
  • 在CCPL中,邻域调节策略确保了相邻补丁间风格转换的连贯性,避免了突兀的变化。
  • 之所以用“调味品匹配”,是因为它能让菜品之间的过渡更加自然,类似于邻域调节策略在风格转换中的作用

味道平衡(互信息最大化):

  • 最后,确保整顿大餐中的每道菜味道平衡,不会相互压倒,达到整体的和谐。
  • 互信息最大化则是在CCPL中通过优化正负样本对的相似度和差异度,以确保风格转换的连贯性和一致性。
  • 之所以用“味道平衡”,是因为它要求厨师对整体味道有综合考量,类似于互信息最大化在风格转换中平衡正负样本对的作用

 

CCPL 过程:

在这里插入图片描述
这个过程涉及两帧内容图像(Frame 1 和 Frame 2),它们分别包含了一些局部区域(RA,RB和RC)。

在这两帧中,相同颜色的框代表相同的位置,但可能由于相机移动或物体移动,内容有所不同。

目标是使生成的风格化图像中相对应的区域(R’A,R’B和R’C)之间的变化与内容图像的相应区域之间的变化尽可能一致。

这样可以保持内容的连贯性,并且通过最大化相同位置的补丁之间的互信息来实现这一点。

  • 子特征1:局部一致性假设

    • 描述:CCPL出发点是一个相对温和的假设,即全局的不一致性主要由局部的不一致性引起。
    • 这意味着通过专注于图像或视频的小区域(局部补丁),我们可以更有效地维护整体的连贯性。
    • 原因:这个假设允许算法在没有牺牲整体风格转换效果的情况下,精细控制局部区域的连贯性和风格一致性。
  • 子特征2:对比学习机制

    • 描述:CCPL采用对比学习机制,通过最大化正样本对的相似性(即相同区域的局部补丁)和最小化负样本对的相似性(即不同区域的局部补丁),来保持内容的连贯性。
    • 原因:对比学习机制有效地利用了无标签数据,通过区分相似和不相似的局部特征,强化了模型对风格和内容连贯性的理解,从而在不直接依赖于成对的训练样本的情况下实现风格迁移。
  • 子特征3:邻域调节策略

    • 描述:CCPL引入了一种邻域调节策略,通过调整相邻补丁间的相互作用,减少了局部失真并提升了视觉质量。
    • 原因:这种策略通过确保相邻补丁之间的风格转换连贯性,减少了风格转换过程中可能出现的突兀变化,特别是在视频帧间,这种方法显著提升了视觉连贯性和整体观感。

通过局部一致性的假设,对比学习的应用,以及邻域调节策略的实施,CCPL能够在保持内容连贯性的同时实现风格的高度自由转换,从而在不牺牲风格化效果的前提下,显著提升了转换后图像和视频的视觉质量。

这使得CCPL成为一个强大的工具,适用于各种风格转换任务,包括艺术化转换、照片级真实感转换和视频风格转换。

 


对比学习:在无需标签的情况下有效学习区分特征

子解法: 对比学习

子特征: 正负特征对的互信息最大化。

通过最大化正样本对的互信息同时最小化负样本对的互信息,学习良好的特征表示。

之所以采用对比学习,是因为在无需标签的情况下,可以有效学习区分特征,为图像到图像的转换提供强大的特征表示基础。

我们有一组风景照片和一组著名画家的画作。

我们的目标是学习一个模型,使得我们可以将画家的风格应用到风景照片上,创建出新的、风格化的图像。

在没有对比学习的情况下,我们可能需要大量的 “风景照片-风格化照片” 对作为训练数据,这在现实中是很难获得的。

这时,对比学习就派上用场了。

我们不需要精确的“对”作为训练数据,而是可以使用无标签的图像来学习区分特征。具体来说,对比学习通过以下方式工作:

  1. 正样本对的选择:我们从著名画家的画作中选取一个局部特征(比如一小块画布上的纹理),并从风景照片中选取一个相似的局部特征作为正样本对。

    这两个特征在视觉上是相似的,我们希望模型学会识别和保持这种相似性。

  2. 负样本对的选择:同时,我们还从同一幅风景照片或其他画作中选取与上述特征明显不同的局部特征作为负样本对。

    这些特征在视觉上与选定的特征有显著差异,我们希望模型学会区分这些差异。

  3. 互信息最大化:模型通过最大化正样本对之间的互信息(即使模型能够识别和强调这些特征之间的相似性)和最小化负样本对之间的互信息(即使模型能够区分不相关的特征),来学习区分这些特征。

    这个过程不需要标签,因为它是基于特征相似性和差异性的内在属性。

例如,如果我们正在学习梵高的风格,正样本对可能是一小块表现出梵高特有笔触的画布特征和一张风景照片中相似纹理的部分。

负样本对可能是同一风景照片中的一块平滑无纹理的天空区域。

通过这种方式,对比学习使模型能够学习到如何将梵高的笔触应用到风景照片的相应部分,同时避免在不适合的区域(如平滑的天空)应用这种风格,从而实现更加准确和自然的风格转换效果。

这个过程不依赖于成对的训练样本,而是依赖于模型能够从大量无标签的数据中学习区分和应用风格的能力。

应用CCPL的步骤 - 高层次描述

假设我们有一段城市风景的视频,我们希望将梵高的绘画风格应用于这个视频,同时确保视频中的每一帧都能够在视觉上保持连贯,避免出现闪烁或者风格不一致的问题。

应用CCPL的步骤

  1. 局部一致性假设

    • 我们首先将视频分解为一系列帧,然后将每一帧进一步分割成小的局部区域(或称为补丁)。
    • 这样做的目的是将全局风格转换问题转化为多个局部问题,每个局部问题关注于如何将梵高的风格应用于一个小区域内。
  2. 对比学习机制

    • 接下来,对于视频中的每一个局部补丁,CCPL算法会在梵高的画作中寻找风格上最接近的补丁作为正样本对,同时也会寻找风格差异显著的补丁作为负样本对。
    • 通过这种方式,算法学习在保持原有内容结构的前提下,如何将梵高的风格特征融入到城市风景的每个局部补丁中,同时确保与周围补丁在视觉上的连贯性。
  3. 邻域调节策略

    • 在风格转换过程中,CCPL还会考虑每个局部补丁与其相邻补丁之间的关系,确保相邻补丁之间的风格转换是连贯的。
    • 这一步是通过调整相邻补丁间的相互作用来实现的,比如通过最小化相邻补丁间风格特征的差异。
    • 这样,即使是动态变化的视频场景,每一帧内的风格转换也能够保持自然和连贯,避免了因风格突变导致的视觉闪烁问题。

通过应用CCPL,最终生成的视频不仅成功地将梵高的绘画风格融入到城市风景中,而且每一帧之间都能保持高度的视觉连贯性,使得整个视频看起来既自然又具有艺术感。

观众可以清晰地看到梵高笔触下的城市景象,同时享受到流畅连贯的视觉体验。

这个例子展示了CCPL在实现高质量风格转换,尤其是在处理视频内容时的强大能力。

通过局部一致性假设、对比学习机制和邻域调节策略的结合,CCPL能够有效解决风格转换过程中的视觉不一致问题,提供了一种既实用又高效的解决方案。

 


应用CCPL的步骤 - 技术细节

在这里插入图片描述
首先,内容图像C和生成图像G通过固定的图像编码器E,得到特定层的特征图Cf和Gf。

然后,从Gf中随机采样N个向量(红点),并从Cf中采样相同位置的向量。这些向量之间的差异通过向量减法得到,并通过多层感知机(MLP)映射和归一化,然后计算InfoNCE损失。

这一过程有助于在不同帧间保持图像的时间连贯性。

  1. 特征图提取

    • 首先,生成的图像G和其对应的内容输入C被送入一个固定的图像编码器E。这个编码器是预先训练好的,能够提取图像的深层特征。在这个过程中,我们从特定层得到了生成图像G和内容图像C的特征图,分别表示为Gf和Cf。
    • 这一步骤的目的是将图像转换为更高维的特征表示,这些特征表示更加丰富,能够捕捉到图像的重要视觉属性。
  2. 随机采样和邻域选择

    • 接着,从Gf中随机采样N个向量(表示为红点),每个向量代表了生成图像在特定区域的特征表示。这些向量被表示为Gx_a,其中x=1,…,N。
    • 对于每个采样的向量Gx_a,选择其八个最近的邻域向量(表示为蓝点),表示为Gx,y_n,其中y=1,…,8代表邻域索引。
    • 同样地,也从Cf中在相同位置采样,获取对应的内容特征向量Cx_a和其邻域向量Cx,y_n。
  3. 差异向量的计算

    • 对于每对向量及其邻域,计算差异向量d_g^x,y = G_a^x ⊖ G_nx,y和d_cx,y = C_a^x ⊖ C_n^x,y,其中⊖代表向量减法。
    • 这些差异向量代表了局部区域内特征之间的变化,是CCPL尝试保持一致的关键量。
  4. 对比学习与互信息最大化

    • 为了实现互信息最大化,CCPL尝试让正样本对(即来自相同位置的差异向量对)之间的差异尽可能相似,而让负样本对(即来自不同位置的差异向量对)之间的差异尽可能不同。
    • 通过使用多层感知机(MLP)将差异向量映射到单位球面上,并计算InfoNCE损失,CCPL能够有效地实现这一目标。这种方法不仅强化了生成图像的时间连贯性,而且避免了直接使生成图像G类似于内容图像C的问题,从而不会与风格迁移的目的相矛盾。

简单协方差变换(SCT)的详细过程

在这里插入图片描述
上图是SCT模块的具体结构,以及它如何与其他类似算法(如AdaIN和Linear)进行比较。

SCT模块通过首先对内容特征fc和风格特征fs进行标准化处理,然后通过减少通道维数来降低计算成本,接着计算风格特征的协方差矩阵,最后通过矩阵乘法融合内容特征和风格特征。

这个过程不仅保留了风格特征之间的相关性,而且也简化了网络结构,使其更加轻量和快速。

通过这种方式,SCT模块能够有效地将风格化特征与内容特征融合,生成富有艺术风格的图像。

逻辑链条

对比度保持连贯性损失(CCPL)这样的复杂技术时,子特征之间的逻辑关系可以被视为一个“链条”模型,每个环节都是有序连接的,每一步骤的输出都作为下一步骤的输入。

阶段 1:目标设定

  • 目标:将梵高的风格应用到城市风景视频中,并保持帧间连贯性。

阶段 2:特征图提取(子特征1)

  • 操作:使用编码器E从内容图像C和生成图像G提取特征图Cf和Gf。
  • 逻辑链条:这是链条的起始点,我们需要转换图像到一个可以更好地表征风格和内容的特征空间。

阶段 3:随机采样和邻域选择(子特征2)

  • 操作:从特征图中随机选择特定数量的向量(代表局部区域)及其邻域。
  • 逻辑链条:建立在特征图提取的基础上,这一步骤为后续的对比学习准备了输入数据。

阶段 4:差异向量的计算(子特征3)

  • 操作:计算选定向量与邻域向量之间的差异。
  • 逻辑链条:计算差异向量是为了量化邻域内的风格变化,这对于保持风格连贯性至关重要。

阶段 5:对比学习与互信息最大化(子特征4)

  • 操作:应用对比学习机制,最大化正样本对的互信息,最小化负样本对的互信息。
  • 逻辑链条:这是链条中的关键环节,它利用前面计算出的差异向量来训练模型,使得模型能够在保持内容连贯性的同时实现风格转换。

阶段 6:损失函数优化(子特征5)

  • 操作:通过结合内容损失、风格损失和CCPL,进行模型训练。
  • 逻辑链条:这个阶段整合了所有先前的子特征,并通过优化损失函数来调整模型参数,以达到最佳的风格转换效果。

阶段 7:输出评估(子特征6)

  • 操作:评估生成视频的风格连贯性和视觉效果。
  • 逻辑链条:这是链条的最终环节,它确保了所有先前步骤的有效性,并指导未来的优化方向。

相关文章:

【风格迁移】对比度保持连贯性损失 CCPL:解决图像局部失真、视频帧间的连贯性和闪烁

对比度保持连贯性损失 CCPL:解决图像局部失真、视频帧间的连贯性和闪烁 提出背景解法:对比度保持连贯性损失(CCPL) 局部一致性假设 对比学习机制 邻域调节策略 互信息最大化对比学习:在无需标签的情况下有效学习区分…...

【C++】贪心算法

贪心算法(Greedy Algorithm)是一种基于贪心策略的算法,它在每一步选择中都采取当前状态下最优的选择,以希望最终得到全局最优解。贪心算法通常适用于满足最优子结构性质的问题,即问题的最优解可以通过其子问题的最优解…...

记一次dockerfile无法构建问题追溯

我有一个dockerfile如下: ENTRYPOINT ["/sbin/tini","-g", "--"] CMD /home/scrapy/start.sh 我原本的用意是先启动tini,再执行下面的cmd命令启动start.sh。 为啥要用tini? 因为我的这个docker…...

React使用 useImperativeHandle 自定义暴露给父组件的实例方法(包括依赖)

关键词 React useImperativeHandle 摘要 useImperativeHandle 是 React 提供的一个自定义 Hook,用于在函数组件中显式地暴露给父组件特定实例的方法。本文将介绍 useImperativeHandle 的基本用法、常见应用场景,以及如何处理其依赖项,以帮…...

yolov5v7v8目标检测增加计数功能--免费源码

在yolo系列中,很多网友都反馈过想要在目标检测的图片上,显示计数功能。其实官方已经实现了这个功能,只不过没有把相关的参数写到图片上。所以微智启软件工作室出一篇教程,教大家如何把计数的参数打印到图片上。 一、yolov5目标检测…...

JPA常见异常 JPA可能抛出的异常

1、EntityNotFoundException(实体不存在异常): 通过 JPA 查找一个不存在的实体。 2、NonUniqueResultException(非唯一结果异常): 查询返回了多个结果,但期望只有一个结果。 3、TransactionRequiredExcep…...

Dockerfile的艺术:构建高效容器镜像的指令详解与实战指南

在容器化技术风靡全球的今天,Dockerfile作为构建 Docker 镜像的蓝图,其编写技巧与理解深度直接影响着应用部署的效率与稳定性。本文将深入剖析Dockerfile中的核心指令,以实战角度为您呈现一份详尽的解读与操作指南,并在文末抛出一…...

软件开发项目管理中各角色职责介绍

项目经理:项目经理在项目全生命周期中扮演着核心统筹与协调者的角色,负责从项目的启动、规划、执行、监控直至收尾的全过程管理。具体职责包括但不限于以下几点: 制定项目计划:依据项目业务主客户需求,明确项目范围、时…...

将时间转换为 `刚刚`、`几秒前`、`几分钟前`、`几小时前`、`几天前`、几月前或按照传入格式显示

const formatPast (date, type "default", zeroFillFlag true) > {// 定义countTime变量,用于存储计算后的数据let countTime;// 获取当前时间戳let time new Date().getTime();// 转换传入参数为时间戳let afferentTime new Date(date).getTime(…...

Oracle存储过程干货(二):PLSQL控制语句

注:本文的数据都来源于,oracle自带的emp表。 —if then elsif end if,单条件判断— declarev_grade char(1); beginv_grade : B;if v_grade A thendbms_output.put_line(哥真牛逼);elsedbms_output.put_line(哥还得加油);end if; end; /—if then els…...

深入Gradle:初识构建自动化的魅力

在软件开发的世界中,构建工具是不可或缺的一部分。它们帮助我们自动化编译、测试和打包应用程序的过程,从而节省时间并减少错误。在众多构建工具中,Gradle以其灵活性、可扩展性和卓越的性能而脱颖而出。本篇文章将带你走进Gradle的世界&#…...

cpp版ros2、opencv转换

ros2转opencv #include <opencv2/opencv.hpp> #include <cv_bridge/cv_bridge.h> #include <sensor_msgs/image_encodings.hpp> ​ subscriber_ this->create_subscription<sensor_msgs::msg::Image>( "img", 10, std::bind(&Subs…...

使用API接口竞品价格监控

步骤一&#xff1a;确定监控目标和KPIs 目标&#xff1a;明确您希望通过监控竞品价格来实现的目标&#xff0c;例如保持价格竞争力、检测价格波动等。KPIs&#xff1a;设定关键绩效指标&#xff0c;如价格变动幅度、价格调整频率等。 步骤二&#xff1a;选择数据源和API 电商…...

Redis的BitMap的使用

简介 Redis的Bitmap不是一个独立的数据结构类型&#xff0c;而是基于字符串&#xff08;String&#xff09;类型实现的一种功能 &#xff0c;存储的是二进制的文件&#xff0c;布隆过滤器就是基于BitMap实现的。 语句的使用 新增操作 setbit key offset value offset的首位…...

视频号带货究竟怎么做?老阳分享的项目怎么样?

在当今社会&#xff0c;随着互联网的快速发展&#xff0c;社交媒体已经成为人们日常生活中不可或缺的一部分。在这个背景下&#xff0c;视频号带货作为一种新兴的电商模式&#xff0c;逐渐崭露头角。许多人都想通过加入视频号带货行业来实现自己的财富自由。其中&#xff0c;老…...

AI智能分析网关V4智慧环保/智慧垃圾站视频智能分析与监控方案

一、背景介绍 随着城市化进程的加速&#xff0c;垃圾处理问题日益受到人们的关注&#xff0c;传统的垃圾站管理方式已经无法满足现代社会的需求。针对当前垃圾站的监管需求&#xff0c;TSINGSEE青犀可基于旗下视频智能检测AI智能分析网关V4与安防监控视频综合管理系统EasyCVR平…...

vxe-table编辑单元格动态插槽slot的使用

业务场景&#xff1a;表格中只有特定某一行的的单元格可以编辑&#xff0c;列很多&#xff0c;为每个列写个插槽要写很多重复代码&#xff0c;所以这里使用动态插槽&#xff0c;简化代码量。显示编辑图标&#xff0c;点击编辑图标隐藏。失去焦点保存调后台接口。 解决办法&…...

2024新鲜出炉阿里巴巴面试真题,如果不想35岁被淘汰这篇文章必看

最近看到群里看到一个女生&#xff0c;讲述了她从开始选择Android&#xff0c;经过非常努力的学习和挣扎&#xff0c;然而最后面对当前的环境却不得不放弃。看完以后真的非常替她感觉惋惜&#xff0c;如果早几年入行可能结果会比现在好很多&#xff0c;但可惜&#xff0c;这就是…...

设计模式(含7大原则)面试题

目录 主要参考文章 设计模式的目的 设计模式的七大原则 设计模式的三大分类及关键点 1、创建型模式&#xff08;用于解耦对象的实例化过程&#xff09; 2、结构型模式 3、行为型模式 23种设计模式&#xff08;乱序--现学现写&#xff0c;不全面--应付面试为主&#xff…...

claude3科普

Claude 3 是一系列由 Anthropic 推出的新一代 语言模型&#xff08;LLMs&#xff09;。Anthropic 是一家人工智能初创公司&#xff0c;其背后的投资者包括亚马逊等&#xff0c;总投资额达到 40亿美元12。 这一系列模型分为三个不同级别的能力&#xff0c;分别是&#xff1a; …...

2024中国·北京预制菜产业博览会

2024中国北京预制菜产业博览会 时间&#xff1a;2024年5月25-27日 地点&#xff1a;北京中国国际展览中心 主办单位&#xff1a;北京鸿利展览服务有限公司 承办单位&#xff1a;北京预制菜博览会组委会 北京鸿利展览服务有限公司 预制菜产业“一头连着餐桌&#xff0c;一头…...

【Vue】vue3 在图片上渲染 OCR 识别后的文本框、可复制文本组件

需求 后面返回解析后的文本和四角坐标&#xff0c;在图片上渲染成框&#xff0c;并且可复制。图片还可以缩放、拖拽 实现 这里要重点讲下关于OCR文本框的处理&#xff1a; 因为一些文字可能是斜着放的&#xff0c;所有我们要特殊处理&#xff0c;根据三角函数来计算出它的偏…...

Linux系统运维脚本:批量创建linux用户和密码(读取文件中的账号和密码来批量创建用户)

目 录 一、要求 二、解决方案 &#xff08;一&#xff09;解决思路 &#xff08;二&#xff09;方案 三、脚本程序实现 &#xff08;一&#xff09;脚本代码和解释 1、脚本代码 2、代码解释 &#xff08;二&#xff09;脚本验证 1、脚本编辑 2、给予执行权…...

重力坝廊道量水堰计与堰板安装技术指南

在水利工程中&#xff0c;重力坝廊道量水堰计的安装是确保水资源有效监测与管理的关键环节。本文将详细阐述量水堰计及量水堰板的安装方法&#xff0c;以确保安装质量&#xff0c;提高水资源利用效率。 一、量水堰计的安装位置 量水堰计应安装在堰板的上游&#xff0c;距离堰板…...

ButterKnife实现之Android注解处理器使用教程

ButterKnife实现之Android注解处理器使用教程 1、新建一个注解 1.1、编译时注解 创建注解所需的元注解Retention包含3个不同的值&#xff0c;RetentionPolicy.SOURCE、RetentionPolicy.CLASS、RetentionPolicy.RUNTIME。这3个值代表注解不同的保留策略。 使用RetentionPolic…...

【哈希】Leetcode 128. 最长连续序列 【中等】

最长连续序列 给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。示例 1&#xff1a;输入&#xff1a;nums [100,4,200,1,3,2]输出&#x…...

回溯是怎么回事(算法村第十八关青铜挑战)

组合 77. 组合 - 力扣&#xff08;LeetCode&#xff09; 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],…...

向爬虫而生---Redis 探究篇5<Redis集群刨根问底(1)>

前言: Redis集群是一种可靠和高性能的分布式数据库解决方案。随着互联网的迅速发展和数据规模的增长,传统的单机Redis已经无法满足大规模应用的需求。Redis集群的出现填补了这一空白,提供了更高的可扩展性和容错性。 大家都知道,Redis是一种基于内存的高性能键值存储数据库,…...

系统集成Prometheus+Grafana

根据产品需求在自己的系统中添加一个系统监控的页面&#xff0c;其中有主机信息的显示&#xff0c;也有一些业务信息的显示。调研后的方案是 主机信息通过Prometheus采集和存储&#xff0c;业务信息通过自己系统的调度任务统计后存储在Mysql中&#xff0c;使用Grafana对接Prome…...

实例驱动计算机网络

文章目录 计算机网络的层次结构应用层DNSHTTP协议HTTP请求响应过程 运输层TCP协议TCP协议面向连接实现TCP的三次握手连接TCP的四次挥手断开连接 TCP协议可靠性实现TCP的流量控制TCP的拥塞控制TCP的重传机制 UDP协议 网际层IP协议&#xff08;主机与主机&#xff09;IP地址的分类…...