ウェブサイト検索

Stable Diffusion XLのためのLoRAモデルのトレーニング


紹介

数週間前、私たちはStability AIの研究者たちによる最新のStable Diffusionモデルのリリースを取り上げました。このモデルは、アップグレードされたVAEデザイン、拡張されたアーキテクチャ、改善されたテキストと画像の潜在的理解、そして基準解像度が2倍になっています。これらの能力は、さまざまなスタイル、形状、特徴を幅広くカバーする優れた性能と相まって、Stable Diffusion XL(SDXL)が過去数ヶ月間でテキストから画像への合成における標準モデルへとスムーズに移行することを可能にしました。

そのため、昨年リリースされた1.xおよび2.xバージョンのモデルに追加された多くの同様の機能やアップグレードを利用できる能力への需要が高まっています。LoRAモデリング、ControlNet、EBsynth、およびAutomatic1111のWeb UI向けの他の人気の拡張機能など、これらのモデルの基本機能への追加は、Stable Diffusionが広い世界の注目を集めるのを可能にし、ユーザーはStable Diffusion XLでも同様の機能を求めています。

この記事では、Fast Stable Diffusionプロジェクトのために作成された便利なワークフローを使用して、任意のスタイルやテーマを使ったトレーニングされたLoRAモデルの作成方法を説明します。このプロセスを、この記事の著者の顔のサンプル写真を使用してモデルをトレーニングしながら段階的に説明し、その後、AUTOMATIC1111のStable Diffusion Web UIとComfyUIの両方で使用する方法を示します。

前提条件

  • ハードウェア要件:

    • 十分なVRAMを備えた互換性のあるGPU(推奨は少なくとも16GB)。
    • 十分なシステムRAM(32GB以上)。
  • ソフトウェア要件:

    • Python(バージョン3.7以上).
    • PyTorchやTransformersなどの深層学習ライブラリ。
    • 低ランク適応を実装するためのLoRAライブラリ(例:PEFT)。
  • データ準備:

    • 目的の拡散タスクに適したデータセットが、正しくフォーマットされています。
    • データセットをクリーンアップし整理するためのデータ前処理ツール。
  • 親しみ:

    • 深層学習とモデル訓練の基本的な理解。
    • Pythonプログラミングとコマンドラインインターフェイスの経験。

低ランク適応 (LoRA) モデル

LoRAは低ランク適応を意味します。これらのモデルは、拡張モデルを用いて拡散モデルを微調整することを可能にします。簡単に言うと、LoRAトレーニングモデルは、Stable Diffusion(およびLLaMAや他のGPTモデルなどの多くのモデル)をキャラクターや特定のスタイルなどの異なる概念に対して簡単にトレーニングできるようにします。これらのトレーニングされたモデルは、その後、他の人が自分の生成に使用するためにエクスポートできます。

私たちは、LoRAを使用してStable Diffusionを用い、望ましい対象やスタイルを捉えた低コストのモデルを訓練し、その後、完全なStable Diffusionモデルでそのエンティティとより良く連携できるようにします。

ファスト ステーブル ディフュージョン

Fast Stable Diffusionプロジェクトは、GithubユーザーのTheLastBenによって主導され、作成されたものであり、すべてのスキルレベルのユーザーにとっての体験を最大化するインターフェースでStable Diffusionモデルにアクセスするための現在の最良の方法の1つです。これらのUIのFast Stable Diffusion実装は、ハードウェアを最大限に活用し、合成するすべての画像の生成時間を最適に短縮することを可能にします。

現在、Fast Stable DiffusionはAUTOMATIC1111 Web UIとComfyUIの両方をサポートしています。これらの詳細については、上記のリンクを使用してそれぞれのオリジナルのウェブページにアクセスしてください。

デモ

前回はモデルのためにカスタムGradioインターフェースを作成しなければなりませんでしたが、今回は開発コミュニティがStable Diffusion XLのために多くの優れたツールとインターフェースを提供してくれたおかげで、幸運です。このデモでは、まずJupyter Notebookを使用してStable Diffusionをセットアップする方法を示します。このプロセスはTheLastBenによって私たちのためにIpythonノートブックで自動化されているため、モデル自体は自動的にキャッシュにダウンロードされます。このキャッシュはストレージ制限にカウントされないので、ダウンロードサイズについて心配しないでください。次に、特定の主題やスタイルに合わせた画像の取得または選択に関するベストプラクティスについて説明します。その後、LoRAのトレーニングプロセスのためにキャプションを適切に提供する方法を示します。最後に、著者自身の顔でトレーニングされたLoRAモデルを使用して作成したサンプル写真をいくつか紹介します。

