BrushNet
即插即用的双分支图像修复模型,可加载到任意预训练 Stable Diffusion 上实现高精度局部
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
即插即用的双分支图像修复模型,可加载到任意预训练 Stable Diffusion 上实现高精度局部
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
你是否有过这样的经历——翻出一张珍贵的家庭合影,却发现画面边缘有个路人"乱入",或者珍贵的旅行照被人为裁剪,关键内容不完整?传统修复需要专业设计师用 Photoshop 花费数小时,借助复杂的内容感知填充(Content-Aware Fill)反复尝试。而腾讯ARC实验室与香港中文大学联合推出的 BrushNet,将这个问题的时间成本压缩到几十秒,同时修复质量可以比肩专业设计师的创作。
BrushNet 最早发表于计算机视觉顶级会议 ECCV 2024,随后在 CVPR 2024 GenAI 媒体生成挑战赛中斩获头奖,目前 GitHub 收获超过 1700 颗星,成为图像修复(Image Inpainting)领域最受关注的开源模型之一。

BrushNet 的核心创新在于双分支解耦设计(Decomposed Dual-Branch Diffusion)。传统图像修复模型往往将掩码区域图像特征(masked image features)和带噪潜在变量(noisy latents)混合处理,这导致模型需要同时学习两件事:既要理解掩码区域应该填什么内容,又要理解如何生成高质量的图像。这种双重负担让模型训练困难,修复效果也难以精细控制。
BrushNet 采用了"分而治之"的策略。它独立引入一个 BrushNet 分支,专门负责编码掩码图像的视觉信息——包括纹理、边缘、颜色分布等底层视觉特征。与此同时,Stable Diffusion 的原始 U-Net 分支继续专注于文本引导的图像生成任务。两支分别在各自擅长的领域工作,最后通过逐像素级别的密集控制(Dense Per-Pixel Control)融合,确保掩码区域的视觉连贯性和生成内容的语义一致性。
这种设计的妙处在于:即插即用(Plug-and-Play)。BrushNet 不是一个完整的图像生成模型,而是一个适配层,可以嫁接到任何预训练的 Stable Diffusion 模型之上,无论是 SD v1.5、SDXL 还是社区的各种微调版本,都可以通过简单加载 BrushNet 权重获得强大的图像修复能力。

图1:左上为原图,右上为掩码图,左下为用户提示词描述的目标内容,右下为 BrushNet 生成结果
BrushNet 完全基于 Hugging Face Diffusers 框架实现,代码质量遵循顶级开源标准。项目以 diffusers 0.27.0.dev0 为核心依赖,充分复用 Diffusers 的模块化设计:
| 核心模块 | 技术细节 | 作用 |
|---|---|---|
| BrushNetModel | src/diffusers/models/brushnet.py,实现完整的双分支编码器,包含 CrossAttnDownBlock2D、DownBlock2D 等标准块 | 独立编码掩码图像特征 |
| StableDiffusionBrushNetPipeline | src/diffusers/pipelines/brushnet/pipeline_brushnet.py,65000+ 字符完整实现 | 编排推理流程,融合 BrushNet 与 SD U-Net |
| AutoencoderKL | 复用 diffusers 内置变分自编码器 | 将图像像素压缩到潜在空间,以及重建 |
| CLIPTextModel + CLIPTokenizer | Hugging Face Transformers | 解析用户输入的文本提示词 |
推理流程的核心步骤如下:输入原图 + 二值掩码 → OpenCV 分离掩码区域像素 → BrushNet 分支编码掩码图像特征 → CLIP 编码文本提示词 → 双分支在 U-Net 各层逐像素融合 → VAE 解码生成修复图。调度器支持 UniPCMultistepScheduler(20步推理 vs 默认50步,速度提升显著)。
BrushNet 项目提供了完整的训练代码,支持 SD v1.5 和 SDXL 两个主流底模的训练流程。训练依赖包括:
值得注意的是,SDXL 版本的训练受限于 V100 GPU(32GB 显存只能 batch_size=1),训练质量未达最优,作者在 README 中公开说明了这一局限,并感谢社区志愿者 yuanhang 协助训练更好版本。2024 年 12 月发布的 BrushNetX 作为升级版本,在 BrushEdit 项目中提供,修复了这些问题。
BrushNet 提供了三种使用途径:
1. Gradio 交互界面(适合尝鲜)
运行 examples/brushnet/app_brushnet.py,本地启动 Web UI,集成了 SAM(Segment Anything Model)实现鼠标涂抹式掩码绘制,无需手动准备掩码图。上传照片 → 涂抹修复区域 → 输入文本提示词 → 一键生成。集成 Mobile SAM 使得掩码绘制体验流畅,是入门用户最推荐的方式。
2. Python 脚本推理(适合开发者)
直接调用 StableDiffusionBrushNetPipeline,代码简洁(见 pipeline 示例),可嵌入任何 Python 应用,支持批量处理。
3. ComfyUI 集成(适合专业工作流) 社区开发者 nullquant 和 kijai 分别贡献了 ConfyUI-BrushNet 和 ComfyUI-BrushNet-Wrapper,可将 BrushNet 接入 ComfyUI 节点式工作流,结合 LoRA、ControlNet 等生态工具构建复杂图像处理管道。
图像修复是 AIGC(AI 生成内容)工作流中的高频刚需。在电商场景中,快速替换商品图的背景或移除水印;在影视制作中,清除穿帮镜头中的拍摄设备;在老照片修复中,填补缺失的面部细节——这些需求构成了庞大的市场。
BrushNet 的即插即用特性使其具有极高的工程价值:不需要微调底模,只需加载对应的 BrushNet 权重,就可以在任意定制过的 SD 模型上获得高质量修复能力。这大幅降低了图像修复技术的应用门槛,让中小团队也能以低成本构建专业级图像处理流水线。
此外,BrushNet 已作为核心组件被集成到更上层的多模态编辑工具中。2024 年 12 月发布的 BrushEdit 项目,结合 LLM-Agent 和 BrushNet,实现了指令引导的全自动图像编辑,用户只需用自然语言描述修改意图(如"把这只猫换成一只狗"),系统即可自动完成选区、掩码、修复的完整闭环。
本报告基于 GitHub 公开代码(v0.27.0.dev0 分支)及 ECCV 2024 论文生成。