Koishi-Star / Euler-Smea-Dyn-Sampler

A sampler base on Euler, aim at generating better picture/一种基于Euler的采样方法,旨在生成更好的图片
Apache License 2.0
158 stars 13 forks source link

少了括號? #7

Open AG-w opened 5 months ago

AG-w commented 5 months ago

這邊看起來你是想要做切換

            if i + 1 // 2 == 1:
                x = dy_sampling_step(x, model, dt, sigma_hat, **extra_args)
            if i + 1 // 2 == 0:
                x = smea_sampling_step(x, model, dt, sigma_hat, **extra_args)

但是 1//2 只會等於 0 括號起來才是你要的?

            if (i + 1) // 2 == 1:
                x = dy_sampling_step(x, model, dt, sigma_hat, **extra_args)
            if (i + 1) // 2 == 0:
                x = smea_sampling_step(x, model, dt, sigma_hat, **extra_args)
Koishi-Star commented 5 months ago

你是对的。我会测试修正后的版本。

AG-w commented 5 months ago

你好,想問這段的作用是什麼? 不管是 if (i + 1) // 2 == 0:if i + 1 // 2 == 0:,i 只有在 0 才能滿足, 那怎麼不直接 i == 0 就好?

Koishi-Star commented 5 months ago

你好,想問這段的作用是什麼? 不管是 if (i + 1) // 2 == 0:if i + 1 // 2 == 0:,i 只有在 0 才能滿足, 那怎麼不直接 i == 0 就好?

你是对的,但这样写和dy_step中的if i // 2 == 1相对应,看起来很酷XD。

好吧,实际上是机缘巧合的产物,原本的想法是i % 2 == 1,使这些step在每一个奇数步骤产生作用,但经过测试,我发现使dy_stepsmea_step在0-4步中的1-2步发挥作用效果最好。我也测试了使这些step在每一步中生效、拟合正弦步骤生效,但效果最好的依旧是现在的方案。

理论上这是因为sigmas在0-4步取值最大,对于图片的影响最大。本方法的核心思想是“self-reference”,使ai从一个更小的潜空间里进行自参考,以提高图片质量。事实证明这非常成功,图片的美学评分和质量肉眼可见地提高。(非要追求数学原理,就是多维张量在不同尺度的再映射,或者矩阵的子矩阵的解对于求解的优化,我数学一般般)

如果你想做进一步研究,我这里也有许多废案,例如使dy_step取图片的1/3,1/4,1/5,1/6,但效果都不理想。1/3,1/4,1/5的方案看起来对于质量没有提升(但也能改善图片构图),而1/6的方案使得ai把图片塞在一个很小的范围内。

我也测试了将图片划分成(2x2)小块取平均的效果(dy_avg),这样做并不能改善质量和美学,但能在非常大的尺度上生成图片而避免结构崩坏(例如在sd1.5直出1024x1536,甚至指出2048x2048)。

而smea的核心思想与dy相反。我注意到图片放大后再进行潜空间缩小,图片就会变得发亮,这与Nai3的smea描述类似。于是我尝试了smea方法,但效果平平,没有达到我的预期。

AG-w commented 5 months ago

照原本的順序就是 smea > dy > dy,發現這樣很容易出現模糊背景 拿掉第二次的dy變成 smea > dy 的話,細節又會變少 剛剛試了dy > smea > dy ,這樣細節還有,背景也比較不會變糊