セットアップ

ノートブックが起動したら、最初の2つのコードセルを実行して、パッケージの依存関係をインストールし、SD XLベースモデルをダウンロードしてください。

Install the dependencies

force_reinstall= False

Set to true only if you want to install the dependencies again.

#--------------------
with open('/dev/null', 'w') as devnull:import requests, os, time, importlib;open('/notebooks/sdxllorapps.py', 'wb').write(requests.get('https://huggingface.co/datasets/TheLastBen/PPS/raw/main/Scripts/sdxllorapps.py').content);os.chdir('/notebooks');import sdxllorapps;importlib.reload(sdxllorapps);from sdxllorapps import *;Deps(force_reinstall)

この最初のセルは実際にすべてをインストールします。また、Latest_Notebooksというタイトルのフォルダーが作成されることに気付くかもしれません。ここでは、PPSリポジトリに含まれるノートブックの更新されたバージョンに継続的にアクセスできます。次のセルでは、HuggingFaceからモデルのチェックポイントをダウンロードします。

Run the cell to download the model

#-------------
MODEL_NAMExl=dls_xl("", "", "")

それが完了したら、このチュートリアルのもっと難しい部分を始めることができます。

画像選択とキャプション付け

LoRA(またはテキストインバージョン埋め込み)モデルの画像を選ぶことは非常に重要です。簡潔に言えば、トレーニングのために選択した画像は、最終的な画像出力に深い影響を与えます。動作するLoRAモデルをトレーニングする際には、望ましい主題やスタイルの特徴をさまざまな設定、照明、角度で含む画像を選ぶことが重要です。この多様性は、LoRAに必要な柔軟性をもたらし、出力に期待する多様性と多様性を与えてくれます。

その点について、このチュートリアルでは自分の顔でSD XL LoRAをトレーニングする方法を示します。最高の写真を選ぶ際のポイントの多くは、スタイリスティックなLoRAにも適用されるので、それが目標だとしても心配しないでください。

まず、Stable Diffusion LoRAの画像データセットに必要なすべての特徴の簡単なリストを作成しましょう:

  • 単一の主題またはスタイル:トレーニング画像に複数のエンティティが存在する場合、はるかに難しくなります。最良の結果を得るためには、異なる方法で特徴づけられた単一の主題に焦点を合わせてください。
  • 異なる角度:被写体が入力されたトレーニング画像の異なる角度から表現されることが重要です。これにより、LoRAが被写体の単一の視点に機能的に過学習することを防ぎます。これにより、モデルの最終的な柔軟性が大きく制限されます。
  • 設定: 主題が常に同じ設定、つまり背景、服装などにある場合、これらの特徴はLoRAの結果に引き継がれます。単一のセッションで撮影された画像から構成されたデータセットには注意が必要です。対照的に、全く空白の背景は、さまざまな背景を使用するのとほぼ同じように機能するようです。
  • ライティング:最も重要な特性ではありませんが、それでも関連性があります。さまざまな画像に対して異なる種類のライティングを使用することを検討してください。これにより、生成された画像全体で被写体をさまざまな場所に配置しやすくなります。

では、それを考慮に入れて、いくつかの迅速な画像を撮りましょう。私たちは白い壁の前でセルフィーを撮ります。例として5枚使用しましょう。このデモに使用するものを下に見てみましょう。

これらは私たちが使用した画像です。明らかにわかるように、これらはただのシンプルな自撮りです。モデルが被写体の顔を完全に見ることができるように、私たちはそれぞれ少し異なる角度に頭を向けて撮影しました。このようなデータセットから始めることをお勧めします。被写体の顔や体が同じような位置にあることが望ましいです。

Remove_existing_instance_images= True

Set to False to keep the existing instance images if any.


IMAGES_FOLDER_OPTIONAL= ""

If you prefer to specify directly the folder of the pictures instead of uploading, this will add the pictures to the existing (if any) instance images. Leave EMPTY to upload.


Smart_crop_images= True

Automatically crop your input images.


Crop_size = 1024

1024 is the native resolution

Check out this example for naming : https://i.imgur.com/d2lD3rz.jpeg


#-----------------
uplder(Remove_existing_instance_images, Smart_crop_images, Crop_size, IMAGES_FOLDER_OPTIONAL, INSTANCE_DIR, CAPTIONS_DIR)

ここに画像アップロードの設定を保持するコードスニペットがあります。これらは各セッションに固有であり、最後のコードセルを実行することでクリアできます。それでは、キャプション生成プロセスを見てみましょう。

