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

news2025/1/11 18:42:41

【论文阅读笔记】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就可以迁移到其他新任务。

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

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

相关文章

第三节-Android10.0 Binder通信原理(三)-ServiceManager篇

1、概述 在Android中,系统提供的服务被包装成一个个系统级service,这些service往往会在设备启动之时添加进Android系统,当某个应用想要调用系统某个服务的功能时,往往是向系统发出请求,调用该服务的外部接口。在上一节…

Vue批量全局处理undefined和null转为““ 空字符串

我们在处理后台返回的信息,有的时候返回的是undefined或者null,这种字符串容易引起用户的误解,所以需要我们把这些字符串处理一下。 如果每个页面都单独处理,那么页面会很冗余,并且后期如果有修改容易遗漏&#xff0c…

生成式AI与大语言模型,东软已经准备就绪

伴随着ChatGPT的火爆全球,数以百计的大语言模型也争先恐后地加入了这一战局,掀起了一场轰轰烈烈的“百模大战”。毋庸置疑的是,继方兴未艾的人工智能普及大潮之后,生成式AI与大语言模型正在全球开启新一轮生产力革新的科技浪潮。 …

PostgreSQL (Hologres) 日期生成

PostgreSQL 生成指定日期下一个月的日期 (在Hologres中,不支持递归查询) SELECTto_char(T, YYYYMMDD)::int4 AS date_int,date(T) AS date_str,date_part(year, T)::int4 AS year_int,date_part(month, T)::int4 AS month_int,date_part(da…

中职组网络安全B模块-渗透提权2

任务五:渗透提权2 任务环境说明: 仅能获取xxx的IP地址 用户名:test,密码:123456 访问服务器主机,找到主机中管理员名称,将管理员名称作为Flag值提交; Flag:doyoudoyoudo 访问服…

使用Pytorch从零开始构建DCGAN

在本文中,我们将深入研究生成建模的世界,并使用流行的 PyTorch 框架探索 DCGAN(生成对抗网络 (GAN) 的一种变体)的实现。具体来说,我们将使用 CelebA 数据集(名人面部图像的集合)来生成逼真的合…

微服务学习|初识Docker、使用Docker、自定义镜像、DockerCompose、Docker镜像仓库

初识Docker 项目部署的问题 大型项目组件较多,运行环境也较为复杂,部署时会碰到一些问题 依赖关系复杂,容易出现兼容性问题 开发、测试、生产环境有差异 Docker如何解决依赖的兼容问题的? 将应用的Libs (函数库)、Deps (依赖)配置与应用…

c语言:用迭代法解决递归问题

题目&#xff1a; 解释&#xff1a;题目的意思就是用迭代法的空间和时间复杂的太高了&#xff0c;需要我们减小空间与时间的复杂度&#xff0c;我就想到了迭代法&#xff0c;思路和代码如下&#xff1a; #include <stdio.h> //这里是递归法转迭代法 int main() {int x,i…

Spark---转换算子、行动算子、持久化算子

一、转换算子和行动算子 1、Transformations转换算子 1&#xff09;、概念 Transformations类算子是一类算子&#xff08;函数&#xff09;叫做转换算子&#xff0c;如map、flatMap、reduceByKey等。Transformations算子是延迟执行&#xff0c;也叫懒加载执行。 2)、Transf…

Leetcode——121 买卖股票的最佳时机

(超时。。。。。。&#xff09;除了暴力法我是真的。。。。。。 class Solution {public int maxProfit(int[] prices) {int len prices.length;int max0;for(int i0;i<len-1;i){for(int ji1;j<len;j){int income prices[j] - prices[i];if(income>max){maxincome;…

路由的控制与转发原理

场景1&#xff1a;路由器收到数据包后&#xff0c;会根据数据包的目标IP地址&#xff0c;计算出目标网段&#xff0c;再确定终端设备的具体位置。这个过程中&#xff0c;还需要计算出接口&#xff0c;或数据包下一跳的地址。最终会生成一条路由&#xff0c;即路径&#xff0c;存…

外部中断为什么会误触发?

今天在写外部中断的程序的时候&#xff0c;发现中断特别容易受到干扰&#xff0c;我把手放在对应的中断引脚上&#xff0c;中断就一直触发&#xff0c;没有停过。经过一天的学习&#xff0c;找到了几个解决方法&#xff0c;所以写了这篇笔记。如果你的中断也时不时会误触发&…

基于JavaWeb+SSM+Vue教学辅助微信小程序系统的设计和实现

基于JavaWebSSMVue教学辅助微信小程序系统的设计和实现 源码获取入口前言主要技术系统设计功能截图Lun文目录订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 前言 1.1 概述 随着信息时代的快速发展&#xff0c;互联网的优势和普及&#xff0c;人们生活…

二、防火墙-安全策略

学习防火墙之前&#xff0c;对路由交换应要有一定的认识 1、安全策略基本概念2、匹配顺序3、缺省包过滤4、安全策略发展史4.1.基于ACL包过滤4.2.融合UTM安全策略4.3.一体化安全策略 5、Local区域安全策略5.1.针对OSPF协议配置Local区域安全策略5.2.其他协议 6、ASPF6.1.帮助FTP…

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;发送端在没…

文本分析:NLP 魔法!

一、说明 这是一个关于 NLP 和分类项目的博客。NLP 是自然语言处理&#xff0c;目前需求量很大。让我们了解如何利用 NLP。我们将通过编码来理解流程和概念。我将在本博客中介绍 BagOfWords 和 n-gram 以及朴素贝叶斯分类模型。这个博客的独特之处&#xff08;这使得它很长&…

竞赛选题 车道线检测(自动驾驶 机器视觉)

0 前言 无人驾驶技术是机器学习为主的一门前沿领域&#xff0c;在无人驾驶领域中机器学习的各种算法随处可见&#xff0c;今天学长给大家介绍无人驾驶技术中的车道线检测。 1 车道线检测 在无人驾驶领域每一个任务都是相当复杂&#xff0c;看上去无从下手。那么面对这样极其…

Oracle 的 Java SE、OpenJDK、Database 链接

1 访问主站 Oracle | Cloud Applications and Cloud Platform 2 开发者 2.1 OpenJDK (这里的不用登录&#xff0c;就可以下载) JDK Builds from Oracle 2.2 JavaSE (需要登录&#xff0c;才可以下载) Java Downloads | Oracle 2.3 DataBase (MySQL为例) MySQL :: MySQL Dow…

排序算法--快速排序

实现逻辑 ① 从数列中挑出一个元素&#xff0c;称为 “基准”&#xff08;pivot&#xff09;&#xff0c; ② 重新排序数列&#xff0c;所有元素比基准值小的摆放在基准前面&#xff0c;所有元素比基准值大的摆在基准的后面&#xff08;相同的数可以到任一边&#xff09;。在这…

DataFunSummit:2023年OLAP引擎架构峰会-核心PPT资料下载

一、峰会简介 OLAP技术是当前大数据领域的热门方向&#xff0c;该领域在各个行业都有广泛的使用场景&#xff0c;对OLAP引擎的功能有丰富多样的需求。同时&#xff0c;在性能、稳定性和成本方面&#xff0c;也有诸多挑战。目前&#xff0c;OLAP技术没有形成统一的事实标准&…