【论文阅读笔记】Emu Edit: Precise Image Editing via Recognition and Generation Tasks

【论文阅读笔记】Emu Edit: Precise Image Editing via Recognition and Generation Tasks

  • 论文阅读笔记
    • 论文信息
    • 摘要
      • 背景
      • 方法
      • 结果
      • 额外
    • 关键发现
    • 作者动机
    • 相关工作
        • 1. 使用输入和编辑图像的对齐和详细描述来执行特定的编辑
        • 2. 另一类图像编辑模型采用输入掩码作为附加输入 。
        • 3. 为了提供更直观和用户友好的界面,并显着增强了人类易用性
    • 方法/模型
      • 任务分类
      • 指令生成
      • 图像对生成
        • Grounded Precise Editing
          • Region-Based Editing Tasks
          • Free-Form Editing Tasks
          • Vision tasks
        • 数据过滤
      • Method
        • 网络架构
        • 学习任务嵌入
        • 任务反转
        • Sequential Edit Thresholding序列修改阈值
    • 实验设计
      • 指标
      • 评价
      • baseline
    • 消融研究
    • 讨论
      • 展望
    • 启发
    • 训练代价
    • 总结

论文阅读笔记

  1. Emu edit是一篇图像编辑Image Editing的文章,和instruct pix2pix类似,选择了合成数据作为训练数据,不是zero-shot任务,并进一步将多种任务都整合为生成任务,从而提高模型的编辑能力。本篇文章的效果应该目前最好的,在local和global编辑甚至其他代理任务(分割、边缘检测等)上都取得了比较惊艳的效果。
  2. 个人比较关注合成数据的制作流程,能够很好的解决现有真实数据数量和泛化能力受限的问题。
  3. 文章的很多细节在附录,值得好好研究。
  4. 数据集制造的工程量太大了!!!

论文信息

  • 论文标题:Emu Edit: Precise Image Editing via Recognition and Generation Tasks
  • 作者:GenAI. Meta
  • 发表年份:2023
  • 期刊/会议:暂无
  • 项目主页(更多可视化结果):https://emu-edit.metademolab.com/
  • 数据集(验证):https://huggingface.co/datasets/facebook/emu_edit_test_set_generations
  • code:未发布

在这里插入图片描述

摘要

背景

基于指令的图像编辑需求很大,但是在编辑准确性上还受限。

方法

提出了一种多任务图像编辑模型Emu Edit,将多种任务(基于区域的编辑、自由形式的编辑和计算机视觉任务)表述为生成任务,并学习任务嵌入(有点类似unicontrolnet指示不同任务的编码)以指导生成过程走向正确的编辑类型。

结果

我们表明 Emu Edit 可以推广到新任务,例如图像修复、超分辨率和编辑任务的组合,并在图像编辑任务中取得了最先进水平

额外

发布了一个新的具有挑战性和通用的基准,其中包括7个不同的图像编辑任务。

