本文主要内容是stable diffusion绘图中我使用的几种低分辨率方法放大的对比。经验有限,还有一些脚本和模型并没有接触过,这里只讨论hires fix,loopback scaler,以及最新的controlnet tile模型的对比。
首先是原图,分辨率360x640
以下均为放大到1920x1080,即放大到原图3倍的效果。
sampler使用R-ESRGAN 4x Anime6B,基本上就是对原图的原样放大,没有添加太多细节,没什么可说的。
我这里使用了badhandv4 的embedding,所以放大以后小图崩坏的手被修正了一部分
最近用得比较多的一个,可以通过每步回送放大的方式逐步增加细节,效果很不错。优势就在于能添加细节,而且通过对低分辨率的原图上进行涂抹等修改,可以人为制造更多的因素,在 plain background这种简单背景的基础上,可以画出一些很精致的环境和物品要素,而且能在很大程度上保留原图的要素,不会改得过大。
问题也比较明显,图生图放大的每一张都依赖前一张,如果中间某一部布走歪了,就会顺着歪路往下走。比如人物有个翘二郎腿的动作,在小图里正常,中间一步画错,后面基本上全错。
这张图使用了6次loopback,在第一步就没识别对手,结果成品的手也糊成一团了,这点甚至不如hires fix。
最新的controlnet 1.1 中增加了tile 模型,能够对原图进行分割放大。区别于以往的分割放大方法,controlnet在识别某一分区内容不符合提示词时会无视他们,保证不会出现每个分区都各自应用了提示词结果画出来几个方块拼图的结果。我这里没有用到图生图放大,而是用了1.1版本的tile sample预处理器,对原图进行缩小后再靠controlnet控制内容,并且放大同时增加细节。
这次controlnet提供了三种控制类型,分别是平衡,偏向提示词,和偏向controlnet自由发挥。以下三张依次展示了控制变量下三种类型的结果。
可以看到不管是哪种,最终成品都增加了大量细节,同时保持了角色特征和构图的要素。
比较反直觉的地方在于,“偏向controlnet自由发挥”反而是最贴近原图的,选择偏向提示词且提示词提供的要素不多时候,controlnet就会按照自己识别的结果开始自由发挥。至于平衡,看起来并不平衡。
以上几种方式很难说哪种最优,对于不同的画图想法有不同的方式。
比如对于没什么思路的人,我个人经验是,可以先画白底图或者plain background起手,再利用loopback scaler,通过新增提示词来把画面上的瑕疵(或者是你制造的一些“瑕疵”)转化为你想要的背景和物体要素。这种方式适合小图放大,如果你的初始图已经有很多背景和细节要素了,那么这种方式也可以用来进一步细化,不过增加细节程度和降噪程度需要针对调整。
如果你手上已经有了一张细节丰富的大图,那么传统的hires fix可能更适合,或者搭配其他的放大算法,比如tiled diffusion这种插件来进一步放大生成超高分辨率的图。
当然,除了选择方法和模型,提示词和模型本身也很重要。这里还没考虑不同controlnet权重,指导的介入范围,以及降采样的比例等等,有太多可以调的参数了。
总的来说,比起精调提示词以后指望一步出完美大图,现在选择构图和角度理想的小图作为“种子”,然后使用放大方法增加细节的出图方式可能更容易出好图。
毕竟人工智能嘛,人工有多少,智能就有多少,尤其是在AI绘图这种场景,人的参与越多,画的上限就越高。
最后放两张稍微构思了一点提示词的对比图,使用controlnet放大而来。