🥰

stable-diffusion-webuiで遊ぼう ~環境構築からLoRAによるfine tuningまで~

2023/08/24に公開

はじめに ~人類総アーティスト時代~

現在私たちは「人類総アーティスト時代」を迎えています。生成AIは、誰もがアーティストになることが可能となる技術を私たちに提供してくれました。

そこで今回は去年から急速に広がり出して、もうすっかりみんな使っているStable Diffusionでお絵描きしてみます。

この記事でやること

  • stable-diffusion-webuiの環境構築
  • txt2imgの画像生成
  • img2imgの画像生成
  • LoRAによるfine tuning

それぞれが何なのかまで調べながら記事を書いてみました。ぜひ役立ててください。

ちなみに動作環境は以下の通りです。

  • OS: OSX Monterey
  • チップ: Apple M1 Pro
  • メモリ: 16GB

Stable Diffusionとは?

Stable Diffusion(ステーブル・ディフュージョン)は、英国のStability AI社が開発した画像生成AI技術です。この技術を使うと、ユーザーが入力した文章に基づいて、高品質の画像を生成することができます。

例えば、「アマゾンの密林」や「夕暮れの海辺の風景」など、様々なシーンを英語のキーワードで入力するだけで、自動で画像を生成できます。Stable Diffusionは、2022年に初めてリリースされました。

人物の生成が得意で、特に顔の表情や髪の質感などのクオリティが高いです。また、画風を表す英単語を入力することで、写真のようなリアルな画像だけでなく、イラスト風の画像も生成できます。

ローカル環境での stable-diffusion-webui の構築

stable-diffusion-webuiとは?

stable-diffusion-webuiは、噂のStable Diffusionをローカルマシンや、Google Colabなどで簡単に環境構築できるように最適化されたライブラリです。これにより、Stable Diffusionモデルの設定や使用プロセスが簡素化され、プログラミングの知識がないユーザーでも利用しやすくなりました。

ローカル環境で stable-diffusion-webui をビルド:

stable-diffusion-webuiをローカル環境で利用するにはPythonが必要です。
まずはpythonのバージョン管理を行うpyenvと、それを利用するためのhomebrewからインストールします。

  1. brewのセットアップ
    Homeberwからインストールできます。
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  1. Pythonをインストールする: システムにPythonがインストールされていることを確認してください。インストールされていない場合はPythonの公式サイトからダウンロードしてインストールしてください。私は基本pyenvでバージョン管理をしています。
$ brew install pyenv
$ pyenv install 3.10.12
  1. stable-diffusion-webuiのリポジトリをクローン
$ git clone --depth=1 --branch v1.2.1 https://github.com/AUTOMATIC1111/stable-diffusion-webui

3. モデルのダウンロード

stable-diffusion-webuiでは好きなモデルを利用して画像生成を行うことが可能です。

おすすめサイト

日本のアニメ風イラストを生成するのに適したモデルには、例えば以下が有名です。

  • AbyssOrangeMix3(AOM3): 品質と機能を向上させた高品質でリアルなイラストを生成するモデル、AOMの最新バージョン

  • Counterfeit: DreamBoothとMerge Block WeightsとMerge LoRAを使用してgsdfによって作成された、非常に芸術的なスタイルの高品質アニメモデル。

  • MeinaMix: 同じくgsdfによって作成された、芸術的なスタイルのハイクオリティなアニメモデル。

ダウンロードできたらモデルを以下のディレクトリに配置します。今日はCouinterfeitを利用してイラストを生成してみます。

$ ./models/Stable-diffusion/CounterfeitV30-v30.safetensors

4. 起動する。

インストールが完了したら、webui.sh(Linux用)またはwebui.bat(Windows用)ファイルを実行してWebUIを実行します。これによりサーバーが起動し、ブラウザでWebUIにアクセスするためのローカルアドレス(例:http://127.0.0.1:7860)が提供されます。

$ ./webui.sh

それではimg2txtで遊んでみる。

img2txtとは、テキスト情報をもとに画像を生成するプロトコルです。他にもimg2imgなど様々な生成プロトコルがあるので、たくさん遊びましょう。

ポジティブプロンプトを設定する

生成AIは基本的に言語により可能性空間を定義して、その中でランダムに生成されるガチャのようなものらしいです(専門家ではないので詳しくは分かりません)。

 masterpiece, best quality, extreme detailed, beautiful detailed face, delicate best hands , (1girl, solo):2.0, black sweatshirt, black shorts, beautiful red eyes, cute, brown hair, short hair , fullbody, pale skin, tokyo city, 4k, super-real, twilight-sky

ネガティブプロンプトを設定する

ネガティブプロンプトとは、「取り入れたくない」属性や構図を明示的に指定することで、ランダムな画像生成のクオリティを望むものへと収束する可能性を高めるものです。
例えば「指の本数がおかしい」「解剖学的におかしい」「著作権に引っかかる」などを避けたい時には、以下のようにネガティブプロンプトを指定します。

extra fingers,fewer fingers,(low quality, worst quality:1.65), (inaccurate limb:1.2), bad composition, inaccurate eyes, extra digit,fewer digits,(extra arms:1.2),  badhandv4,  watermark, bad anatomy, error, artist name, copyright name, company name, name tag, character name, single colored hair,  2girl, loli,  (duet , trio):1.5

あとは、高さや幅など好きなように指定します。

できた!!!楽しい!!!
ただ、膝の形がおかしいのでimg2imgで修正します。send to img2imgを押しましょう。これにより、既存の画像をもとにプロンプトを適用して新たな画像を生成することができます。
膝の形を解剖学的に正しい形になるようにプロンプトを追加します。

..., Anatomically correct knee

お、よくなりましたね!!
このように、テキストから画像、画像から画像を生成できるのがstable-diffusion-webuiの楽しいところですね。

さらに、コントラストを柔らかくして、淡い色でキラキラしているような画像にしてみましょう。

..., soft focus , light gradation watercolor , lens flare , glitter , glow , dreamy

LoRAを利用していい感じにする

次は東京の街をいい感じに飛んでいるように修正したいとします。プロンプトで一生懸命修正するのも良いですが、先人の知恵を借りましょう。

LoRAとは?

LoRAはLow-Rank Adaptationの略で、大規模な言語モデルをより高速かつ効率的にfine tuningする方法として開発された技術です。LoRAはモデルの出力をより少ないパラメータで特定のテーマやスタイルに向けて変更することができる点で革命的だったらしいです。
Stable Diffusionの文脈では、LoRAモデルは、特定の特徴やスタイルを持つ画像を生成する際にAIをガイドするのに役立ちます。

LoRAでfine tuningしてみる

  1. 目的のLoRAモデルをダウンロードする。
  2. ダウンロードしたLoRAモデルを stable-diffusion-webui/models/Lora/ ディレクトリに配置します。
    3.画像生成のプロンプトを作成する場合、プロンプトに<lora:LORA- FILENAME:WEIGHT>というキーフレーズを含めます。LORA-FILENAMEはLoRAモデルの実際のファイル名、WEIGHT`は出力へのモデルの影響度を示す希望の重みで置き換える。

例えば、今回は夜の街の学習モデルであるSwatchesNeonというLoRAモデルを使って、夜の街の画像にしてみましょう。ポジティブプロンプトに以下を追加します。

..., <lora:swatches_neon:0.8>

いい感じ!!

最後までご覧いただきありがとうございました!
次の記事では、棒人間で構図を指定できる革命的なExtensionのControlNetについて解説してみます!
https://zenn.dev/rick516/articles/f6e6f05f3ca9a3

Discussion