关键发现

  1. 多任务学习,为每个任务开发不同的数据处理pipeline,允许搜集更为多样化和精确的训练集。
  2. 在所有任务上训练单个模型比在每个任务上独立训练专家模型产生更好的结果。
  3. 检测、分割等计算机视觉任务显着提高了图像编辑性能。(ps. 可以在其他任务上进行尝试
  4. 证明了学习到的任务嵌入显着提高了我们的模型从自由形式指令中准确推断适当的编辑类型并执行正确的编辑的能力
  5. 任务嵌入可以在训练好的模型上面经过few-shot训练进行更新,如超分,轮廓检测

作者动机

InstructPix2Pix这样的基于指令的图像编辑模型旨在处理任何给定的指令,但它们通常难以准确解释和执行此类指令。此外,它们的泛化是有限的,往往缺乏对与他们接受过培训的任务的轻微偏差。

为了解决这些差距,引入了 Emu Edit,第一个在大量多样的任务上训练的图像编辑模型,包括图像编辑和计算机视觉任务。
Emu Edit 在遵守编辑指令和保留原始图像的视觉保真度方面都提供了实质性的改进。
两个基准上的自动度量和人类主观评价表示Emu Edit在基于指令的图像编辑中取得了最先进的结果。

相关工作

(很好地总结了一些有影响力的工作)

1. 使用输入和编辑图像的对齐和详细描述来执行特定的编辑
  • Prompt2prompt(P2P)将输入标题注意力图注入目标标题注意力图。
  • Null-Text Inversion 使用零文本嵌入反转输入图像以支持使用p2p进行真实图像的编辑。
  • Plug-and-Play(PNP)除了注意图外,还注入空间特征,并在全局编辑上获得了更好的性能。
  • Imagic 微调扩散模型以支持复杂的文本指令。
  • EDICT提出了一种基于两个噪声向量的图像反演,以实现更好的图像重建和文本忠实度。
2. 另一类图像编辑模型采用输入掩码作为附加输入 。
  • blended diffusion通过在未屏蔽区域混合输入图像来修改扩散步骤。
  • Imagen Editor 和 SmartBrush 微调文本到图像模型以输入图像和掩码为条件。

虽然上面详述的基于文本的图像编辑方法使人类能够编辑图像,但它们经常表现出不一致的性能,并且需要多个输入,例如输入图像和目标图像的对齐和详细描述,或者有时是输入掩码。

3. 为了提供更直观和用户友好的界面,并显着增强了人类易用性
  • InstructPix2Pix 引入了一个可指示的图像编辑模型。他们通过利用 GPT-3和 Prompt-to-Prompt开发了这个模型,以生成用于基于指令的图像编辑的大型合成数据集,并使用数据集来训练可指示的图像编辑模型。
  • MagicBrush通过要求人类使用在线图像编辑工具开发了一个手动注释的指令引导图像编辑数据集。在这个数据集上微调 InstructPix2Pix 可以提高图像编辑能力。

最先进的图像编辑模型仍然难以准确解释和精确地执行编辑指令。

Emu Edit与仅关注图像编辑(pix2pix, magicbrush)的先前工作不同,训练模型执行各种任务并学习非常多样化能力。训练过程和数据集的质量和多功能性,以及改进的多任务学习架构,使其能够在性能上取得很大的飞跃,并区别于该领域的先前工作。

方法/模型

  1. 训练一个健壮和准确的图像编辑模型需要高度多样化的输入图像数据集、编辑指令和输出编辑的图像。
  2. 构建了一个包含 16 个不同的任务和 10 亿个示例的新数据集。数据集中的每个示例 (cI , cT , x, i) 都包含一个输入图像 cI 、文本指令 cT 、目标图像 x 和任务索引 i(16个不同任务 )。

任务分类

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

指令生成

  1. 通过Llama2利用上下文学习为每个任务创建一个特定于任务的代理。具体来说,我们向LLM提供了一个任务描述、一些特定于任务的范例和一个真实的图像标题。为了增加多样性,我们对样本进行采样并随机化它们的顺序。给定这样的输入,我们期望LLM输出(1)编辑指令,(2)理想输出图像的输出标题,(3)应该更新或添加到原始图像中

通过以下方式提供 LLM:(1)描述输入和输出格式的系统消息,(2)介绍消息,其中我们概述了输出中每个键的问题和目标,以及 (3) 与 LLM 的对话历史上下文包含可能输出的示例。然后,我们用一个新的输入标题提示LLM,并要求它提供一个新的指令。为了鼓励 LLM 生成的指令中更多的方差和随机性,我们对历史上下文执行以下:(1)示例之间的混洗,(2)随机抽样 60% 的示例,以及(3)从一组单词中随机更改示例中的动词。

图像对生成阶段使用图像标题,以及指令生成阶段生成的LLM对应的输出标题“原始对象”和“编辑对象

图像对生成

  1. 目标是生成符合编辑指令的输入和编辑图像对,并保留应该保持完整的图像元素
  2. 为应对不同任务所需的数据集,为每个任务开发了一种新的生成技术
Grounded Precise Editing

P2P 依赖于输入图像标题和编辑图像标题中的词对词对齐来构建掩码修改注意力图,但词对词的约束并不强,无法保留结构和身份。Emu edit提出了一种掩码提取方法,该方法应用于编辑过程之前。
(i)通过 LLM 从编辑指令中识别编辑区域并在图像生成之前创建相应的掩码
基于区域的编辑包括所有在有限区域内对图像进行更改的编辑指令,其余图像保持不变。为了在保留其余细节的同时调整特定对象或位置,我们在编辑过程中利用了局部区域的掩码。我们利用DINO来检测需要屏蔽的区域,使用LLM中提取出的Object字段对应的“原始对象”和“编辑对象”字段。
使用基于掩码的注意力控制来生成编辑图像时,它通常用相似的对象类型替换对象,而不是删除它。例如,当屏蔽狗周围的区域时,我们将编辑限制在该特定区域,从而产生狗的新变体。我们通过创建三种不同类型的掩码来解决这个问题。第一个采用由DINO和SAM创建的原始精确掩码。第二个涉及通过膨胀将掩码扩展到添加的对象之外,然后使用高斯模糊对其进行细化。最后,第三种方法使用对象周围的边界框(由 DINO 创建),从而消除了特定形状的约束。我们生成多个图像,每个图像都有不同的掩码,然后过滤。
在某些情况下,LLM 生成的“原始对象”和“编辑对象”包含所有格词(例如,“狗的尾巴”)。我们观察到,在许多情况下,DINO 在这些情况下很难检测到对象。为此,我们对LLM使用额外的提示来识别没有拥有的对象。

(ii)在编辑过程中集成这些掩码,以确保编辑区域与原始图像无缝融合。

基于掩码的注意力控制:保持非编辑区域的噪声来自原图,编辑区域的噪声图像注意力影响之后的。遵循 P2P 并在所有标记上注入自注意力层。交叉注意力层注入输入和输出字幕之间的公共标记

此外:面对不同的编辑挑战,例如添加或删除对象,需要量身定制的解决方案。(见附录的7.2.3-5)

Region-Based Editing Tasks

1.Local/Texture
给定输入标题,我们首先生成输入图像。然后,我们利用“原始对象”(如第 7.2 节所述)来提取局部掩码(使用第 7.2.2 节)。最后,我们使用获得的掩码应用基于掩码的注意力控制来生成编辑的图像。我们重复这个过程 10 次迭代,在每次迭代中,我们从 [4, 8] 中采样引导尺度,从 [0.3, 0.9] 中采样 Nc 和 Ns(执行交叉注意力和自注意力的步骤N),并从 [0.02, 0.2] (在这个阶段执行混合操作)混合。

2.添加
提取“编辑对象”(在这种情况下添加的对象)的掩码是不可能的,因为输入图像中不存在对象。
为了克服这一挑战,我们解决这个问题如下: 1. 我们使用输出标题生成输出图像 y。请注意,图像 y 包含“编辑对象”。2.提取y中“编辑对象”的掩码m。3.我们应用基于掩码的注意力控制使用输入标题、图像 y 和掩码 m 生成输入图像 x 这种方法的主要问题是,在某些情况下,我们生成对象的不同版本,而不是消除它

3.删除
生成数据的过程类似于 Add 任务的过程。唯一的区别是我们首先生成图像 x(使用输入标题),然后提取对象的掩码 m 以去除,最后使用输出标题、图像 x 和掩码 m 生成图像 y。

4.背景
给定一个输入图像、输入标题和编辑的对象(在这种情况下,替代背景),我们首先提取背景掩码。为了消除轮廓中的伪影,我们应用了扩展背景掩码的最小滤波器,然后使用高斯滤波对其进行平滑处理。接下来,我们将图像和生成的掩码作为输入提供给修复模型,该模型创建一个新的背景。最后,我们将输入图像和编辑后的图像混合在掩码区域。我们生成了 10 张编辑图像,具有不同的噪声和引导尺度,并根据 CLIP 指标选择最佳图像。

Free-Form Editing Tasks

4.全局

全局任务包括不限于特定区域的编辑指令。因此,我们使用带有空白掩码的基于掩码的注意力控制生成图像对。混合是从 [0.1, 0.2] 中采样的,以鼓励更好的图像忠实度。我们从 [0.4, 0.9] 中采样 Nc 和 Ns。
5.风格

我们使用即插即用(PNP)来生成风格化的编辑图像。该任务的目标是在保留图像结构的同时,根据编辑指令改变图像样式。我们使用DDIM反演将PNP应用于真实的输入图像。对于每个样本,我们生成 10 个编辑图像,每个图像都具有以下采样参数:从 [6.5, 110] 中采样的引导尺度,Ns 从 [0.5, 1.0] 中采样,并且要共享的空间特征部分设置为 0.8。

6.文本编辑
文本编辑任务包括向图像添加文本,从图像中删除文本,并用另一个文本替换一个文本。此外,我们允许用户选择添加文本的字体和颜色。我们使用 OCR [7] 生成输入图像 x 中找到的文本的掩码 m。我们利用掩码 m 来修复图像,表示新图像 y。为了添加文本,我们使用 y 作为输入图像,x 作为编辑图像。为了删除文本和替换文本,我们使用反向。在替换文本时,我们将图像 y 中的内嵌区域与特定字体和颜色的文本叠加。

Vision tasks

7.检测/分割
给定一个输入图像,我们使用DINO检测“编辑对象”。为了将检测形式化为生成任务,我们通过绘制检测到的边界框来创建一个新的图像 y。对于分割,我们绘制检测到的对象像素。

8.颜色
我们将颜色任务定义为对图像整体颜色的修改。我们通过应用以下过滤器生成样本:(1)颜色过滤器——随机改变图像的亮度、对比度、饱和度和色调,(2)模糊——应用随机大小的高斯核,以及(3)锐化和散焦。
9.Image Translation
涉及从条件图像到目标图像的双向映射。例如,草图到图像和图像到草图。我们遵循ControlNet来生成深度图、分割图、人体姿势、法线图和草图。

在这里插入图片描述

数据过滤

(i)使用任务预测器用应该属于另一个任务的指令重新分配样本,(ii)应用 CLIP 过滤指标
(iii)采用基于输入图像深度图和编辑图像之间的 L1 距离的结构保留过滤
(iv)应用图像检测器来验证元素的存在(在 Add 任务中),根据指令中指定的对象,元素的缺失(在 Remove 任务中)或替换(在 Local 任务中)。
此过程过滤掉 70% 的数据,从而产生 1000 万个样本的最终数据集。

Method

  • 为了为模型提供将生成过程引导到正确任务的强条件,建议为每个任务学习一个唯一的任务嵌入,我们将其集成到模型中。
  • 在训练期间,任务嵌入与模型权重一起学习。训练后,Emu Edit 能够通过小样本学习新任务嵌入来适应新任务,其余模型被冻结。
  • 最后,介绍了一种在多轮编辑场景中保持生成图像质量的方法。
网络架构
  1. 基于Emu扩散模型
  2. 为了将Emu转换为基于指令的图像编辑模型,我们将其限制在待修改的cI和指令cT上(类似pix2pix,调整输入Uner的输入通道数,新的权重被初始化为0,使用a zero signalto-noise ratio (SNR)技术 min ⁡ θ E y , ϵ , t [ ∥ ϵ − ϵ θ ( z t , t , E ( c I ) , c T ) ∥ 2 2 ] \min _\theta \mathbb{E}_{y, \epsilon, t}\left[\left\|\epsilon-\epsilon_\theta\left(z_t, t, E\left(c_I\right), c_T\right)\right\|_2^2\right] θminEy,ϵ,t[ϵϵθ(zt,t,E(cI),cT)22]
学习任务嵌入

在训练期间,给定我们数据集中的样本,我们使用任务索引 i 从嵌入表中获取任务的嵌入向量 vi,并将其与模型权重联合优化。我们通过将任务嵌入通过 U-Net、εθ 的附加条件引入来做到这一点。具体来说,我们通过交叉注意交互将任务嵌入集成到 U-Net 中,并将其添加到时间步嵌入中。优化问题更新为
min ⁡ θ E y , ϵ , t [ ∥ ϵ − ϵ θ ( z t , t , E ( c I ) , c T , v i ) ∥ 2 2 ] \min _\theta \mathbb{E}_{y, \epsilon, t}\left[\left\|\epsilon-\epsilon_\theta\left(z_t, t, E\left(c_I\right), c_T, v_i\right)\right\|_2^2\right] θminEy,ϵ,t[ϵϵθ(zt,t,E(cI),cT,vi)22]
(1)当需要纹理编辑时,没有任务条件的模型可能会执行全局编辑
(2)当需要全局编辑时,它可能会选择分割
(3)在本地编辑更适合的情况下实现样式编辑
展示任务嵌入的重要性,没有任务嵌入执行的编辑可能不是想要的

任务反转

给定新任务的几个示例,我们学习了一个新的任务嵌入 vnew。冻结模型权重,并且仅通过任务嵌入将其适应任务。(实验证明不学习也能泛化新任务)
min ⁡ θ E y , ϵ , t [ ∥ ϵ − ϵ θ ( z t , t , E ( c I ) , c T , v n e w ) ∥ 2 2 ] \min _\theta \mathbb{E}_{y, \epsilon, t}\left[\left\|\epsilon-\epsilon_\theta\left(z_t, t, E\left(c_I\right), c_T, v_{new}\right)\right\|_2^2\right] θminEy,ϵ,t[ϵϵθ(zt,t,E(cI),cT,vnew)22]

Sequential Edit Thresholding序列修改阈值

多次对同一图像进行序列化编辑会由于累计error产生伪影,Emu Edit设置了一个像素编辑阈值,超过一定程度才使用上次编辑结果,否则还使用上次的输入图像。文章中的fig12展示了该项更详细的消融实验。
在这里插入图片描述
在这里插入图片描述

实验设计

  1. 评估方法在基于指令的图像编辑任务上的性能
  2. 一项全面的消融研究,以评估不同贡献的有效性(消除了计算机视觉任务对图像编辑任务模型性能的贡献、学习任务嵌入的重要性以及多任务学习对基于指令的图像编辑的影响)
  3. 数据生成管道消融实验
  4. 学习新任务的能力

指标

(i) CLIP文本图像方向相似度(CLIPdir) -测量字幕变化与图像变化之间的一致性
(ii) CLIP图像相似度(CLIPimg) -测量编辑图像和输入图像之间的变化
(iii) CLIP输出相似度(CLIPout) -测量编辑后的图像与输出标题的相似度
(iv)输入图像和编辑图像之间的L1像素距离
(v) DINO输入和编辑图像的DINO嵌入之间的相似性。
(vi)人类评估者评估文本对齐和图像忠实度

评价

MagicBrush 测试集和Emu Edit 基准测试的结果,认为pix2pix的评价基准并不友好

  • MagicBrush使用来自MS-COCO基准和注释器定义的指令的不同真实输入图像集。在数据收集期间,注释者旨在使用DALLE-2 图像编辑平台来生成编辑的图像,基准偏向于 DALLE-2 编辑器可以成功遵循的编辑指令,这可能会损害其多样性和复杂性。
  • Emu 编辑基准。收集偏差降低且多样性较高的数据集,首先定义了七种不同类别的潜在图像编辑操作:背景更改(背景)、全面的图像更改(全局)、样式更改(样式)、对象删除(Remove)、对象添加(Add)、本地化修改(Local)和颜色/纹理更改(Texture)。利用MagicBrush基准的不同输入图像集,对于每个编辑操作,人工设计相关、创造性和具有挑战性的指令。人工过滤具有不相关指令的示例。最后,为了支持对需要输入和输出标题的方法的评估,我们还收集了输入标题和输出标题。这样做时,我们要求注释者确保字幕捕获图像中的两个重要元素,以及应该根据指令更改的元素。已公开发布以支持更好地评估基于指令的图像编辑模型。

baseline

InstructPix2Pix
MagicBrush
PNP
P2P 的 Null-Text 反演修改

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

消融研究

  1. 视觉任务的重要性
    (i)检测和分割任务可以增强局部编辑能力(ii)图像到图像翻译任务可以增强自由模式下的编辑

  2. 任务嵌入的重要性,任务嵌入有助于明确编辑目标
    在这里插入图片描述

  3. 多任务与专家模型比较,几乎全面超越 在这里插入图片描述

  4. 消融了参与多任务训练方案的任务数量,任务数越多,效果提升越好
    在这里插入图片描述

  5. 新任务的few-shot fintune,100个样本下的finetune足以比肩专家模型

讨论

展望

更好地和LLM相结合,这种增强对于编辑任务特别有用,这些任务需要从输入图像中进行更复杂的推理,例如计数对象或执行复杂的、高度详细的任务。

启发

  1. 多任务学习有助于模型更好地理解自然语言指令以执行更精准的编辑
  2. 它能够以最小的示例推广到图像修复和超分辨率等新任务,进一步证明了其多功能性和高级理解。

训练代价

使用Emu的缩小版本,该版本以 CLIP ViT-L [18] 和 T5-XL [19] 为条件,并以 512 × 512 的分辨率生成图像。通过连接到pix2pix之后的输入通道来调整它以获得图像输入。通过交叉注意和时间步嵌入来调节文本和任务嵌入。对于训练,使用批量大小为 512 的 Adam 优化器。我们使用 2e-5 的学习率为,余弦衰减时间表和 2,000 次迭代的线性预热。训练跨越 48,000 步。

总结

总的来说,证明了多任务学习对于图像编辑有着正向的提升,能够更好的理解文本指令。同时更类似于一个backbone,few-shot的finetuning就可以迁移到其他新任务。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RK3588平台开发系列讲解(嵌入式AI篇)RKNPU详解

文章目录 一、CPU、GPU、FPGA和NPU介绍二、CPU、GPU、FPGA和NPU区别三、NPU 应用四、RKNPU沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 本篇将给大家介绍什么是RKNPU。 一、CPU、GPU、FPGA和NPU介绍 二、CPU、GPU、FPGA和NPU区别 若考虑成本、功耗、计算能力以及体…

[SIGGRAPH-23] 3D Gaussian Splatting for Real-Time Radiance Field Rendering

pdf | proj | code 本文提出一种新的3D数据表达形式3D Gaussians。每个Gaussian由以下参数组成:中心点位置、协方差矩阵、可见性、颜色。通过世界坐标系到相机坐标系,再到图像坐标系的仿射关系,可将3D Gaussian映射到相机坐标系,通…

cocos2dx ​​Animate3D(二)

Twirl 扭曲旋转特效 // 持续时间(时间过后不会回到原来的样子) // 整个屏幕被分成几行几列 // 扭曲中心位置 // 扭曲的数量 // 振幅 static Twirl* create(float duration, const Size& gridSize, const Vec2& position, unsigned int twirls, float amplitude)…

Leetcode:622. 设计循环队列 题解【具详细】

目录 一、题目: 二、思路详解: 1.循环队列的存储定义 2.循环队列的创建 3.循环队列的判空与判断情况 (1) 循环队列的判空: (2) 循环队列的判满 4.循环队列元素的插入 5.循环队列元素的删除 6.获取队头元素 7.获取队尾元素 8.循环队列释放 三…

frp内网穿透配置以及相关端口、过程解释

介绍 假设现有外网笔记本、云服务器、内网工作站三台设备,希望使用外网笔记本通过云服务器转发,访问内网工作站;这里使用frp进行内网穿透。 云服务器端配置 登录腾讯轻量型云服务器控制台,开放转发端口、bind_port以及deshboad…

CSDN等级权益概览

文章目录 一、[权益概览](https://blog.csdn.net/SoftwareTeacher/article/details/114499372)二、权益详情(更新中...)2.1、等级权益2.2、原创保护2.3、推广管理2.4、博客皮肤 一、权益概览 级别对应分数解释权益未定级0这类用户没有做任何贡献。或者曾…

EMG肌肉信号处理合集 (一)

本文归纳了常见的肌肉信号预处理流程,方便EMG信号的后续分析。使用pyemgpipeline库 来进行信号的处理。文中使用了 UC Irvine 数据库的下肢数据。 目录 1 使用wrappers 定义数据类,来进行后续的操作 2 肌电信号DC偏置去除 3 带通滤波器处理 4 对肌电…

Windows安装Hadoop运行环境

1、下载Hadoop 2、解压Hadoop tar zxvf hadoop-3.1.1.tar.gz3、设置Hadoop环境变量 3.1.1、系统环境变量 # HADOOP_HOME D:\software\hadoop-3.1.13.1.2、Path 环境变量 %HADOOP_HOME%\bin %HADOOP_HOME%\sbin3.1.3、修改Hadoop文件JAVA_HOME 注 : 路径中不要出现空格 ,…

原理Redis-SkipList

SkipList ZipList和QuickList的共同特点是节省内存。在遍历元素时,只能从头到尾或从尾到头,所以在查找头尾元素性能还是不错的,但是中间元素查询的性能就会差。 **SkipList(跳表)**首先是链表,但与传统链表…

阿里云99元服务器ECS经济型e实例性能如何?测评来了

阿里云服务器优惠99元一年,配置为云服务器ECS经济型e实例,2核2G配置、3M固定带宽和40G ESSD Entry系统盘,CPU采用Intel Xeon Platinum架构处理器,2.5 GHz主频,3M带宽下载速度384KB/秒,上传速度1028KB/秒&am…

链表OJ--上

文章目录 前言一、反转链表二、移除链表元素三、链表中倒数第K个结点四、相交链表五、链表的中间结点 前言 一、反转链表 力扣206:反转链表- - -点击此处传送 思路图: 方法一:改变指向 方法二: 代码: //方法一 /…

BLE通用广播包

文章目录 1、蓝牙广播数据格式2、扫描响应数据 1、蓝牙广播数据格式 蓝牙广播包的最大长度是37个字节,其中设备地址占用了6个字节,只有31个字节是可用的。这31个可用的字节又按照一定的格式来组织,被分割为n个AD Structure。如下图所示&…

【11月比赛合集】48场可报名的数据挖掘大奖赛,任君挑选!

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…)比赛。本账号会推送最新的比赛消息,欢迎关注! 以下信息仅供参考,以比赛官网为准 目录 Kaggle(9场比赛)阿里天池(…

Java计算时间差,距结束还有几天几小时几分钟

文章目录 1、写法2、备份3、LocalDate、LocalDateTime、Date、String互转 1、写法 //静态方法,传入年月日时分秒 LocalDateTime startTime LocalDateTime.of(2023, 11, 22, 15, 09, 59); LocalDateTime endTime LocalDateTime.of(2023, 11, 30, 0, 0, 0); //计算…

华清远见嵌入式学习——网络编程——作业4

作业要求&#xff1a;①使用IO多路复用中的select函数实现TCP并发服务器客户端 ②使用IO多路复用中的poll函数实现TCP并发服务器的服务器端 一、 代码 #include <myhead.h>#define SERPORT 8888 //服务器端口号 #define SERIP "192.168.114.113"…

PCIE链路训练-状态跳转1

A&#xff1a;12ms超时&#xff0c;或者再任何lane上检测到Electrical Idle Exit&#xff1b; B&#xff1a; 1.发送“receiver detection”之后没有一个lane的接收逻辑被rx检测到 2.不满足条件c&#xff0c;比如两次detection出现差别&#xff1b; C&#xff1a;发送端在没…

数据分析基础之《matplotlib(1)—介绍》

一、什么是matplotlib 1、专门用于开发2D图表&#xff08;包括3D图表&#xff09; 2、使用起来及其简单 3、以渐进、交互方式实现数据可视化 4、matplotlib mat&#xff1a;matrix&#xff08;矩阵&#xff09; plot&#xff1a;画图 lib&#xff1a;库 二、为什么要学习m…

万界星空科技SMT行业生产管理MES系统解决方案

一、SMT行业特点&#xff1a; SMT&#xff08;Surface Mounted Technology&#xff09;作为电子组装行业里首先的技术和工艺&#xff0c;选择合适的MES解决方案来保障SMT生产的成功至关重要。 电子行业涉及的范围非常广&#xff0c;包含了汽车、电脑、电视、手机等产品上&…

SPASS-ARIMA模型

基本概念 在预测中,对于平稳的时间序列,可用自回归移动平均(AutoRegres- sive Moving Average, ARMA)模型及特殊情况的自回归(AutoRegressive, AR)模型、移动平均(Moving Average, MA)模型等来拟合,预测该时间序列的未来值,但在实际的经济预测中,随机数据序列往往…

【uni-app】uniapp中弹出输入框的示例

uni.showModal({title: 请输入企业名称,content: ,editable: true, //是否显示输入框placeholderText: 请输入企业名称, //输入框提示内容confirmText: 确认,cancelText: 取消,success: (res) > {if (res.confirm) {this.checkDesc.name res.content;// console.log(输入的…