Loading...

文章背景图

BrushNet:涂抹式图像修复模型部署指南

2024-12-17
0
- 字
- 分钟
|

BrushNet:涂抹式图像修复模型部署指南

BrushNet

官方信息

项目名称BrushNet
仓库地址https://github.com/TencentARC/BrushNet
官方网站https://tencentarc.github.io/BrushNet/
最新更新2024-12-17
项目定位腾讯 ARC Lab 推出的插拔式双分支扩散模型,通过涂抹掩码精确控制图像修复区域,可嵌入任何预训练 Stable Diffusion 模型获得高质量修复效果

项目背景

传统图像修复(inpainting)模型有一个通病:你涂抹了一个区域让 AI 修复,结果 AI 把整张图都改了——原来好好的背景、物体边缘全部被重绘,和原图"两张皮"。这是因为传统方法把整个图片连同掩码一起送入扩散模型,模型无法区分哪些区域该保留、哪些该重绘。

BrushNet 由腾讯 ARC Lab 开发,核心创新是双分支架构:一个分支处理完整图像(保留原始内容),另一个分支处理掩码图(知道哪里需要修复),两个分支的特征在去噪过程中逐步融合。这样就能做到"只改涂抹区域,其他地方纹丝不动"。而且 BrushNet 是插拔式的——任何基于 Stable Diffusion 的模型(SD1.5、SDXL、各种 fine-tune)都可以挂上 BrushNet 立刻获得精确修复能力。

项目在 GitHub 上收获超过 4K Star,论文发表于 CVPR 2024,是图像修复领域的前沿研究。

核心特性

  • 精确修复:只重绘涂抹区域,其他部分完全保留
  • 插拔式设计:可嵌入任何 SD1.5/SDXL 基础模型
  • 双分支架构:图像分支 + 掩码分支特征融合
  • 提示词引导:支持文本提示词控制修复内容
  • 多种修复场景:物体擦除、内容生成、局部修改、外扩
  • ComfyUI 集成:有现成节点可直接使用
  • Gradio Demo:提供网页界面
  • 开源协议:Apache 2.0,可商用

环境要求

  • 操作系统:Ubuntu 20.04+/Windows 10+
  • Python:3.10
  • 显卡:NVIDIA GPU(8GB 显存以上,推荐 12GB)
  • CUDA:11.8+
  • 内存:16GB 以上
  • 磁盘空间:约 10GB(含 SD 基础模型 + BrushNet 权重)

详细部署步骤

方式一:源码部署(Gradio Demo)

第 1 步:克隆仓库

git clone https://github.com/TencentARC/BrushNet.git
cd BrushNet

第 2 步:创建虚拟环境

conda create -n brushnet python=3.10 -y
conda activate brushnet

第 3 步:安装 PyTorch

pip install torch==2.0.1 torchvision==0.15.2 --index-url https://download.pytorch.org/whl/cu118

第 4 步:安装依赖

pip install -r requirements.txt

第 5 步:下载模型权重

# 国内用户先设置镜像
export HF_ENDPOINT=https://hf-mirror.com

# 创建模型目录
mkdir -p models/brushnet

# 下载 BrushNet 权重(约 4GB)
# 从 https://huggingface.co/dustysys/BrushNet 下载:
# - brushnet-seedinet.ckpt (基础模型)
# 或从 release 页面下载

# 同时需要 Stable Diffusion 1.5 基础模型
# 从 https://huggingface.co/runwayml/stable-diffusion-v1-5 下载 v1-5-pruned-emaonly.safetensors
# 放到 models/ 目录下

第 6 步:启动 Gradio Demo

python gradio_brushnet.py \
  --brushnet_checkpoint ./models/brushnet/brushnet-seedinet.ckpt \
  --sd_checkpoint ./models/v1-5-pruned-emaonly.safetensors

启动后访问 http://localhost:7860。

