图像修复和编辑大一统 | 腾讯北大等联合提出BrushEdit:BrushNet进阶版来了
文章链接:https://arxiv.org/pdf/2412.10316
项目链接:https://liyaowei-stu.github.io/project/BrushEdit
亮点直击
提出了BrushEdit,这是先前BrushNet模型的高级迭代版本。BrushEdit通过开创基于修复(inpainting)的图像编辑方法,扩展了可控图像生成的能力。该统一模型支持指令引导的图像编辑和修复,提供了用户友好的、自由形式的、多轮交互编辑体验。
通过集成现有的预训练多模态大语言模型和视觉理解模型,BrushEdit显著提高了语言理解能力和可控图像生成能力,而无需额外的训练过程。
将BrushNet扩展为一个通用的图像修复框架,能够适应任意形状的mask。这消除了为不同类型的mask配置使用单独模型的需求,并增强了其对现实世界用户mask的适应性。
总结速览
解决的问题
当前基于扩散模型的图像编辑方法存在两大问题:
-
基于反演(inversion)的方法在进行大幅度修改(如添加或移除物体)时效果较差,原因在于反演噪声的结构性限制了编辑的灵活性。
-
基于指令(instruction)的方法通常采用黑箱操作,限制了用户直接指定编辑区域和强度的能力。
提出的方案
提出了一种新的图像编辑范式 BrushEdit,基于图像修复(inpainting)和指令引导,结合多模态大语言模型(MLLMs)和双分支图像修复模型,构建了一个代理协作框架,实现:
-
编辑类别分类。
-
主体对象识别。
-
mask区域获取。
-
编辑区域的修复与生成。
应用的技术
-
多模态大语言模型(MLLMs)用于解析用户自由形式的编辑指令并指导编辑流程。
-
双分支图像修复模型,用于在mask区域内生成符合用户指令的编辑内容。
-
代理协作框架,通过分类、识别、mask生成和修复的多步流程协同完成图像编辑。
达到的效果
通过大量实验验证,BrushEdit 框架能够高效结合 MLLMs 和图像修复模型,在七个关键指标上实现性能优越,包括:
-
mask区域的精准性保持。
-
编辑效果的连贯性和自然性。
-
更高的用户交互自由度与操作便捷性。
方法
BrushEdit的概述如下图2所示。框架通过代理协作,将MLLM与双分支图像修复模型集成在一起,从而实现自由形式的、多轮交互的指令编辑。具体而言,一个预训练的MLLM作为编辑指导者(Editing Instructor),解析用户的指令以识别编辑类型、定位目标对象、获取编辑区域的检测结果并生成编辑后的图像文本描述。在此信息的引导下,修复模型作为编辑指挥者(Editing Conductor),根据目标文本说明填充被遮掩的区域。这个迭代过程允许用户在任何阶段修改或优化中间控制输入,支持灵活和交互式的基于指令的编辑。
编辑指导者
在BrushEdit中,我们使用MLLM作为编辑指导者来解析用户的自由形式编辑指令,将其分类为预定义类型(添加、删除、局部编辑、背景编辑),识别目标对象,并利用预训练的检测模型找到相关的编辑mask。最后,生成编辑后的图像说明。在下一阶段,这些信息将被打包并发送到编辑系统,以图像修复方法完成任务。
正式过程如下:给定编辑指令和源图像,我们首先使用预训练的MLLM识别用户的编辑类型和相应的目标对象。然后,MLLM调用预训练的检测模型,基于搜索目标对象mask 。获得mask后,MLLM将、和结合起来生成最终的编辑图像说明。源图像、目标mask和说明被传递到下一阶段,编辑指挥者,进行基于图像修复的编辑。
编辑指挥者
编辑指挥者基于之前的BrushNet,采用混合微调策略,使用随机mask和分割mask相结合。这种方法使修复模型能够处理多种mask基础的修复任务,而不受mask类型的限制,达到相当或更优的性能。具体而言,通过额外的控制分支将mask图像特征注入到预训练的扩散网络(例如Stable Diffusion 1.5)中。这些特征包括噪声隐空间,以增强语义一致性,通过VAE提取的mask图像隐空间,以引导前景提示和背景之间的语义一致性,以及通过立方插值下采样的mask,用于明确指示前景填充区域的位置和边界。
为了保持mask图像特征,BrushEdit使用了预训练扩散模型的副本,去除了所有注意力层。预训练的卷积权重作为提取mask图像特征的强大先验,而排除跨注意力层确保该分支专注于纯背景信息。BrushEdit的特征逐层集成到冻结的扩散模型中,实现分层、密集的每像素控制。根据ControlNet,使用零卷积层将冻结模型与可训练的BrushEdit连接,减轻早期训练阶段的噪声。特征插入操作定义为公式5。
其中,表示网络中第层的特征,其中,表示层的总数。相同的符号也适用于。
网络处理连接的噪声隐空间、mask图像隐空间和下采样的mask ,其中连接用表示。表示零卷积操作,是保留尺度,调节BrushEdit对预训练扩散模型的影响。
先前的研究强调,在隐空间融合过程中,下采样可能引入不准确性,且VAE编码解码过程具有固有的局限性,影响图像的完整重建。为了确保未遮掩区域的一致重建,先前的方法探索了多种策略。一些方法[29],[31]依赖于复制粘贴技术,直接转移未遮掩区域,但这些方法通常导致输出缺乏语义一致性。受BLD启发的隐空间融合方法也难以有效保留未遮掩区域中的所需信息。
在这项工作中,提出了一种简单的像素空间方法,在使用模糊mask进行复制粘贴之前先进行mask模糊处理。虽然这可能会稍微影响mask边界附近的精确度,但这种误差几乎不可察觉,并显著改善了边界一致性。
BrushEdit的架构本质上设计为能够无缝地与各种预训练的扩散模型进行即插即用集成,从而实现灵活的保留控制。具体而言,BrushEdit的灵活功能包括:
-
即插即用集成:由于BrushEdit不修改预训练扩散模型的权重,因此可以轻松地与任何社区微调的模型集成,便于采用和实验。
-
保留尺度调整:可以通过将BrushEdit特征与冻结的扩散模型中的权重结合,控制未遮掩区域的保留尺度,从而调整BrushEdit对保留级别的影响。
-
模糊和融合自定义:可以通过调整模糊尺度并根据需要应用融合操作,进一步细化保留尺度。这些功能为编辑过程提供了细粒度和灵活的控制。
实验
评估基准和指标
基准
为了全面评估BrushEdit的性能,在图像编辑和图像修复基准上进行了实验:
-
图像编辑:使用了PIE-Bench(基于提示的图像编辑基准)来评估BrushEdit和所有基准方法在图像编辑任务上的表现。PIE-Bench包含700张图像,涵盖10种编辑类型,均匀分布在自然和人工场景(例如画作)之间,分为四个类别:动物、人类、室内和室外。每张图像包含五个标注:源图像提示、目标图像提示、编辑指令、主要编辑内容和编辑mask。
-
图像修复:在之前工作的基础上,用BrushBench替代了传统基准[81]–[86],用于基于分割的mask和EditBench用于随机刷子mask。这些基准涵盖了人体、动物以及室内和室外场景的真实和生成图像。EditBench包含240张图像,其中自然和生成内容各占一半,每张图像都带有mask和说明。BrushBench,如图3所示,包含600张带有人工标注mask和说明的图像,均匀分布在自然和人工场景(例如画作)之间,并涵盖人类、动物以及室内/室外环境等多种类别。
将任务细化为两种基于分割mask的修复场景:内部修复和外部修复,从而实现对不同图像区域的详细性能评估。
值得注意的是,BrushEdit通过利用统一的高质量修复mask图像进行训练,超越了BrushNet,能够处理所有mask类型。这使得BrushEdit成为一个统一的模型,能够执行所有修复和编辑基准任务,而BrushNet则需要为每种mask类型进行单独的微调。
数据集
在之前版本中提出的BrushData的基础上,整合了两种子集:分割mask和随机mask,并进一步扩展了来自Laion-Aesthetic 数据集的数据,形成了BrushData-v2。一个关键的区别是,我们选择背景干净的图像,并随机与分割mask或随机mask配对,实际上创建了模拟基于删除的编辑的配对,显著增强了我们框架在图像编辑中的删除能力。数据扩展过程如下:使用Grounded-SAM标注开放世界mask,然后根据置信度分数进行过滤,仅保留高置信度的mask。同时,在过滤过程中考虑了mask的大小和连续性。
指标
评估了五个指标,重点关注未编辑/未修复区域的保留和已编辑/已修复区域的文本对齐。此外,我们还进行了广泛的用户研究,以验证BrushEdit在编辑指令对齐和背景保真度方面的优越性能。
-
背景保真度:我们采用标准指标,包括峰值信噪比(PSNR)、学习的感知图像块相似性(LPIPS)、均方误差(MSE)和结构相似性指数测量(SSIM),来评估生成图像与原始图像之间未mask区域的一致性。
-
文本对齐:使用CLIP相似度(CLIP Sim)来评估文本与图像的一致性,通过将两者投影到CLIP模型的共享嵌入空间中,并测量它们表示之间的相似性。
实现细节
除非另有说明,否则在一致的设置下评估各种修复方法,即使用NVIDIA Tesla V100 GPU及其开源代码,以Stable Diffusion v1.5作为基础模型,50步,指导比例为7.5。每种方法在所有图像上使用其推荐的超参数,以确保公平性。BrushEdit和所有消融模型在8台NVIDIA Tesla V100 GPU上训练430k步,约需要3天时间。值得注意的是,对于所有图像编辑(PnPBench)和图像修复(BrushBench和EditBench)任务,BrushEdit使用在BrushData-v2上训练的单一模型,达成了统一的图像编辑和修复。相比之下,我们之前的BrushNet需要为不同的mask类型进行单独的训练和测试。更多细节请参见提供的代码。
定量比较(图像编辑)
表II和表III比较了在PnPBench上的定量图像编辑性能。评估了先前基于反演的方法的编辑结果,包括四种反演技术——DDIM反演、Null-Text反演、Negative-Prompt反演和StyleDiffusion——以及四种编辑方法:Prompt-to-Prompt、MasaCtrl、pix2pix-zero和Plug-and-Play。
表II中的结果确认了BrushEdit在保留未编辑区域和确保编辑区域文本对齐方面的优越性。尽管基于反演的方法,如DDIM反演(DDIM)和PnP反演(PnP),能够实现高质量的背景保留,但它们本质上受到重建误差的限制,影响了背景的保持。相比之下,BrushEdit通过一个专门的分支单独建模未编辑的背景信息,而主网络则基于文本提示生成编辑区域。结合预定义的用户mask和混合操作,它确保了几乎无损的背景保留和语义一致的编辑。
更重要的是,方法能够在不受反演方法中不可恢复的结构噪声影响的情况下,保持高保真度的背景信息。这使得像添加或移除物体这样的操作成为可能,这在基于反演的编辑方法中通常是无法实现的。此外,由于不需要反演,BrushEdit只需要单次前向传递即可执行编辑操作。如表III所示,BrushEdit的编辑时间显著较短,极大提高了图像编辑的效率。
定性比较(图像编辑)
图4展示了与先前图像编辑方法的定性比较。呈现了在多种编辑任务上的结果,包括删除物体(I)、添加物体(II)、修改物体(III)和交换物体(IV),任务涉及人工图像和自然图像。BrushEdit在编辑区域和未编辑区域之间始终保持卓越的一致性,在遵循编辑指令、编辑mask边界的平滑度以及整体内容一致性方面表现出色。特别地,图4中的I和II任务包括删除花朵或笔记本电脑,添加领子或耳环等。
定量比较(图像修复)
表IV和表V展示了在BrushBench和EditBench上的定量比较。评估了几种图像修复方法,包括采样策略修改方法Blended Latent Diffusion、专门的修复模型Stable Diffusion Inpainting、HD-Painter、PowerPaint,以及基于Plug-and-Play方法的ControlNet,这些方法都在修复数据上进行过训练。此外,还包括之前的BrushNet。
结果证实了BrushEdit在保持未修复区域的完整性和确保修复区域的文本对齐方面的优越性。Blended Latent Diffusion表现最差,主要原因是由于它忽视了mask边界,并且在mask区域与未mask区域之间的过渡不一致,导致了混合引发的隐空间损失。HD-Painter和PowerPaint,都基于Stable Diffusion Inpainting,在内部修复任务中与其基础模型取得了相似的结果。然而,在外部修复任务中,它们的性能急剧下降,因为它们仅设计用于内部修复。ControlNet,明确为修复任务而训练,具有与我们相似的实验设置,但其与修复任务的设计不匹配,限制了其保持mask区域完整性和文本对齐的能力,因此需要与Blended Latent Diffusion结合才能取得合理的结果。即使使用了这种组合,它仍然无法超越专门的修复模型和BrushEdit。
在EditBench上的表现与BrushBench上的结果相一致,均显示出BrushEdit的优越性。这表明我们方法在各种修复任务中,包括分割、随机、内修复和外修复mask方面都表现稳定优异。
值得注意的是,与BrushNet相比,BrushEdit现在通过一个模型超越了BrushNet,在基于分割mask和随机mask的基准测试中取得了更强大且通用的修复能力。这一进步主要归功于统一的mask类型和BrushData-v2中更丰富的数据分布。
定性比较(图像修复)
图5展示了与以往图像修复方法的定性比较。评估了在人工和自然图像上的修复结果,涵盖了多种修复任务,包括随机mask修复和分割mask修复。BrushEdit在生成区域与未mask区域之间的内容和颜色一致性方面表现始终优越(I,II)。特别是在图5 II(左侧)中,任务要求生成一只猫和一条金鱼。尽管所有先前的方法未能识别出mask图像中已有的金鱼,并错误地生成了另一条鱼,但BrushEdit通过其双分支解耦设计准确地将背景上下文融入修复中。此外,BrushEdit在整体修复性能上超越了我们之前的BrushNet,且无需针对特定mask类型进行微调,在随机mask和分割mask的修复结果上均能取得相当甚至更优的表现。
灵活控制能力
图6和图7展示了BrushEdit在两个关键领域提供的灵活控制:基础扩散模型选择和尺度调整。这种灵活性不仅限于图像修复,也扩展到图像编辑,主要通过改变主干网络的生成先验和分支信息注入强度来实现。在图6中,我们展示了BrushEdit如何与各种社区微调的扩散模型结合使用,使用户能够选择最适合其特定编辑或修复需求的模型。这大大增强了BrushEdit的实用价值。图7则展示了对BrushEdit的尺度参数的控制,允许用户在编辑或修复过程中调整未mask区域的保护程度,从而提供精细的控制,确保结果精准且可定制。
消融研究
进行了消融研究,以考察不同模型设计对图像修复任务的影响。由于BrushEdit基于图像修复模型,编辑任务是通过推理过程完成的,链式连接MLLMs、BrushEdit和图像检测模型作为代理。修复能力直接反映了我们模型的训练结果。表VI比较了双分支和单分支设计,表VII则重点展示了附加分支架构的消融研究。
在BrushBench上进行的消融研究对内修复和外修复的性能进行了平均。表VI中的结果表明,双分支设计显著优于单分支设计。此外,在双分支设置中微调基础扩散模型的结果优于冻结模型。然而,微调可能会限制模型的灵活性和控制能力。考虑到性能与灵活性之间的权衡,我们选择采用冻结的双分支设计。表VII解释了关键设计选择的理由:(1)使用VAE编码器而非随机初始化的卷积层处理mask图像,(2)将完整的UNet特征逐层集成到预训练UNet中,以及(3)移除BrushEdit中的文本交叉注意力,以防止mask图像特征受到文本的影响。
讨论
结论: 本文介绍了一种新颖的基于修复的指令引导图像编辑范式(IIIE),该范式结合了大型语言模型(LLMs)和即插即用的全能图像修复模型,实现了自主、用户友好和交互式的自由形式指令编辑。我们在PnPBench、我们提出的基准、BrushBench和EditBench上的定量和定性结果展示了BrushEdit在图像编辑和修复任务中,在mask背景保留和图像-文本对齐方面的优越性能。
局限性与未来工作: 然而,BrushEdit仍存在一些局限性:(1)我们模型生成的质量和内容在很大程度上依赖于所选择的基础模型;(2)即使使用BrushEdit,当mask形状不规则或提供的文本与mask图像不对齐时,仍然可能出现生成质量差的情况。在未来的工作中,我们计划解决这些挑战。
消极社会影响:图像修复模型为内容创作提供了令人兴奋的机会,但也带来了隐的风险,尤其是对个人和社会的影响。它们对互联网收集的训练数据的依赖可能会加剧社会偏见,并且存在通过操纵人类图像生成误导性内容的风险。为了减轻这些担忧,负责任的使用和建立伦理指南至关重要,这也将是我们未来发布模型时的重点。
参考文献
[1] BrushEdit: All-In-One Image Inpainting and Editing
相关文章:
图像修复和编辑大一统 | 腾讯北大等联合提出BrushEdit:BrushNet进阶版来了
文章链接:https://arxiv.org/pdf/2412.10316 项目链接:https://liyaowei-stu.github.io/project/BrushEdit 亮点直击 提出了BrushEdit,这是先前BrushNet模型的高级迭代版本。BrushEdit通过开创基于修复(inpainting)的图…...
极狐GitLab 17.7正式发布,可从 GitLab 丝滑迁移至极狐GitLab【二】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…...
Python基础知识回顾
数据类型 Python可以区分整数(integers、下文简写为int)、浮点数(float)、字符串(string)和布尔值(Boolean)等数据类型。 1)int是可正可负的整数 2)float包…...
SpringCloud2023集成Nacos2.4.3
基本都是最新版,踩了两天的坑终于集成上了,实现了多环境配置。 使用版本 关键应用版本备注Java21Oracle OpenJDK 21.0.5Spring Boot3.2.4Spring Cloud2023.0.1Spring Cloud Alibaba2023.0.1.3Nacos2.4.3单机模式 nacos安装 我学习过程使用的是windows…...
数势科技指标平台, 让数据产生最大价值
近来,指标体系和指标平台的重要性正被越来越多的业界同仁所认可。作为行业领先的数据智能产品提供商,数势科技最早推出了统一指标开发管理平台这一突破性产品(2021年获得软著),并首家完成了中国信通院数据指标管理平台…...
【玩转MacBook】Maven安装
下载Maven 官网: https://maven.apache.org/download.cgi 下载 Zip 类型的压缩包: 配置环境变量 以管理员身份编辑配置文件。注意,由于 MacBook 上使用了 zsh 命令行,所以需要编辑~/.zshrc文件而不是~/.bash_profile文件&am…...
OpenGL笔记(1)
GLFW的函数说明 GLFW: Window guide 窗口创建提示 在创建窗口和上下文之前,可以设置多个提示。有些提示影响窗口本身,另一些则影响帧缓冲区或上下文。这些提示每次通过 glfwInit 初始化库时都会被重置为默认值。 整数值的提示可以通过 glfwWindowHint …...
前端Python应用指南(二)深入Flask:理解Flask的应用结构与模块化设计
《写给前端的python应用指南》系列: (一)快速构建 Web 服务器 - Flask vs Node.js 对比 书接上文,这一篇将会深入了解下Flask,这个轻量级的Web框架,非常适合用来构建小型应用和快速原型开发。但是&#x…...
前端Python应用指南(三)Django vs Flask:哪种框架适合构建你的下一个Web应用?
《写给前端的python应用指南》系列: (一)快速构建 Web 服务器 - Flask vs Node.js 对比(二)深入Flask:理解Flask的应用结构与模块化设计 在上一篇博文中,我们深入探讨了Flask框架,…...
Unity3D Huatuo技术原理剖析详解
前言 在游戏开发领域,Unity3D凭借其强大的跨平台能力和丰富的功能,成为了众多开发者的首选工具。而在Unity3D的生态系统中,Huatuo作为一款重要的插件,为游戏开发带来了极大的便利。本文将深入剖析Huatuo的技术原理,并…...
复习打卡大数据篇——Hadoop HDFS 03
目录 1. HDFS元数据存储 2. HDFS HA 高可用 1. HDFS元数据存储 HDFS中的元数据按类型可以分为: 文件系统的元数据:包括文件名、目录名、修改信息、block的信息、副本信息等。datanodes的状态信息:比如节点状态、使用率等。 HDFS中的元数…...
宠物行业的出路:在爱与陪伴中寻找增长新机遇
在当下的消费市场中,如果说有什么领域能够逆势而上,宠物行业无疑是一个亮点。当人们越来越注重生活品质和精神寄托时,宠物成为了许多人的重要伴侣。它们不仅仅是家庭的一员,更是情感的寄托和生活的调剂。然而,随着行业…...
使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动
使用Turtle库实现,鼠标左键绘制路径,用鼠标右键结束绘制,小海龟并沿路径移动 Turtle库是Python标准库的一部分,它提供了一种基于命令的图形绘制方式。Turtle模块通过一个“海龟”(Turtle)对象在屏幕上移动…...
海格通信嵌入式面试题及参考答案
计算电路的最高工作频率如何计算? 计算电路的最高工作频率主要考虑电路中的关键路径延迟。关键路径是指在整个电路中,信号传播延迟最长的路径。电路的最高工作频率的倒数就是时钟周期,而时钟周期必须大于关键路径的延迟时间。 首先要确定电路中各个模块的延迟。比如对于组合…...
3D几何建模引擎Parasolid功能解析
一、什么是Parasolid? Parasolid是由Siemens PLM Software开发的高精度精密几何建模引擎。它全面评估CAD(计算机辅助设计)、CAM(计算机辅助制造)、CAE(计算机辅助工程)、PLM(产品生…...
AI的进阶之路:从机器学习到深度学习的演变(四)
AI的进阶之路:从机器学习到深度学习的演变(三) 五、深度学习的应用领域 深度学习的应用领域广泛,涵盖了计算机视觉、自然语言处理、语音识别和推荐系统等多个方面。以下将详细探讨这些关键应用领域,展示深度学习在不同…...
【ES6复习笔记】rest参数(7)
什么是 rest 参数? rest 参数是 ES6 引入的一个特性,它允许我们将一个不定数量的参数表示为一个数组。使用 rest 参数可以更方便地处理函数的参数,尤其是在参数数量不确定的情况下。 如何使用 rest 参数? 在函数定义中…...
安装MongoDB,环境配置
官网下载地址:MongoDB Shell Download | MongoDB 选择版本 安装 下载完成双击打开 点击mongodb-windows-x86_64-8.0.0-signed 选择安装地址 检查安装地址 安装成功 二.配置MongoDB数据库环境 1.找到安装好MongoDB的bin路径 复制bin路径 打开此电脑 -> 打开高级…...
ubuntu 网络管理
1 查看ip地址 rootu22-tools-20:~# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever…...
flask后端开发(1):第一个Flask项目
目录 一、Helloworddebug、host、port的配置 gitcode地址: https://gitcode.com/qq_43920838/flask_project.git 一、Helloword 一般是会创建两个文件夹和app.py app.py from flask import FlaskappFlask(__name__)app.route(/) def hello_world():return Hello…...
详解下c语言中struct和union的对齐规则
接触过c语言的同学应该都知道字节对齐。有些时候我们很容易弄错字节对齐的方式,特别是涉及到struct(结构体)和union(联合体)时。今天我们通过详细例子来说明下struct和union的对齐规则,以便了解各种struct和…...
虚拟机桥接模式网络连接不上解决方法
可能是桥接模式自动配置网络地址的时候没配好,自己手动配置一下。先看看windows里的wifi的ip 把虚拟机的网络设置打开ipv4把地址、子网掩码、网关输进去,然后再连接...
MySQL用表组织数据
用表组织数据 文章目录 用表组织数据一.四种完整性约束二.数值类型2-1三.数值类型2-2四.字符串.日期类型五.设置1.设置主键2.设置标识列3.设置非空4.设置默认值 六.主外键建立后注意事项 一.四种完整性约束 1.域完整性 列 域完整性约束方法:限制数据类型,检查约束,外键约束,默…...
基于python 微信小程序的医院就诊小程序
标题:基于 Python 微信小程序的医院就诊小程序 内容:1.摘要 基于 Python 微信小程序的医院就诊小程序旨在解决传统医院就诊流程繁琐、排队时间长等问题。通过小程序,患者可以在线预约挂号、查询医生信息、在线支付等,提高就诊效率。本小程序采用 Python…...
VUE3+django接口自动化部署平台部署说明文档(使用说明,需要私信)
网址连接:http://118.25.110.213:5200/#/login 账号/密码:renxiaoyong 1、VUE3部署本地。 1.1本地安装部署node.js 1.2安装vue脚手架 npm install -g vue/cli # 或者 yarn global add vue/cli1.3创建本地项目 vue create my-vue-project1.4安装依赖和插…...
【MySQL】十三,关于MySQL的全文索引
MySQL的全文索引用于搜索文本中的关键字,类似于like查询。 演示 建表 CREATE TABLE demo (id INT(11) NOT NULL,name CHAR(30) NOT NULL,age INT(11) NOT NULL,info VARCHAR(255),primary key(id),fulltext index futxt_idx_info(info) );此表的默认存储引擎为In…...
人工智能学习框架入门教程(一)
人工智能(AI)学习框架是指为开发、训练和部署人工智能模型提供的结构化工具和环境。它们帮助开发者实现AI项目的高效性、可扩展性、可维护性,并提供了优化算法、模型训练、评估、调优等功能。根据任务的不同,人工智能框架可以分为…...
NNDL 作业11 LSTM
习题6-4 推导LSTM网络中参数的梯度, 并分析其避免梯度消失的效果 先来推个实例: 看式子中间,上半部分并未有连乘项,而下半部分有到的连乘项,从这可以看出,LSTM能缓解梯度消失,梯度爆炸只是不易…...
Git 操作全解:从基础命令到高级操作的实用指南
文章目录 1.基本命令1.初始化仓库2.克隆远程仓库3.查看当前仓库状态4.查看提交日志5.添加文件到暂存区6.提交更改7.查看仓库的配置信息 2.分支操作1.查看所有分支2.创建新分支3.切换名称4.创建并切换到新分支5.删除分支6.查看当前分支 3.合并分支1.合并分支2.解决合并冲突 4.远…...
CSS(四)display和float
display display 属性用于控制元素的显示类型,用的 display 值包括: block:块级元素 使元素成为块级元素,占据一整行,前后有换行宽度默认为父容器的 100%,可以设置宽高,支持 margin、padding、…...
python中使用selenium执行组合快捷键ctrl+v不生效问题
在执行ctrlv进行粘贴时,绑定一个页面上的元素对象(无论元素对象是否是引用过期或者是粘贴的目标文本区,但前提需要粘贴的目标文本区获取焦点)执行ctrlv后可以生效。执行粘贴组合快捷键(ctrlv)的示例代码 se…...
数据结构 C/C++(实验五:图)
(大家好,今天分享的是数据结构的相关知识,大家可以在评论区进行互动答疑哦~加油!💕) 目录 提要:实验题目 一、实验目的 二、实验内容及要求 三、源程序及注释 实验1代码 (折半查…...
非零掩码矩阵邻接矩阵
文章目录 1. 举例:2. python 代码3. 邻接矩阵 1. 举例: 在深度学习过程中,我们经常会用到掩码矩阵,比如我们有一个矩阵A表示如下,希望得到矩阵B,在矩阵A的非零位置表示为1,零位置表示为0, A …...
Docker安装
目录 1. 联网安装 Docker 2. 离线安装 Docker 3. 安装 Docker Compose 4. 卸载 Docker 和 Docker Compose 1. 联网安装 Docker 在 CentOS 上通过 yum 安装 Docker: # 安装 Docker yum -y install docker # 启动 Docker systemctl start docker # 查看 D…...
嵌入式驱动开发详解21(网络驱动开发)
文章目录 前言以太网框架ENET 接口简介MAC接口MII \ RMII 接口MDIO 接口RJ45 接口 PHY芯片以太网驱动驱动挂载wifi模块挂载后续 前言 linux驱动主要是字符设备驱动、块设备驱动还有网络设备驱动、字符设备驱动在本专栏前面已经详细将解了,网络设备驱动本文会做简要…...
2024年12月25日Github流行趋势
项目名称:system-design-primer 项目维护者:donnemartin, cclauss, satob, fluency03, linhe0x0项目介绍:学习如何设计大规模系统。为系统设计面试做准备。包括 Anki 卡片。项目star数:282,387项目fork数:47,226 项目…...
6、mysql的MHA故障切换
MHA的含义 MHA:master high availability,建立在主从复制基础上的故障切换的软件系统。 主从复制的单点问题: 当主从复制当中,主服务器发生故障,会自动切换到一台从服务器,然后把从服务器升格成主&…...
#error: WinSock.h has already been included解决方案
原因: 在工程中使用了 Boot 库之后,使用了socket、tcp 相关的头文件,在其他地方还是包括了头文件<windows.h>,该头文件内包含了<winsock.h>。导致遇到报错问题:WinSock.h has already been included 解决…...
npm淘宝镜像
通过命令行配置npm的淘宝镜像源和官方镜像源,以及如何安装和使用cnpm来解决安装包卡顿或无法安装的问题。通过设置registry和disturl,配合清理缓存,可以优化npm的下载速度。 1、官方默认镜像 npm config set registry https://registry.n…...
光谱相机的工作原理
光谱相机的工作原理主要基于不同物质对不同波长光的吸收、反射和透射特性存在差异,以下是其具体工作过程: 一、光的收集 目标物体在光源照射下,其表面会对光产生吸收、反射和透射等相互作用。光谱相机的光学系统(如透镜、反射镜…...
安全筑堤,效率破浪 | 统一运维管理平台下的免密登录应用解析
在信息技术迅猛发展的今天,企业运维管理领域正面临着前所未有的复杂挑战。统一运维管理平台作为集中管理和监控IT基础设施的核心工具,其安全性和效率至关重要。免密登录作为一种新兴的身份验证技术,正逐渐成为提升运维管理效率和安全性的重要…...
外包干了27天,技术退步明显。。。。。
时光荏苒,转眼我已是一个拥有近四年功能测试经验的大专生。20年,我满怀激情地通过校招进入湖南某知名软件公司,期待在这里开启我的职业生涯。然而,长时间的舒适环境让我渐渐失去了前进的动力,技术停滞不前,…...
leetcode 面试经典 150 题:合并两个有序数组
链接合并两个有序数组题序号88题型数组解题方法1. 双指针法 ;2. 合并排序法难度简单熟练度✅✅✅✅✅ 题目 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 请你 合并 …...
波动理论、传输线和S参数网络
波动理论、传输线和S参数网络 传输线 求解传输线方程 对于传输线模型,我们通常用 R L G C RLGC RLGC 来表示: 其中 R R R 可以表示导体损耗,由于电子流经非理想导体而产生的能量损耗。 G G G 表示介质损耗,由于非理想电介质…...
YOLO11改进-注意力-引入自调制特征聚合模块SMFA
本篇文章将介绍一个新的改进机制——SMFA(自调制特征聚合模块),并阐述如何将其应用于YOLOv11中,显著提升模型性能。随着深度学习在计算机视觉中的不断进展,目标检测任务也在快速发展。YOLO系列模型(You Onl…...
uniapp登录
第一步整登录 先整个appid APPID和APPSecret https://developers.weixin.qq.com/community/develop/article/doc/000ca4601b8f70e379febac985b413 一个账号只能整一个小程序 正确流程 调用uni.login https://juejin.cn/post/7126553599445827621 https://www.jb51.net/a…...
mysql,数据库主从同步搭建
1.mysql主从同步1.主从同步原理(1)复现binlog日志中的sql语句(2)主服务器启动binlog日志(3)从服务器启动binlog日志,io线程,sql线程2.主从同步结构一主一从一主多从级联复制互为主从(keepalived高可用)3.mysql复制模式异步复制:主服务器处理完sql直接返回给客户端结果半同步复制…...
云途领航:现代应用架构助力企业转型新篇
在数字化转型的浪潮中,现代应用架构为企业带来了灵活性、效率和创新能力。各类服务模型相继出现,为企业提供了强有力的支持,助力其顺利转型。随着技术的快速发展,企业面临的挑战和机遇也在不断演变,这促使它们必须重新…...
redis——岁月云实战
单线程序,基于IO多路复用,基于内存和c语言编写,性能高。redis官方命令 1 数据结构 1.1 key的层级 redis的key可以通过冒号(:)来划分层级,如下图mms:company:order,但系统中可以看到有不少没有…...
Flink调优----资源配置调优与状态及Checkpoint调优
目录 第 1 章 资源配置调优 1.1 内存设置 1.1.1 TaskManager 内存模型 1、内存模型详解 2、案例分析 1.1.2 生产资源配置示例 1.2 合理利用 cpu 资源 1.2.1 使用 DefaultResourceCalculator 策略 1.2.2 使用 DominantResourceCalculator 策略 1.2.3 使用 DominantRes…...