都是“垫图”,谁能还原你心中的图
“垫图”这个概念大家肯定都不陌生,此前当无法准确用 prompt 描述心中那副图时,最简单的办法就是找一张近似的,然后 img2img 过程启动,一切搞定。
更多垫图干货:
可 img2img 简单的同时,也有它绕不过去的局限性,比如对 prompt 的还原度不足、生成画面多样性弱,特别是当需求加入 controlnet 来进行多层控制时,参照图、模型、controlnet 的搭配就需求精心挑选,不然出图成效常常让人当场裂开…
但现在,我们有了新的“垫图”神器——IP-Adapter,在解读它之前,先来直觉的感受一下它的成效。
成效可以说相当炸,那 IP-Adapter 就是终极答案了么?它的泛化性如何?兼容性是否足够?对 prompt 支持怎么样?当真的要接入现实工作中它还有什么拓展的才能呢?让我们一一来看。
IP-Adapter 的核心优势,只画你关心的事
IP-Adapter 和 img2img 虽然在操作上都是“垫图”,但它们的底层兑现可以说是毫无关系。
用个不严谨但好理解的例子,“IP-Adapter”和“img2img”就是两位画师,现在给出 prompt 要求它俩画一个汉子,在不提供参照图的情况下,它们大概都会画成图 1 的模样,但是当我们加上参照图 2 的时候,两者的区别就显现了。
img2img 相当于直接盖在参照图上开始临摹,虽然知道要画个汉子,但会在山君的基础上去修改,始终会很别扭,中间不免出现山君和汉子混淆的情况,画出一些强行混合不知所谓的图来。因为在这个过程中,参照图更为重要,一切是在它基础上画出来的,结果也更倾向于参照图。
IP-Adapter 则不是临摹,而是真正的自己去画,它始终记得 prompt 知道自己要画个汉子,中间更像请来了徐悲鸿这样的艺术大师,将怎么把山君和人的特点融为一体,讲解得偏僻入里,所以过程中一直在给“汉子”加上“山君”的元素,比如金黄的瞳仁、王字型的抬头纹、虎纹的须发等等。此时,prompt 更为重要,因为这才是它的始终目标。
当然这些都是在一定的参数范围内,超过了阈值,那必然是要走极端的,照着参照图去 copy 了。但即便这样也可以看到 img2img 只是 1:1 的复制,而 IP-Adapter 有更多 prompt 的影子。
把简单的“垫图”,拓展得大有前途
在理解 IP-Adapter 的逻辑之后,会发现它带来的改变可不只是“垫图”,这里先展示一下它在我们工作中的实例,然后再和大家一步步的去拆解它。
以上这些成效兑现很简单,只需求添加两层 controlnet,一层用来提供 IP-Adapter,一层使用 canny 用来对需求添加的商品进行绘制、固化即可。
如果只是在 webui 中应用,那到这里其实已经 ok 了。但这次我们要更进一步,使用新工具,去兑现更有创造力的才能。
以下重点想分享的更多是工程搭建的才能和成效(具体的方法,我们会放到以后详细的讲解):
① 一张图就是一个lora,大大降低了训练的成本
② 多参照图接入,提供更丰富的生成结果
③ 使用对prompt的强注意力,提供prompt matrix丰富结果
④ 基于comfyui的工作流部署,兑现多步骤自动化生成
以往要想兑现一个具体的设计风格,需求针对性的训练 lora,背后涉及训练素材的搜集、打标、模型训练、成效检验等多个环节,通常要花一两天,并且结果还存在很强的不确定性。
但现在,通过 IP-Adapter 这一个步骤,在几分钟内就直觉的看到结果,大大节省了时间,敏捷程度简直天壤之别。
当我们拥有这些特性,几乎就得到一个“即时 lora”,而需求付出的成本只是去找几张符合预期的参照图。
同时 IP-Adapter 还能一次读取多张参照图,让生成的结果拥有更丰富的多样性和随机性,这是在 img2img 过程中无法兑现的,也是两者之间区别最大的地方。
此刻,让我们把思路再打开一些,因为 IP-Adapter 对 prompt 的强注意力,prompt 中的信息能更直觉的反应在结果中。于是我们可以在继承 img 风格的同时,通过替换 prompt 里面的关键词,指向不同的结果,形成 prompt 的组合矩阵,更进一步的拓展生成结果的多样性。
更进一步,再加入不同的 controlnet 和批量素材读取,来兑现对生成结果的可控引导,以及使用批量读取才能,来提供更加丰富的模板。一套”0 成本即时 lora + controlnet 可控生成 + prompt matrix 多样生成“的自动化过程就搭建完成了。
这个过程我们已经用在项目中,至于成效,大家的反馈概括为一句话就是——一键三连。
下面这张图就是上述过程部署在实际工作中的样子,载体是 comfyui,它和 webui 都是基于 stable diffusion 才能,但和 webui 的网页化界面不同,它将 SD 的才能分解成不同的节点,通过节点关联搭建来兑现各种功能。所以更加开放、自由、多源,并且可以兑现过程的自动化,极大的提升了实际应用中的效率,下一期我们会专门针对它来进行解读。
到这里,关于 IP-Adapter 背后的原理和应用就整理完了,它有非常多的优点,但也非常需求结合实际的场景来应用,还是那个观念,没有最好的方法,只有适合的方法。
希望大家用的开心,有什么想法建议,十万吨的欢迎,我们下期再见。
这里是枯燥的分割线
有点无聊,但也很有得聊
看过它的表现的成效之后,再从底层原理看看 IP-Adapter 到底有什么特别。
我们知道 stable diffustion 是扩散模型,它的核心作用机制就是对噪音的处理,prompt 可以看做是我们的目标,通过不断的去噪过程,向着目标越来越靠近,最终生成出预期的图片。
IP-Adapter 则是将图片单独提出作为一种提示特性,相比以往那种只是单纯的把图象特性和文本特性抽取后拼接在一起的方法,IP-Adapter 通过带有解耦交叉注意力的适配模块,将文本特性的 Cross-Attention 和图象特性的 Cross-Attention 区分开来,在 Unet 的模块中新增了一路 Cross-Attention 模块,用于引入图象特性。
相当于将原本 SD 中 img 和 prompt 拼合成一个向量的做法分开来, img 和 prompt 都会单独的组成向量, 然后交给 unet 层, 这样 img 中的特性就可以更好的被保留下来,从而兑现对图象特性更显性的继承和保留。
本质上 IP-Adapter 就是 txt2img 的过程,过程中 prompt 还是最关键的,只是中间使用 IP-Adapter 强化了参照图的提示作用。
作为对比,img2img 是直接将参照图传入 unet,去替换了原始的随机噪音,这样所有的生成结果都是建立在它的基础上,于是有了前面人和山君混杂的现象就比较好理解了。
以上,真的结束了。see you soon