基于diffusion的图像编辑与inpaint
图像编辑与inpaint
基于diffusion的图像编辑有很多类别,但从我已知的角度来看,主要可以分为三大主要类别:语义编辑、风格编辑和结构编辑。以下是这三种类任务主要的内容:
语义编辑:对象的添加,移除,替换等。例如将照片中的猫换成狗。
风格编辑:修改整体颜色,或者换成制定风格。例如最近比较火的gpt4o生成吉卜力风格图片。
结构编辑:生成新视角,或者修改目标姿态等。
整体而言,图像编辑任务属于一种img2img的任务。其中,inpaint作为一种可以修复制定区域的方法,在上述三种领域中均有不同程度的参与。下面我们将大致讲解下inpaint的原理。
diffusion中inpaint的实现方案
inpaint的输入主要有三个:1. 原始图像 2. mask 3. 需要修复区域的描述,输出就是修复好的图片。由于本人不太了解prompt的设计,因此本文重点关注Inpaint(图像修复) 的实现方案中如何将 Mask(蒙版) 信息注入到模型中,并引导生成过程修复指定区域。以下是两种主流的实现方案:
- 直接重新训练一个inpaint模型
- 垫图,在生成过程中,非mask区域混合一定比例原图的latent,逐步进行引导。
- 用controlnet引导inpaint
下面大致介绍下三种方案的实现路线
重新训练一个inpaint模型
多数模型会选择拓展通道的方式来将mask与原始图像拼接在一起,送入模型并输出最后的结果。例如stable diffusion的inpaint模型中,会将原市的4通道(图像)拓展为9通道(图像+mask后的图像+mask),并以该输入为基础训练模型,最后得到的模型便可以支持inpaint。
优点:效果好,思路简单直接
缺点:直接微调整个模型,算力消耗较大
垫图
垫图的主要思路就是仅在不需要修复的地方拿原图的latent做引导。说白了就是把latent以一定的比例混合进去。需要修复的地方则直接生成,反正有prompt引导,最后生成的结果也不会差。
优点:无需训练模型
缺点:可能生成不够自然,需要调整非mask区域latent混合比例(也可以说是引导强度)
基于controlnet的inpaint
就是构造了一个contolnet,此处不再过多介绍。