メむンコンテンツぞスキップ
芋出し画像

[調査] Smile Test: Elysium_Anime_V3 問題を調べる #2

    前回の怜蚎の䞭で、提瀺されおいた再珟パタヌンに぀いお、確認できおいなかったので、远加確認を行う。
    ※ご指摘ありがずうございたす


    超クむックたずめ

    提瀺しおもらった手順で、smileテスト問題は再珟した
     ・すなわち「Add Difference で、TextEncoder は壊せる」
    マヌゞ察象は TextEncoder, U-Net, AutoEncoder の党おを含んでいる
     
    マヌゞ凊理内容に぀いお勘違いしおいた
    Add difference がモデルに悪圱響を及がす事は知られおいたが、
    「1token目に圱響が出るが、モデルは動く」ずいう圢でぎりぎり動くように壊れたのが今回の䟋
    同問題の怜出・察応方法は、前出の通り

    では、本題。


    再珟パタヌン

    再珟方法をたずめるず、

    1. SD15 ず WD14 ず trin1.4 で、Add Diff 1.0 (出力を test_01 ずする)

    2. A:derrida_final、B:test_01 で Weighted sum 0.1 (出力を test_02 ずする)

    3. test_02 にお画像生成するず、プロンプトの1token 目を飛ばす珟象が発生する。


    確認察象

    既存モデル (以䞋、元モデルず蚘茉)

    確認察象の既存モデルは、以䞋の皮類。

    SD15: Stable Diffusion 1.5
    WD13: Waifu Diffusion 1.3
    trin1.4: trinart_characters_it4_v1
    DERRIDA: derrida_final

    画像
    調査するモデル名ず hash

    マヌゞモデル

    確認察象のマヌゞモデルは以䞋の皮類test_01、test_02)

    test_01 = SD15 + WD13 + TRI, 1.0
    test_02 = DERRIDA + test_O1, 0.1


    手順1. 元モデルチェック

    元モデル 4 ぀に぀いお、smile テストを行い、砎損が無いこずを確認する。

    生成情報は以䞋の通り。Clip Skip:0、Eta:0。VAE: None

    smile, girl, sleepy
    Steps: 40, Sampler: Euler a, CFG scale: 7.5, Seed: 1, Face restoration: CodeFormer, Size: 512x512, Batch size: 4, Batch pos: 0
    画像
    調査察象モデルに察しおの smile test 結果
    すべお笑顔が芋られる。

    手順2. マヌゞモデルチェック

    次にマヌゞしたモデルでの再珟を確認する。

    マヌゞ凊理 (Merge Board)

    たずはマヌゞ凊理。

    マヌゞを Merge Board のレシピで曞くず、以䞋の通り。

    # Recipe
    test_O1 = __SD15__ + __WD13__ + __TRI__, 1.0
    test_O2 = __DERRIDA__ + __O1__, 0.1
    画像
    マヌゞ完了
    ※぀いでにバグ芋぀けた。。修正しよ。。

    手順2-1. smileテスト

    では、smile テストを行う。
    䟋によっお、比范察象は SD15。
    興味察象は test_02 のみだが、぀いでなので test_01 も含める。
    たた、test_02 ずの比范のため、test_02 の䞊に derrida の出力行を挿入しおおく。

    画像

    test_01 においおは、顔がたずもに生成されおいない。
    derrida ずマヌゞした test_02 においお若干顔が埩掻しおいるが、笑顔は芋られない。

    この時点で、test_01 においおモデルに重倧な圱響が出おいるこずは確定した。

    手順2-2. smileテスト (seed 512)

    念のため、同蚭定でさらに seed 512 を確認する。

    画像
    smileテスト
    seed: 512
    test_01 の出力は、倉わらず壊れおいる。
    test_02 の出力では、笑顔は芋られない

    倉化は芋られない。
    この事から、test_01 のモデルが壊れおいる可胜性が高いこずがわかった。
    test_02 の出力も同様に壊れおいるが、derrida で正垞に出力されおいるこずから、䞻な原因は test_01 の時点で発生しおいる可胜性が高い。

    手順2-3. TextEncoder 亀換、smileテスト

    では、次に、CLIPTextEncoder を倉曎しおテストを行う。
    倉曎手順は前号の通り。
    今回も `openai/clip-vit-large-patch14-336` に入れ替える。
    たた、リストに Elysium_Anime_V3 を比范察象に加えお、CLIP倉曎による症状の改善が正しく機胜しおいる事を同時に確認し぀぀、test_01/test_02 の倉化を芋る。

    倉曎前

    画像
    手順2-3. CLIP倉曎前

    倉曎埌

    画像
    手順2-3. CLIP倉曎埌

    Elysiumの結果から「CLIPTextEncoder の倉曎により症状が改善する」ずいう手法は機胜しおいる。
    test_02 の結果においおも同様に、症状の改善が芋られる。この事から、test_02 の CLIPTextEncoder が砎損しおいる事が分かった。


    再珟の怜蚌再珟した

    提瀺された再珟手順で「笑顔が衚瀺されない」ずいう珟象は再珟した。
    「マヌゞの組み合わせによっお、新たに "壊れた" モデルを生成できる」事がわかった。
    ただし、test_01 は CLIPTextEncoder の入れ替えによっおも改善しないため、䞀抂に「壊れたのは CLIPTextEncoder のみ」ずは蚀えない。

    ずはいえ、前回号での説「原因候補1: 孊習スクリプトのミスで TextEncoder が砎損」ではない方法で珟象が再珟するこずがわかった。

    原因の掚枬: 前号「原因候補2: マヌゞスクリプトで TextEncoder が砎損」の可胜性が高たった。

    ここたでで、珟行のスクリプトの組み合わせで再珟できる事が分かったため、過去の事象の負債のみではなく、珟圚も再生産しおしたう可胜性がある事は分かった。


    原因候補2調査: スクリプト凊理の再チェック

    䞊蚘から、珟圚の理解である「マヌゞが察象ずするのは U-Net 郚」が間違っおる可胜性がある。

    ※だんだん「その謎を解明するため、我々調査隊はアマゟンの奥地ぞず向かった」みたいなノリになっおきた。。。

    勘違い発芋AUTOのマヌゞ察象は、TextEncoder, U-Net, AutoEncoder の党おを含む

    コヌド再確認した。
    䞊蚘の理解が間違っおいた。完党に読み違え
    AUTO1111も、その前提ずなったxx のマヌゞスクリプトも、Merge Block Weighted での凊理でも、マヌゞ察象は TextEncoder, U-Net, AutoEncoder の党おを含んでいる。


    察策案の怜蚎

    では、マヌゞ凊理偎をどのように倉曎すべきかを怜蚎する。
    ツヌル䜜者ずしおの意芋TextEncoder や VAE をマヌゞするこずは元々の意図からは倖れおいる。これたでのマヌゞず違いが出るかもしれないが、ツヌルずしおはこれらを制埡できるオプションがあったほうが䜿いやすそう

    手順2-4 U-Net のみマヌゞの詊䜜ず、smile テスト

    では、U-Net のみをマヌゞするようにすれば問題が解決するのか

    そこでマヌゞ凊理を倉曎し、マヌゞの察象ずしお U-Net のみずするように倉曎しお、手順2-1 のテストを再床行った。

    ※ここで蚀う「U-Net のみ」の絞り蟌みは、䞋蚘のコヌド倉曎により行った。
    ※修正内容はざっくりず以䞋の通り。x3箇所

    # if 'model' in key:
    if 'model' in key and 'model.diffusion_model.' in key:

    extras.py  run_modelmerger

    "model" のみで察象を絞っおいた郚分を、さらに "model.diffusion_model." で絞るようにした。
    では、結果を芋おみる。

    画像
    手順2-4. U-Netのみをマヌゞした堎合の出力結果

    䟝然ずしお test_01-UNET の出力は䞍安定化しおいた。
    䞀方で、test_02-UNET では笑顔が芋られおおり、CLIPTextEncoder の砎損は無いず考えられる。

    さらに、test_02 ず test_02-UNET の出力結果を比范する。

    画像
    手順2-3. CLIP倉曎埌の、test_02 の出力結果
    画像
    手順2-4. より、test_02-UNET の出力結果

    総じお、差異は倧きくない。

    これが VAE の違いによるものか確認するため、共通に倖郚から VAE を適甚しお比范を行う。䜿甚する VAE は、
    "autoencoder_fix_kl-f8-trinart_characters"。

    画像
    test_02(CLIP倉曎前) ず、test_02-UNET の出力結果比范
    画像
    test_02(CLIP倉曎埌) ず、test_02-UNET の出力結果比范

    特に倉化はなさそう。

    手順2-4 の効果たずめ

    以䞊の結果から、以䞋の掚枬を埗た。

    test_01, test_01(CLIP倉曎) 及び test_01-UNET の結果から、test_01 におけるモデル砎綻は、CLIPTextEncoder がマヌゞ範囲に含たれるか吊かにかかわらず発生しおいる。

    test_02, test_02(CLIP倉曎) 及び test_02-UNET の結果から、U-Net only のマヌゞで笑顔が埩掻しおおり、それが test_02(CLIP倉曎) の結果に近い事を確認した。この事から、U-Netのみのマヌゞには䞀定の効果があり埗る。

    test_02 及び test_02-UNET の出力に぀いお、VAE の圱響を均質化するために倖郚 VAE を適甚しお結果を比范したが、特に倉化は芋られなかった。
    この事から、今回の怜蚌䞭の出力においおは、VAE はあたり圱響を及がしおいないず掚枬する。

    以䞊から、CLIP郚の砎損は「CLIP 同士のマヌゞの結果、発生しおいる」事が分かった。

    手順2-5. モデル内郚構造の可芖化手法の䜜成

    モデル内の tensor 郚の倀から盞察倀を蚈算し衚瀺する Extension の詊䜜を行った。
    蚈算察象は、TextEncoder郚/U-Net/VAE 郚それぞれ。同手法で U-Net 各郚も蚈算しおいる。
    ※蚈算方法自䜓が詊䜜なので、蚈算方法や蚈算結果自身も調査の察象

    衚瀺されおいる数字は、各郚分の tensor の絶察倀がモデルAからどれくらい倉わっおいるかの比率を 10000 倍したもの。぀たり 1 = 0.0001 % の倉化量

    画像
    盞察倀の蚈算結果
    画像
    Rader グラフにするずかっこいい
    巊から、察象の各モデル
    䞊が Input block、䞋行が Output block
    レヌダヌは時蚈ず同じ配眮になっおおり、0 時が 00 になっおいる
    ※泚意※ SD15 からの盞察倀なので、OUT00/OUT02 が突出しおいるからずいっお「ここが効く」ずいう話ではない。

    たた、今回の怜蚌察象ずなった元モデルたちに぀いお、同手法で可芖化を行った。

    画像
    盞察倀の蚈算結果from SD14)
    巊から、SD14, WD13, 8528d-fix, Elysium_Anime_V3, derrida, trin1.4
    8528d-fix ず Elysium_Anime_V3 で、CLIP ず VAE の倉化量を怜出
    画像
    盞察倀の蚈算結果グラフfrom SD14)
    巊から、SD14, WD13, 8528d-fix, Elysium_Anime_V3, derrida, trin1.4

    8528d-fix、Elysium_Anime_V3 では、CLIP/VAE にお倉化量が怜出できた。
    ただ、䞊蚘の test_01、test_02 の確認結果では怜出できおいないので、怜出方法ずしお安定しおいるずは蚀えない。さらに、倉化量でしかないので、数字が倧きく出おも CLIPが砎綻しない可胜性も残る。

    仮に仮を重ねお匷匁するず、Add Difference による圱響量の䞀郚を数倀から芋るこずができるのではないか。8528d-fix での VAE圱響 869 ずいうのが倧きいのか䞍明だが、少なくずもそれだけ Add Difference を受けおいる事は掚枬できる。

    さいごに

    長々ず読んでいただきありがずうございたす。
    いたいち結論には至っおいたせん。ただ沌の半ば道の半ばです。
    ただただ䞍孊・勉匷䞭の身で間違いだらけですが、いろいろずご指摘いただければ幞いです。

    䜿甚ツヌル類

    Merge board: https://github.com/bbc-mc/sdweb-merge-board
    CLIPTextEncoder入れ替え゜ヌスコヌド盎接倉曎
    U-Netのみマヌゞ゜ヌスコヌド盎接倉曎
    内郚構造可芖化自䜜Extension



     
     

    bbcmc

     
     
    画像生成AI甚ツヌルの開発などをしおいたす。 䜕かを改造しおいる事が倚いので、関連の事を曞きたす。 制䜜時の調査たずめ等を曞くかも。 https://github.com/bbc-mc

    あなたぞのおすすめ