【生成模型之十五】BrushNet

论文:BrushNet: A Plug-and-Play Image Inpainting Model with Decomposed Dual-Branch Diffusion

代码: https://github.com/TencentARC/BrushNet

类型:inpaint

其他:支持resume修改&面试辅导

一、背景

问题:目前用于绘画的DM改进,包括修改采样策略或开发Inpaint特定DM,经常出现语义不一致和图像质量降低的问题。

方法:我们的工作引入了一种新的范式:将masked图像特征和noisy latent划分为单独的分支。这种划分极大地减少了模型的学习负荷,促进了以分层方式精细地结合基本的掩蔽图像信息。在此,我们介绍了BrushNet,这是一种新型的即插即用双分支模型,旨在将像素级掩模图像特征嵌入任何预训练的DM中,保证连贯和增强的图像修复结果。

 Image inpainting它促进了许多应用,如虚拟试穿virtual try-on和图像编辑image editing

常用的基于扩散的文本引导修复方法大致可分为两类:

(1) Sampling strategy modification,采样策略的修改。通过从预训练的扩散模型中采样mask区域来修改标准去噪过程,在每个去噪步骤中,未masked区域只是从给定图像中复制粘贴。虽然它们可以用于任意的扩散主干,但对掩模边界和未掩模图像区域上下文的有限感知知识会导致不连贯的修复结果。

(2)Dedicated inpainting models,专用修复模型。其通过扩展基础扩散模型的输入通道维度来微调专门设计的图像修复模型,以包含提供的损坏图像和掩模。虽然它们使扩散模型能够通过专门的内容感知和形状感知模型产生更令人满意的结果,但我们认为,这种架构最适合基于扩散的修复吗?

### 关于BrushNet的工作流与使用方法 #### 刷子网络(BrushNet)概述 BrushNet 是一种基于分解双分支扩散的即插即用像修复模型[^2]。其设计目标在于提高像修复的一致性和质量,特别是在处理复杂场景时减少文本引导可能带来的干扰。 #### BrushNet的核心机制 BrushNet采用了一个独特的架构——分离的双分支扩散结构。这种结构允许模型分别关注两个不同的方面: - **主分支**负责整体像生成的任务。 - **辅助分支**则专注于从被遮挡区域提取特征并补充到主分支中,从而增强修复效果。 此设计有效降低了传统单一路径模型中可能出现的信息丢失风险,并显著提升了修复结果的空间连贯性。 #### 实现流程详解 以下是利用ComfyUI框架结合BrushNet插件完成像修复的主要步骤说明: 1. 准备环境:确保已安装好支持运行PyTorch程序所需的依赖项以及最新版本的ComfyUI平台。 2. 加载预训练权重文件:下载官方发布的或者自己微调过的BrushNet模型参数,并将其导入至项目目录下指定位置以便加载使用。 3. 配置输入数据:对于待修复片需创建对应的二值掩码(mask),其中白色代表需要填补的部分而黑色表示保留原样不变之处;同时调整大小使之匹配预期尺寸要求(如512×512像素)。 4. 执行推理操作:启动ComfyUI界面,在节点编辑器里添加相应组件连接起来形成完整的计算谱。具体来说就是依次加入ReadImage、MaskToLatent、BrushNetInpainting等模块,并设置好各项超参选项比如迭代次数(step number)、指导强度(guidance scale)等等数值范围内的合理取值。 5. 输出成果评估:经过一段时间等待之后即可获得最终输出效果。此时可以对比原始破损照片查看修补后的视觉差异程度如何,进而判断是否满意当前设定下的性能表现水平。 ```python import torch from comfyui import ComfyUI, ReadImage, MaskToLatent, BrushNetInpainting # 初始化ComfyUI实例 app = ComfyUI() # 添加读取像节点 read_image_node = app.add_node(ReadImage(), inputs={"image_path": "/path/to/input/image.png"}) # 创建蒙版转换潜空间向量节点 mask_to_latent_node = app.add_node(MaskToLatent(), inputs={ "mask_path": "/path/to/mask.png", "size": (512, 512), }) # 插入BrushNet修复节点 brushnet_inpainting_node = app.add_node(BrushNetInpainting(), inputs={ "latent_input": mask_to_latent_node.outputs["latent"], "guidance_scale": 7.5, "steps": 50, }) ``` 上述代码片段展示了如何构建一个基本的ComfyUI工作流来应用BrushNet进行像修复。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jeremy_lf

你的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值