特定のキャラクターの画像に特化して生成させる方法を記します。
LoRA (Low-Rank Adaptation) という学習モデルを作って実現します。
必要なPCスペック
最近のゲーミングPCを持っている方なら基本動きますが、GPUのVRAM容量が大きいほど学習にかかる時間が少なくて済みます。
GPUのVRAM 8GB以上、メモリ16GB以上あるのが望ましいです。VRAM 8GB未満では厳しいかもしれません。
VRAM 8GBでは1キャラクターあたりにかかる学習時間は約2時間です。
1つのLoRAモデルを作る過程でSSD/HDDの空き容量は5GBは確保したほうが良いです。
事前準備
まず下記の記事に沿ってStable Diffusionを導入しておきます。
https://civitai.com/articles/7558
次に学習したい画像に自動タグ付けするソフトをインストールします。Stability MatrixからStable Diffusion WebUI Forgeを起動し、Extensionsタブ>Install from URLを選択。
URL for extension's git repository の所に「https://github.com/picobyte/stable-diffusion-webui-wd14-tagger 」と入力し、「Install」ボタンを押します。
「Tagger」タブが増えていればOKです。
次に学習環境「kohya_ss」をインストールします。Stability Matrixの左メニューの「Packages」を押し、下の「+パッケージの追加」ボタンを押します。
上にある「Training」タブを押し、「kohya_ss」を選択。
「インストール」ボタンを押すと自動的に必要なソフトがインストールされます。
最後にこのページの右側にある「Attachments」のLoRA設定ファイルをダウンロードしておいて下さい。(pony_LoraSettings.json)
以上で学習環境が導入されました。
学習手順
①画像の用意
学習させたいキャラクターの画像を10~100枚用意します。20枚程度でも充分精度が出ます。
画像はそのキャラクターだけが単体で写っている画像を選び、できれば文字が写っていないほうが良いです。背景は写っていても構いませんが、背景なしのほうが精度が若干上がるらしいです。
そのキャラクターをいろいろな角度から見た画像や表情のバリエーションを混ぜておくと良いと思います。
画像サイズはできれば縦か横のどちらかが1024ピクセル以上あると学習精度が上がります。それ以上の大きな画像は学習時に自動的に1024x1024スケールにリサイズされます。
そのキャラクターを描かせるためのトリガーワードを決めます。一般的な単語と被らない文字列が良いです。(例:kurena⇒krn など)
適当な場所に好きな名前のフォルダ(キャラクター名など)を作り、さらにその中にフォルダを作り、用意した画像をそのフォルダに入れ、フォルダ名を「(数字)_(トリガーワード)」に変更します。
(数字)には200を画像枚数で割った値を整数で入れます。
例えば、画像を20枚用意してトリガーワードをkrnにする場合、フォルダ名は「10_krn」になります。
②タグ付け
Stable Diffusion WebUI Forgeを起動し、「Tagger」タブを選択。さらに「Batch from directory」タブを選択します。
①に先ほどのフォルダのパスを入れ、②にトリガーワードを入れ、③の「Interrogate」を押します。
しばらくすると処理が完了し、画像の特徴を表すタグが書かれたテキストファイルがフォルダ内に作られます。
ここまでできたらStable Diffusion WebUI Forgeを終了します。
③学習実行
Stability Matrixからkohya_ssを起動します。
「LoRA」タブを選択し、Configurationで開くボタンを押します。先ほどダウンロードした「pony_LoraSettings.json」を開いて下さい。これで学習条件の設定はだいたい完了です。
Pretrained model name or pathで学習に使うcheckpointモデルを指定します。ここは事前準備でダウンロードした「ponyDiffusionV6XL_v6StartWithThisOne.safetensors」を指定します。
Trained Model output nameでこれから作るLoRAファイル名を記入。
Image folderで用意した画像が入っているフォルダの親フォルダを指定して開きます。(例:10_krnフォルダの親フォルダを指定)
Output directory for trained modelで同じく親フォルダを指定します。
最後に一番下にある「Start training」を押すと学習が開始されます。
学習にかかる時間は、GPUのVRAM 8GBだと2時間くらいです。
学習が完了すると、先ほどの親フォルダに「(LoRAファイル名).safetensors」というファイルができているので、StabilityMatrix\Models\Loraフォルダにファイルを移動しましょう。
親フォルダには他に「(LoRAファイル名)-000001.safetensors」~「(LoRAファイル名)-000011.safetensors」のようなファイルが残っていますが、これらは学習の途中でできたLoRAモデルで、基本使わないので削除して下さい。
以上で学習が完了しました。
動作確認
LoRAモデルを作れたので、Stable Diffusionでキャラクターを描かせて動作確認してみましょう。
Stable Diffusion WebUI Forgeを起動し、②タグ付けでできたテキストファイルに書かれたプロンプトをPrompt枠にコピペします。
Loraタブを押し、先ほど作ったLoRAファイルを選択すると、Prompt枠にLoRAが組み込まれます。
この状態で「Generate」ボタンを押すと、キャラクターの画像が生成されます。
最初はいまいちな画像が生成されるかもしれません。LoRAの適用割合を変えたり(1⇒0.7~1.2に変えてみる)、いい感じのネガティブプロンプトを入れたりして調整してみて下さい。うまくいくと驚くほどクオリティの高い絵が出てくるようになります。
あとはPrompt枠にお題を追記すれば好きなキャラクターを好きなシチュエーションで描かせ放題です。😄