次のセルには、私たちのために手動キャプションコードGUIが設定されています。ここでは、適切なキャプションで画像にラベルを付けていくことができます。トレーニングプロセスの効果を高めるために、各キャプションはできるだけ詳細にすることをお勧めします。データセットが大きいためにこれはあまりにも煩雑な場合、Stable Diffusion Web UIのトレーニングタブを使用して、各画像に対応するキャプションをテキストファイルとして自動生成することができます。その後、コードセルでそのパスを指定し、この手動キャプション付けをまったくスキップすることができます。

これが全て終わったら、私たちはトレーニングを始めることができます。

LoRAモデルのトレーニング

Resume_Training= False

If you're not satisfied with the result, Set to True, run again the cell and it will continue training the current model.


Training_Epochs= 50

Epoch = Number of steps/images.

Learning_Rate= "3e-6"

keep it between 1e-6 and 6e-6


External_Captions= False

Load the captions from a text file for each instance image.


LoRA_Dim = 128

Dimension of the LoRa model, between 64 and 128 is good enough.


Resolution= 1024

1024 is the native resolution.


Save_VRAM = False

Use as low as 9.7GB VRAM with Dim = 64, but slightly slower training.

#-----------------
dbtrainxl(Resume_Training, Training_Epochs, Learning_Rate, LoRA_Dim, False, Resolution, MODEL_NAMExl, SESSION_DIR, INSTANCE_DIR, CAPTIONS_DIR, External_Captions, INSTANCE_NAME, Session_Name, OUTPUT_DIR, 0.03, Save_VRAM)

ここにLoRAトレーニングを実行するためのコードセルがあります。ここではトレーニングプロセスに影響を与えるために変更できる特定の変数がいくつか定義されています。まず、トレーニングを実行して希望通りに動作しない場合、Resume_Training変数を使用してトレーニングを再開できます。次に、Training_Epochsカウントは、トレーニングプロセスが各個別の画像を見直す回数を延長するのに役立ちます。必要に応じて学習率を調整して、長いまたは短いトレーニングプロセスでの学習を改善できますが、制限があります。最後に、LoRA_Dimを128に変更し、Save_VRAM変数をTrueに切り替えるための鍵であることを確認してください。さもないと、Free GPUでの実行は難しくなります。

設定を選択したら、セルを実行できます。その後、モデルチェックポイントは自動的にComfyUIまたはAUTOMATIC1111 Web UIの正しい場所に保存されます。

トレーニングが完了したので、ComfyUI または Stable Diffusion Web UI のいずれかに飛び込んで LoRA を実行できます。これにより、モデルをテストし、トレーニング手順を反復するのが簡単になります。

Stable Diffusion XLでLoRAモデルを実行する

トレーニングが完了したので、ComfyUI または Stable Diffusion Web UI のいずれかに飛び込んで LoRA を実行できます。これにより、モデルをテストし、トレーニング手順を反復するのが簡単になります。

User = ""

Password= ""

Add credentials to your Gradio interface (optional).


Download_SDXL_Model= True


#-----------------
configf=test(MDLPTH, User, Password, Download_SDXL_Model)
!python /notebooks/sd/stable-diffusion-webui/webui.py $configf

この例ではAUTOMATIC1111 UIを使用するので、最後から2番目のコードセルまでスクロールしてそれを実行してください。これにより、Web UIが自動的に設定され、任意のWebブラウザーからアクセスできる共有リンクが作成されます。そのリンクをクリックしてWeb UIを開いてください。

ここから、生成ボタンの下にある黄色い円のついた赤と黒の小さなシンボルをクリックしてLoRAのドロップダウンを開き、LoRAタブを選択することができます。そして、新しく訓練したLoRA(セッション名が変更されていなければ「Example-Session」)を選択します。それから、LoRAを最後に含めたテストプロンプトを入力します。以下は、「カラフルなローブと杖を持った魔法使い、そばかすのある赤毛の男性がマーリンの格好をしている lora:Example-Session:.6」というプロンプトを使って作成したサンプル写真です。

私たちが見るように、SDモデルによって提供されたこの新しいコンテキストでは、元の主題のコア特性が維持されています。さまざまなトレーニング対象やプロンプトを試して、最良の結果を得てください!

締めくくりの考え

Stable Diffusion XLモデルは非常に大きな可能性を示しています。このプロジェクトは、SD XLでLoRAモデルをトレーニングすることを可能にし、この可能性をさらに引き出し、SD XLが画像拡散モデルの事実上の方法論として1.5モデルを容易に置き換える準備が整っていることを示しています。

関連記事: