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

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

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

相关文章

鸿蒙4.0开发笔记之ArkTs语言基础与基本组件结构(四)

文章声明&#xff1a;本文关于HarmonyOS系统的部分内容和描述借鉴于华为官网的“HarmonyOS开发者学堂”&#xff0c;有需要的也可以进入官网查看。<HarmonyOS第一课>ArkTS开发语言介绍 一、ArkTs语言介绍 ArkTS是鸿蒙系统&#xff08;HarmonyOS&#xff09;优选的主力应…

设计模式-创建型模式-工厂方法模式

一、什么是工厂方法模式 工厂模式又称工厂方法模式&#xff0c;是一种创建型设计模式&#xff0c;其在父类中提供一个创建对象的方法&#xff0c; 允许子类决定实例化对象的类型。工厂方法模式是目标是定义一个创建产品对象的工厂接口&#xff0c;将实际创建工作推迟到子类中。…

SHAP - 机器学习模型可解释性工具

github地址&#xff1a;shap/docs/index.rst at master shap/shap (github.com) SHAP使用文档&#xff1a;欢迎使用 SHAP 文档 — SHAP 最新文档 SHAP介绍 SHAP&#xff08;SHapley Additive exPlanations&#xff09;是一种用于解释预测结果的方法&#xff0c;它基于Shapley…

实现el-input-number数字框带单位

实现的效果展示&#xff0c;可以是前缀单位&#xff0c;也可以是后缀单位。实现的思路就是动态修改伪元素 ::before 和 ::after 的 content值 实现二次封装数字框的代码如下&#xff1a; <template><el-input-numberref"inputNumber"v-model"inputVal…

opencv-直方图

直方图是一种对图像亮度分布的统计表示&#xff0c;它显示了图像中每个灰度级别的像素数量。在OpenCV中&#xff0c;你可以使用cv2.calcHist() 函数计算直方图。 以下是一个简单的示例&#xff0c;演示如何计算和绘制图像的直方图&#xff1a; import cv2 import numpy as np …

【C++容器】优先级队列 仿函数 反向迭代器

优先级队列&#xff0c;仿函数&#xff0c;反向迭代器 优先级队列认识优先级队列模拟实现优先级队列 浅谈仿函数仿函数的大致了解仿函数的实现 反向迭代器什么是反向迭代器&#xff1f;反向迭代器的实现 结语 优先级队列 认识优先级队列 优先级队列&#xff08;priority_queue…

低成本打造便携式无线网络攻防学习环境

1.摘要 一直以来, 无线网络安全问题与大众的个人隐私息息相关, 例如: 为了节省流量, 连接到一个看似安全的免费WiFi, 在使用过程中泄露自己的各类密码信息甚至银行卡账号密码信息。随着家用智能电器的普及, 家中的各类智能设备连入家里的无线网络, 却突然失灵, 甚至无法正常连…

@Scheduled注解 定时任务讲解

用于在Java Spring框架中定时执行特定任务的注解 Scheduled&#xff0c;它能够指定方法在特定时间间隔或特定时间点执行。默认参数是cron&#xff0c;cron参数被用来定义一个Cron表达式&#xff0c;它代表了任务执行的时间规则 参数如下 Cron 这是是一种时间表达式&#xff…

【应用程序启动过程-三种加载控制器的方式-上午内容复习 Objective-C语言】

一、我们先来回忆一下,上午所有内容 1.首先呢,我们先说的是这个“应用程序启动过程”, 应用程序启动过程里面,有三方面内容 1)UIApplication对象介绍 2)AppDelegate对象介绍 3)应用程序启动过程 现在不知道大家对这个应用程序启动过程有印象吗, 2.首先,这个UIAp…

MySQL数据库时间计算的用法

今天给大家分享如何通过MySQL内置函数实现时间的转换和计算&#xff0c;在工作当中&#xff0c;测试人员经常需要查询数据库表的日期时间&#xff0c;但发现开发人员存入数据库表的形式都是时间戳形式&#xff0c;不利于测试人员查看&#xff0c;测试人员只能利用工具对时间戳进…

【 顺序表经典算法—移除元素和合并两个有序数组】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 经典算法OJ题1&#xff1a; 移除元素 解法一、逐个判断 解法二、双指针覆盖 经典算法OJ题2&#xff1a; 合并两个有序数组 OJ题分为两个类型&#xff1a; 总结 前言…

MAX/MSP SDK学习07:list传递

实现自定义Obejct&#xff0c;要求将传入的一组数据100后传出。 #include "ext.h" #include "ext_obex.h" typedef struct _listTrans {t_object ob;void* outLet;t_atom* fArr;long listNum;} t_listTrans;void* listTrans_new(t_symbol* s, long arg…

Bug等级划分

Bug是指在程序或系统中存在的错误、缺陷或异常&#xff0c;是由于编码错误、设计问题、逻辑错误或其他因素导致的。 常见的Bug分类方法 功能性Bug与软件的功能有关&#xff0c;软件无法正常工作、功能与需求不符或功能执行不正确。 用户界面Bug与软件的用户界面有关&#xff…

Unity中Shader双向反射分布函数BRDF

文章目录 前言一、渲染方程二、什么是BxDF1、BSSRDF2、BRDF3、BTDF4、BSDF 三、迪士尼原则的BRDF四、迪士尼原则的BRDF的参数五、在Unity中看一下默认Shader的这些参数六、在这里记录一下使用 Blender 和 SubstancePainter 的流程1、在Blender中导出模型为 .obj 格式2、在Subst…

Go 实现网络代理

使用 Go 语言开发网络代理服务可以通过以下步骤完成。这里&#xff0c;我们将使用 golang.org/x/net/proxy 包来创建一个简单的 SOCKS5 代理服务作为示例。 步骤 1. 安装 golang.org/x/net/proxy 包 使用以下命令安装 golang.org/x/net 包&#xff0c;该包包含 proxy 子包&am…

天软特色因子看板 (2023.11 第12期)

该因子看板跟踪天软特色因子A05006(近一月单笔流入流出金额之比(%)&#xff0c;该因子为近一个月单笔流入流出金额之比(%)均值因子&#xff0c;用以刻画在 市场日内分时成交中流入、流出成交金额的差异性特点&#xff0c;发掘市场主力资金的作用机制。 今日为该因子跟踪第12期&…

Windows平台Unity下实现camera场景推送RTMP|轻量级RTSP服务|实时录像

技术背景 我们在对接Unity平台camera场景采集的时候&#xff0c;除了常规的RTMP推送、录像外&#xff0c;还有一些开发者&#xff0c;需要能实现轻量级RTSP服务&#xff0c;对外提供个拉流的RTSP URL。 目前我们在Windows平台Unity下数据源可采集到以下部分&#xff1a; 采集…

@PostConstruct虽好,请勿乱用

1.问题说明 在日常的业务开发中&#xff0c;有时会利用PostConstruct在容器启动时执行一些任务。例如&#xff1a; PostConstruct public void init(){System.out.println("service 初始化..............."); }一般情况这没什么问题&#xff0c;但最近一个同事在做…

ui5使用echart

相关的代码已经发布到github上。 展示下相关的实现功能 1、柱状图-1 2、柱状图-2 3.折线图 4.饼状图 如何使用&#xff1a; 使用git clone项目到本地 git clone https://github.com/linhuang0405/com.joker.Zechart找到index.html。在vscode里右键选择Open with Live Serve…

BLE通用广播包

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