方式二:ComfyUI 集成(推荐)

BrushNet 最常用的方式是作为 ComfyUI 节点:

# 进入 ComfyUI 自定义节点目录
cd ComfyUI/custom_nodes/

# 克隆 BrushNet ComfyUI 节点
git clone https://github.com/jiaxiangcui/ComfyUI-BrushNet.git
cd ComfyUI-BrushNet
pip install -r requirements.txt

# 下载 BrushNet 权重到 ComfyUI/models/brushnet/ 目录
# 重启 ComfyUI 即可在节点列表找到 BrushNet 节点

ComfyUI 工作流要点:

  1. 加载 SD1.5 基础模型
  2. 加载 BrushNet 权重节点
  3. 输入原图 + 掩码图(白色为需要修复区域)
  4. 输入提示词描述修复后内容
  5. 运行生成

方式三:IOPaint 集成

IOPaint(前面介绍的图像修复工具)已经内置 BrushNet 模型:

# 安装 IOPaint 后直接指定 brushnet 模型启动
iopaint start --model=brushnet --device=cuda --port=8080

# 浏览器打开 http://localhost:8080
# 上传图片,涂抹要修复的区域,输入提示词,点击生成

使用方法

Gradio 界面操作

  1. 打开 http://localhost:7860
  2. 上传原始图片
  3. 用画笔在图片上涂抹要修复的区域(白色掩码)
  4. 输入提示词(Prompt)描述希望生成的内容:
    • 擦除物体:Prompt 留空或写 "empty, blank"
    • 替换内容:写 "a red car"、"a forest landscape" 等
  5. 调整参数:
    • BrushNet Condition Scale:掩码控制力(默认 1.0)
    • Guidance Scale:提示词遵循度(默认 7.5)
    • Steps:去噪步数(默认 20~30)
  6. 点击"Run"生成
  7. 对比原图和结果,满意后下载

Python 推理示例

import torch
from diffusers import StableDiffusionPipeline
from brushnet import BrushNetModel

# 加载 SD 管线
pipe = StableDiffusionPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5",
    torch_dtype=torch.float16
).to("cuda")

# 加载 BrushNet
brushnet = BrushNetModel.from_pretrained(
    "dustysys/BrushNet",
    subfolder="brushnet",
    torch_dtype=torch.float16
)
pipe.brushnet = brushnet.to("cuda")

# 准备输入
from PIL import Image
init_image = Image.open("input.jpg").resize((512, 512))
mask_image = Image.open("mask.png").resize((512, 512))  # 白色=修复区

# 生成
result = pipe(
    prompt="a beautiful garden",
    image=init_image,
    mask_image=mask_image,
    brushnet_conditioning_scale=1.0,
    num_inference_steps=25,
    guidance_scale=7.5,
).images[0]

result.save("output.png")

常见问题 FAQ

Q1:和普通 SD Inpaint 有什么区别?
A:普通 SD Inpaint 会重绘整个图片的潜空间,导致未涂抹区域也发生变化。BrushNet 的双分支架构保证未涂抹区域完全保留,修复区域与原图融合更自然。

Q2:需要多少显存?
A:SD1.5 + BrushNet 约需 8GB 显存。显存不足可以开启 xFormers 或用 --medvram 参数降低占用。

Q3:支持 SDXL 吗?
A:官方主要支持 SD1.5。社区有适配 SDXL 的版本,但效果不如 SD1.5 成熟。建议先用 SD1.5 体验。

Q4:修复边缘有明显接缝怎么办?
A:(1) 涂抹掩码时边缘稍微羽化(模糊 5~10 像素);(2) 降低 BrushNet Condition Scale 到 0.8~0.9;(3) 多生成几次选最好的结果。

Q5:模型权重从哪里下载?
A:HuggingFace 仓库 dustysys/BrushNet。国内用户用 hf-mirror.com 镜像加速。

跳转链接

评论交流

文章目录