ComfyUI BrushNet
作者:CYCHENYUE
来源:开源的Ai知识库
BrushNet介绍
BrushNet,这是一种新颖的即插即用的双分支模型,旨在将像素级遮罩图像特征嵌入任何预训练的扩散模型中,确保连贯且增强的图像修复结果
BrushNet 的优势
BrushNet 在图像修复模型中的主要优势在于其能够高效地从遮罩图像和潜在噪声中提取和整合特征。这一点非常关键,因为它允许模型在图像生成过程中更好地理解和重建缺失或损坏的部分。此外,BrushNet通过与预训练的UNet网络结合使用,可以有效地增强图像细节和质量,这使得最终修复的图像能够达到较高的视觉质量和自然度。这种特性尤其适用于那些需要精细重建细节的高分辨率图像修复任务。
BrushNet在于它能够更加细致地处理图像的细节和边缘,尤其是在接缝处,确保修复后的图像与原始图像在内容和风格上保持一致。这样的处理方式可以使图像看起来更自然,不会有生硬或不自然的感觉。这种方法比传统的局部重绘技术更先进,因为它不仅考虑了缺失部分,还充分利用了图像的整体信息来优化修复效果。
原理示意图
- 掩码和下采样:模型接收一个掩码(Mask),用来指示图像中的缺失区域。这个掩码被下采样(Downsample)以匹配模型潜在空间的大小。
- 掩蔽图像与VAE编码器:实际的图像在缺失部分被掩蔽,然后传入变分自编码器(VAE Encoder)以使潜在空间的分布对齐。
- 噪声潜在空间:在处理过程中,将噪声加入潜在空间(Noisy Latent)以增加模型输出的多样性。
- BrushNet:将掩蔽图像的潜在表示、噪声潜在空间和下采样掩码结合起来,作为BrushNet的输入。BrushNet用于提取特征。
- Frozen UNet:BrushNet提取的特征通过零卷积(Zero Convolution)块逐层加到预训练的UNet中。下面详细说下这个.
- 去噪和图像生成:去噪过程完成后,通过解码器(Dec)生成图像。
- 模糊掩码和合成:生成的图像和掩蔽图像通过模糊掩码(Blurred Mask)进行混合,以创建最终的修复图像。
- 混合:使用混合技术将生成的图像与原始掩蔽图像结合起来,完成修复过程。
在图像处理中,"Frozen UNet"通常指的是一个已经预训练好并在使用过程中保持固定不变的UNet模型。这意味着在进行特定任务(如图像分割或修复)时,模型的权重不会更新,从而可以利用UNet强大的图像处理能力,而无需重新训练模型。这种做法常用于需要快速且高效地处理图像的场景,尤其是当新数据不足以进行有效训练或者训练成本过高时。
相关的介绍
通俗易懂的说:
这个过程有点像我们小时候玩的连点成图游戏,只不过现在是电脑在帮我们连线,而且是在图片上。
- 掩码:就像是一张有洞的纸覆盖在图片上,电脑程序通过这些洞了解哪些部分需要修复。
- 编码器:这部分是电脑的大脑,它把需要修复的图片转换成电脑能理解和处理的信息。
- 噪声潜在空间:为了让修复的部分不那么单调,程序会加入一些随机性,这样修复出来的图片看起来更自然。
- BrushNet和冻结的UNet(Frozen UNet,值预训练好的固定不变的):这些是处理图片的工具,就像画家的画笔和调色板,帮助电脑细致地完成修复工作。
- 去噪和生成图像:程序会尝试去除不需要的噪声,并最终创建出看起来很真实的图片部分。
- 模糊掩码和合成:最后,程序会用一种特殊的技巧,将新生成的图片和原始图片融合在一起,就像我们用橡皮擦把画作上的错误擦掉并重画一样,只是这里用的是电脑技术。
UNet是一种专门为生物医学图像分割而设计的卷积神经网络。它的结构呈U形,包括一个收缩路径和一个扩张路径。在收缩路径中,网络通过卷积层和池化操作逐步捕获图像的特征和上下文信息。在扩张路径中,这些特征通过上采样操作逐步恢复到原始图像的分辨率,同时还原图像的细节内容。由于其有效的结构设计,UNet即使在有限的训练数据下也能达到很高的分割精度。此外,UNet在分割边缘区域的像素时,能够通过镜像输入图像来外推缺失的上下文,这对于处理大尺寸图像尤为重要。
UNet的这种结构设计不仅使其在医学图像处理领域非常流行,而且还被广泛应用于其他许多图像生成模型中,如迭代图像去噪和图像分割。因此,UNet也是现代许多图像生成模型技术的基础,比如DALL-E、Midjourney和Stable Diffusion等。
总的来说,UNet是一个功能强大且应用广泛的网络,尤其在需要精确分割图像各个部分的任务中表现出色。它的这些特点使得UNet成为了图像处理领域的一个重要工具。
项目链接
原项目 https://tencentarc.github.io/BrushNet/
插件地址https://github.com/kijai/ComfyUI-BrushNet-Wrapper
模型下载https://huggingface.co/Kijai/BrushNet-fp16/tree/main
第一次运行会自动下载需要的模型,如果是用的ComfyUI-BrushNet-Wrapper节点
模型将自动从此处下载:https://huggingface.co/Kijai/BrushNet-fp16/tree/main
到 ComfyUI/models/brushnet
,因为环境问题, 也可以手动去下载好了放在这个文件夹里面.
另外,BrushNet 提供了三个模型, 个人测试下来,random 这个效果比较好
工作流
配合 mj 出底图, 在底图不变的基础上,添加文字或者图片内容
另外可以使用G-DinoSAm(GroundingDino+Sam),检测和分割底图上的内容, 做针对性的修改
另一个BrushNet节点
这个插件可以结合之前介绍过的 controlnet 和 IPAdapter 来使用, 也支持扩图操作, 还是比较推荐的
插件地址 https://github.com/nullquant/ComfyUI-BrushNet
模型地址 https://drive.google.com/drive/folders/1fqmS1CEOvXCxNWFrsSYd_jHYXxrydh1n
文件模型下载和目录结构
SD1.5 文本编码器模型 model.fp16.safetensors
。它应该放置在您 models/clip
文件夹中。
https://huggingface.co/runwayml/stable-diffusion-v1-5/tree/main/text_encoder
brushnet 模型
分为 xl 和 1.5 的
控制只重绘遮罩部分防止非重绘区别变模糊
使用混合局部重绘 节点
inpaint 重绘后的图片
Original 原始的图片(未重绘前的)
加入风格迁移IPAdapter