当前 inpainting/outpainting 最优解:PowerPaint + BrushNet
一、概述
PowerPaint 是一种图像修复模型,它能够实现多种内绘图任务,包括文本引导的对象内绘图、上下文感知图像内绘图、可控形状拟合的对象内绘图以及外绘图。如果单纯从这篇文章来看,并不能达到最好的效果,但是作者受 BrushNet 启发,重新训练了一版,也是 github 里面的 PowerPaint v2,效果应该算是当前的最优解了。
项目地址:PowerPaint项目页面(https://powerpaint.github.io/)
论文地址:A Task is Worth One Word: Learning with Task Prompts for High-Quality Versatile Image Inpainting(https://arxiv.org/pdf/2312.03594)
代码地址:https://github.com/open-mmlab/PowerPaint(https://github.com/open-mmlab/PowerPaint)
效果:
二、原理
核心点:
- 学习任务提示(Task Prompts):通过引入可学习的任务提示和针对性的微调策略,指导模型明确关注不同的内绘图目标。
- 负提示(Negative Prompt):展示任务提示在 PowerPaint 中的多功能性,作为负提示用于有效的对象移除。
- 提示插值技术(Prompt Interpolation Techniques):利用该技术实现可控的形状引导对象内绘图。
细节解释:
- 问题设定:在图像中填充用户指定区域,根据用户意图填充合理的内容。
- PowerPaint架构:
1.任务提示 :引入可学习的任务提示,专门为上下文感知图像内绘图(Context-aware Image Inpainting)设计的任务提示。它引导模型填充图像中的缺失区域,同时保持与周围图像内容的一致性。在训练中通常与随机掩码一起使用,目的是让模型学会如何根据图像的上下文信息来填充缺失的部分,而不是依赖于文本描述。
2.对象移除:通过结合分类器自由引导采样策略,使用作为正提示,作为负提示,有效防止在区域内生成对象,提高对象移除的成功率。
3.形状引导对象内绘图:通过随机扩张对象分割掩码,并使用和之间的插值作为训练的任务提示,建立两种内绘图目标之间的权衡。为了实现形状引导的对象内绘图中的可控性,通过插值和来平衡形状拟合和上下文感知。将和作为后缀添加到文本描述中,并将它们分别输入到CLIP文本编码器中,通过根据的值对两个 Text Embedding 进行线性插值,我们得到了最终的文本嵌入,记为:
其中这里的值为了防止模型过度拟合掩模的形状,而不考虑物体的整体形状,做了如下设置:
局限性:
- 基础模型限制:合成质量可能受到底层文本到图像扩散模型能力的约束。
- 小区域拟合挑战:在训练中,对象占据极小区域的实例稀疏,导致实现极小值拟合度有一定挑战。
三、PowerPaint + BrushNet
主要重点说下PowerPaint + BrushNet,前面我写过一篇 BrushNet 的文章 grooter:【AIGC图像理论篇11】BrushNet —— 插件式图像修复inpainting 模型(https://zhuanlan.zhihu.com/p/695197835) ,BrushNet 使用了一个分支来更好的提取遮
罩图像特征的优势,但是因为其删除了此分支的文本提示的交叉注意力,所以其内容的控制依靠原扩散模型的prompt。而PowerPaint主要创新点在于引入可学习的任务提示和针对性的微调策略,所以 PowerPaint 作者结合两者的优势,保留被 BrushNet 删除的交叉注意力层用于任务提示输入,重新训练了新的 PowerPaint,得到了PowerPaint + BrushNet模型。总结下就是在BrushNet的单独的分支上用PowerPaint 针对性微调的方式训练了一个新的BrushNet模型。
我实际部署后做了下对比,效果确实会好一些,尤其是outpainting,效果图如下:
inpainting:
outpainting:
四、总结
PowerPaint作为一种多功能的图像内绘图模型,通过学习任务提示和负提示,以及利用提示插值技术,实现了在多种内绘图任务中的优异性能。而 PowerPaint + BrushNet 更好的结合了两者的优点,也输出了较好的效果,但是不能和sd webui结合是一个推广瓶颈。
本文转自 AI生成未来 ,作者:grooter