見出し画像

壊れた画像生成AIモデルをStableDiffusion WebUI環境で修復する方法

たまに見かける「fix」が付いた画像生成AIモデルは、壊れた画像生成AIモデルを修復したものです。この修復により、本来の表現力を取り戻すことができます。

1. はじめに

1-1. そもそも壊れた画像生成AIモデルとは?

StableDiffusionで使用されている画像生成AIモデルの仕組みは、大まかに言えば言語を解析し、それをイメージに変換して画像を生成する仕組みです。しかし一時期のバグにより、言語解析結果からイメージ生成部分へのつなぎが一部破損している場合があります。この状態では、解析結果の一部が無視され、特定のプロンプトがうまく機能しないか、効果が薄れることがあります。使う分には特に問題はありませんが、表現の幅は制限される可能性があります。

1-2. 実際にどれくらい違うの?

実際に壊れた画像生成AIモデルと修復されたモデルを比較してみました。上段は壊れた画像生成AIモデルであり、下段は修復されたモデルです。両者を比べると、大きな違いが見受けられます。

1girl Negative prompt: EasyNegative Steps: 20, Sampler: Euler a, CFG scale: 7.5, Seed: 3928721671, Size: 512x768, Model hash: a5ec420893, Model: BAD_CLIP, Clip skip: 2, ENSD: 31337, Version: v1.2.1-963-g89f9faa6

※ 画像の学習データ自体は同じです。

1-3. 修復する方法

修復方法には、コマンドラインを使用する方法と、StableDiffusion WebUIの拡張機能であるModel toolkitを使用する方法があります。この記事では、初心者でも簡単に修復できるModel toolkitを利用した方法を解説します。一方、コマンドラインを使用するツールは初心者向けではないですが、壊れている状態の詳細が分かるため、将来の参考になる可能性がありますので、覚えておくことは有益です。


2. Model toolkit編

2-1. Model toolkitとは?

画像生成AIモデルのメンテナンスに使用できるツールです。壊れた画像生成AIモデルを専門的に修復するためのツールではありません。このツールは、Pruned化やfp16化なども行うことができますので、自分で画像生成AIモデルを作成している方にとって便利です。

2-2. 執筆時点での環境

この記事を書いている時点での私の環境をご紹介しますが、バージョンが変更された場合には差異が生じる可能性があります。(数年後にこの記事を見る読者のための注意事項ですので深く気にする必要はありません)

  • Automatic1111 WebUI version: v1.2.1-963-g89f9faa6
    Commit hash: 89f9faa63388756314e8a1d96cf86bf5e0663045

  • python: 3.10.6

  • torch: 2.0.1+cu118

  • xformers: N/A

  • gradio: 3.29.0

2-3. Model toolkit のインストール

WebUIを起動します

拡張(Extentions)タブを開いて拡張機能リスト(Available)タブを開き、リストを読み込みます(Load from:)。

リストからModel toolkit を選び、インストールします。

インストール済(Installed)タブでStable-diffusion-webui-model-toolkitがインストールされていることを確認し、適用してUIを再起動(Apply and restart UI)します。

Toolkitタブが増えていればインストール成功です。

2-4. 画像AIモデルが壊れているか確認

Sourceからチェックしたい画像生成AIモデルを選択し、Loadで読み込みます。

以下は、得られた結果です。この画像生成AIモデルは正常です。
Full版の場合、ここで保存するとPruned版が生成されますが、今回は関係ありませんのでスキップします。
別のモデルを読み込みたい場合は、クリアボタンを押して解放してください。

今度は壊れた画像生成AIモデルを読みました

CLIP has incorrect positions, missing: 7, 14, 19, 23, 28, 33, 38, 41, 43, 46, 51, 56, 61, 65, 66, 71, 76.
その部分が壊れている部分です。非常に多くの箇所が壊れています。

5.実際に修復

Advancedタブに切り替えます。
ActionのFileから正常な画像生成AIモデルを選択します。壊れた画像生成AIモデルに近いモデルを選ぶことが望ましいです。今回はマージモデルの元となったモデルを使用します。選択後は、「Import」ボタンを押してモデルを読み込みます。

今回はCLIPが壊れていたのでCLIP-v1を選択します。
Saveを押したら壊れた画像生成AIモデルのCLIP部分をImportした画像生成AIモデルのCLIP部分に差し替えられたモデルが生成されます。

生成されたらクリアを押して開放します。
開放しないと元の情報が残ったままなので積みます。

6.修復されたか確認

Basicタブに戻り、Refreshを押してモデルの再読み込みをします。
再読み込みをしないと生成したモデルが表示されずにあれ?ってなるので注意です。
先ほど生成されたモデルを選択し、Loadします。

壊れた部分が検出されなくなりました。

実際に出力してみました。
上段が修正したモデル、下段が破損したモデルです

braid, long silver hair, bubble, air_bubble, underwater, fish, submerged, solo, water,(Impressionism:1.4), arms behind back Negative prompt: EasyNegative, (worst quality, low quality:1.4), bad-artist-anime, (monochrome:1.2),nsfw Steps: 20, Sampler: Euler a, CFG scale: 7.5, Seed: 3439943254, Size: 512x768, Model hash: 1469cae522, Model: GOOD_CLIP, Clip skip: 2, ENSD: 31337, Version: v1.2.1-963-g89f9faa6

7.おまけ:全然のモデルのCLIPを使ってみる

修復には元モデルに近いモデルのデータを使用しましたが、他のAI画像モデルのデータも使えます。
BLIP-2採用で自然言語に強いと噂のCounterFeit V3.0を借りてみます

ささっと破損したCLIPをCounterFeit V3.0のCLIPに換えたモデルを作ります。
ちなみにCLIPを変えるとBLIP-2が適用されるかは知りません。
(それも含めた実験です。)
※ 流用するモデルのライセンスには注意してください。

braid, long silver hair, bubble, air_bubble, underwater, fish, submerged, solo, water,(Impressionism:1.4), arms behind back Negative prompt: EasyNegative, (worst quality, low quality:1.4), bad-artist-anime, (monochrome:1.2),nsfw Steps: 20, Sampler: Euler a, CFG scale: 7.5, Seed: 2318512810, Size: 512x768, Clip skip: 2, ENSD: 31337, Version: v1.2.1-963-g89f9faa6

上段は修復モデル、中段はCounterFeitV3のCLIPモデル、下段は破損モデルBLIP-2になったのかはわかりませんが、何かしらの変化が起きたことは間違いありません。次は自然言語を使って生成してみます。

A cat is lying on the sofa and yawning. The weather is nice today and I feel good.
Negative prompt: EasyNegative, nsfw
teps: 20, Sampler: Euler a, CFG scale: 7.5, Seed: 2026885535, Size: 512x768, skip: 2, ENSD: 31337, Version: v1.2.1-963-g89f9faa6

よくわかりませんね。修復に使用した元のモデルもCounterFeitV3と同時期の最新モデルですので、ほとんど差が出ない可能性もあります。ただし、別物になったことは間違いありません。

この記事が気に入ったらサポートをしてみませんか?