NovelAIのeuler_ancestralをWebUIで再現する方法

はじめに

NoveAIの描写はサンプラーによって違いがあり、ローカル版のアスカテストはサンプラーにEulerを使用して再現していました。
Hello Aska test
しかし、これまでNAIデフォルトのサンプラーであるeuler_ancestralでは描写が変わってしまい、十分に再現することができませんでした。
Hello Aska test eulere_ancestral

今回、ソースコードの一部を書き換えることによってEuler a(euler_ancestral))でも再現できることが分かったので報告します。モデルはfullを使用します。また、設定のSampler parametersから、Eta noise seed deltaは31337、eta (noise multiplier) for ancestral samplersは0.667とします。0.667の方は必要ないかもしれません。

NovelAIのデフォルトのパラメーターを再確認

現在の初期設定では次のようになっています。Undesired ContentはLow Quality + Bad Anatomyが選択されており、プロンプトへnsfwを明示的に入れない限り、UCの先頭にnsfwが挿入されるようになっています。

Add Quality Tags = ON(先頭にmasterpiece, best quality, を追加する)
steps: 28, sampler: k_euler_ancestral, scale: 11
UC: nsfw, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry

ソースコードを書き換える

repositories/k-diffusion/k_diffusion/sampling.py を書き換える。

43行目以降

1
2
3
4
5
6
7
8
def get_ancestral_step(sigma_from, sigma_to, eta=1.):
    """Calculates the noise level (sigma_down) to step down to and the amount
    of noise to add (sigma_up) when doing an ancestral sampling step."""
    if not eta:
        return sigma_to, 0.
    sigma_up = min(sigma_to, eta * (sigma_to ** 2 * (sigma_from ** 2 - sigma_to ** 2) / sigma_from ** 2) ** 0.5)
    sigma_down = (sigma_to ** 2 - sigma_up ** 2) ** 0.5
    return sigma_down, sigma_up

このsigma_up = min~を以下のように書き換える。

1
2
3
4
5
6
7
8
9
def get_ancestral_step(sigma_from, sigma_to, eta=1.):
    """Calculates the noise level (sigma_down) to step down to and the amount
    of noise to add (sigma_up) when doing an ancestral sampling step."""
    if not eta:
        return sigma_to, 0.
    #sigma_up = min(sigma_to, eta * (sigma_to ** 2 * (sigma_from ** 2 - sigma_to ** 2) / sigma_from ** 2) ** 0.5)
    sigma_up = (sigma_to ** 2 * (sigma_from ** 2 - sigma_to ** 2) / sigma_from ** 2) ** 0.5
    sigma_down = (sigma_to ** 2 - sigma_up ** 2) ** 0.5
    return sigma_down, sigma_up

元の行は#でコメントアウトし、sigma_up = (sigma_to 2 * (sigma_from 2 - sigma_to 2) / sigma_from 2) ** 0.5に変えています。

チェックする

なるべく描写をそろえるために、Add Quality TagsはOFFにし、Undesired ContentはNoneとした上で、UCに次のものを入力します。
UC: nsfw, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry

プロンプト: hello world
steps: 28, sampler: k_euler_ancestral, scale: 11
シードは1に固定します。
次のような画像になれば成功!
hello world

補足情報

上記の変更だけでは、Add Quality TagsやデフォルトのUndesired Contentと細部がことなるようです。



NovelAIのUndesired ContentをNoneとし、内容を手動で指定するだけでなく、最後に","を追加すると再現性が高まる場合があります。

Edit
Pub: 25 Oct 2022 13:56 UTC
Views: 1949