LoRA作り方。データセットの作成とLoRA学習(Colab&ローカル)完全解説【StableDiffusion】

私が最初にGoogle Colabやローカル環境でLoRAを作成しようと思ったとき、

「LoRAの解説記事を探してみたけど情報が古い…」

「LoRAの解説記事あるけど、有料記事…」

といったことがあり十分な情報がなく苦労しました。休日を1日潰してようやく動くようになりました。それから何度もLoRAを作ることで熟練度が上がってきており、civitaiでLoRAを公開したりもしております。

Buruma, Bloomers(Old Japanese Gym Uniform) - v1.0 | Stable Diffusion LoRA | Civitai
This is buruma cosplay LoRA.Please give this wonderful LoRA a try, as it has undergone continuous improvements. We explain how to create datasets a...

本記事ではそんなnoteだと有料で販売されているような情報が、なんと無料で読めます。おそらくnoteほうは更新されてないようなので、本記事のほうが最新なので価値は高いです。

なので、最後まで是非とも読んでいってください。ただし本記事は具体的な手順を順を追って説明するため少し退屈するかもしれないです。

なのでLoRAを実際に作りながら、記事を読むことをおすすめします。そうすることで退屈なマニュアルも面白くなります。もし、今すぐLoRAを作る気がないというのであればブックマークしてあとで読むことをおすすめします。

ちなみに、Stable Diffusionの情報は、なぜだか情報商材屋が有料販売する空気感を作ってて有料記事なってしまいがちですが、本ブログではそんな有料級の情報を無料で発信しているので是非参考にしてください。たまに広告を記事にいれますが、サーバー代で本ブログは赤字できついのでそれは許してください。

LoRAとは

LoRA、その正式な名前はLow-Rank Adaptationです。これは独自の画像でAIを再学習させるための手法です。これにより、AIによる画像生成に、あなた自身のタッチやコンセプトを加えることが可能となります。これは単に文章で説明を加えるよりも、より具体的で詳細な特性を画像に反映させることが可能です。

https://kindanai.com/manual-lora-install/

LoRAはStable Diffusion全体を再学習させることなく、ネットワークの一部に相当する部分だけを学習することで少ない学習時間で、追加したいコンセプトを追加できる便利な機能です。

たとえば、「ドラえもんの写った画像をStable Diffusionで作ろう!」。

「じゃあプロントは、青色のロボットで、可愛らしくて耳は無いけど猫をモチーフとしていて…

…」

と呪文(プロンプト)を調整するだけでは難しいです。

しかし、doraemonという概念を画像から学習させることで”doraemon”と呪文(プロンプト)に打ち込むだけでドラえもんを表示することができます。

また、好きにな芸能人の画像を生成することもできます。ただし、著作権や肖像権といった点には注意してください。有名人やキャラクターなどのを学習させても、公開せず、私的利用の範囲内にとどめておきましょう。LoRAだけでなく、生成した画像についても同様です。

さて、LoRAについての説明はここまでにして、本記事の目標であるColab環境で、LoRAを学習させる方法について解説していきます。

データセットを作る(ローカル環境&Colab共通)

まずはデータセットを作ります。このデータセットの作成方法はKohya’sというLoRA作成の定番ツールで使えるデータセットの作成方法です。ローカル環境でもGoogle Colab環境でもKohya’sをベースとしたツールやスクリプトが定番となっています。

データセットですが、大まかな手順としては次のとおりです。追って詳細に解説します。

  1. 新たに学習させたいコンセプトが写った画像を集める
  2. キャプションファイルを自動生成する
  3. キャプションファイルを修正する
  4. 正則化画像とキャプションを作成する
  5. Google Driveにデータセットをアップロード(Colabで学習させる場合)

また、データセットの作り方で画像の選び方やキャプションのコツについて知りたい場合は、以下の記事も説明しています。まずは本記事の内容でデータセットの基本的な作り方を学んで、作っている最中に迷うことがあれば次の記事の内容を参照することをおすすめします。

データセットの作り方についての解説記事

新たに学習させたいコンセプトの画像を集める(1/5)

学習させたいコンセプトが含まれている画像をまずは集めましょう。画像は最低でも20枚はあったほうが良いです。コンセプトですが次のようなものを学習させることができるので、自分が学習させてみたいコンセプトを考えてみましょう。

  • 特定の人物
  • アニメのキャラクター
  • 背景
  • イラストの場合は画風
  • 服装
  • ポーズ

集め方の注意点としては次のとおりです。

  • 構図や背景はバラバラなほうが良い。ただし姿勢は姿勢の良いオーソドックスなものが良い。
  • 高解像度な画像を集める。
  • 正方形に近い。あまり長細くなければOK。

コンセプトですが、一度に複数学習させることも可能ですが、私の経験上、個別に学習させるほうが、品質が高くなる印象です。

キャプションファイルを自動生成する(2/5)

キャプションファイルを作成する場合、すべて手動で作成するのは大変なのでtaggerを使います。Stable Diffusion WebUIに拡張機能として追加します。

Extentionsのタブに移動して、Availableを押して移動します。Load fromを押してSearchにtaggerと入力すると”WD 1.4 Tagger tab, training”というExtensionがあるのでこれをインスールします。

Stable Diffusion WEB UIを再起動すると、Taggerというタブが追加されているので、以下の手順で画像のキャプションを一括入力します。

これを実行すると、画像フォルダ内に、拡張子が.txtのファイルが作成されます。これは画像名に対応する呪文(プロンプト)が記載されたテキストファイルです。

キャプションファイルを修正する(3/5)

次に重要なのが、このテキストファイルの呪文(プロンプト)の修正です。テキストファイルの修正点は次の通りです。

  • コンセプトを表すTrigger Wordを追加する。
  • コンセプトに関連するキーワードを削除する。
  • 自動生成されたキーワードの間違いを修正する。

コンセプトを表すTrigger Wordを追加する

Trigger Wordとはコンセプトを表すキーワードです。ドラえもんの例だと”doraemon”がトリガーワードになります。それをキャプションファイルに追加します。

人物やキャラクターの場合は、そのままそれをTrigger Wordにするのが一般的です。場合によっては、1girlなどの一般的なキーワードをトリガーワードにしているLoRAもありますが、その場合は、そのキーワードをコンセプトで上書きすることになります。

その決めたTrigger Wordを画像名.txtとなっているテキストファイルに追記していきます。

コンセプトに関連するキーワードを削除する

コンセプトに関連するキーワードを削除していきます。ドラえもんの例だと”robot”,”blue robot”,”red nose”などが例として挙げれれます。

なぜこのような操作をするのかというと、コンセプトを理解する上で、トリガーワードに概念をなるべく含めて、他の概念とは切り分けるためです。

たとえば、ドラえもんを学習させるのに、robotが呪文(プロンプト)に含まれていると、robot+doraemon=ドラえもんとなってしまい、LoRAを使うときにいちいち、robotとdoraemonを入力する必要性があるので面倒です。

また、単にrobotの画像を生成したいときに、ドラえもんの要素を含んでしまうため、他のガンダムなどようなロボットを書くときに、ドラえもんに引っ張られた構造のロボットが生成されやすくなったりと、不都合が多いからです。

なので、ドラえもんを学習させる場合は、robotとは概念を切り離したほうが使いやすいLoRAモデルになります。こういった背景から、今回学習させる概念に近いキーワードはなるべく削除していったほうが良いです。

自動生成されたキーワードの間違いを修正する

画像に写ってないものがコンセプトに記載されていたり、画像にあるのにないものがある場合は、モデルの精度が高くなるので修正したほうが良いです。ただし、画像にあるの呪文(プロンプト)に記載が無いものについては、挙げればキリがないので、気になるところだけで大丈夫です。

テキストファイルの調整が終わったら次にフォルダの構造を変えます。どのように変えるかというと、doraemonがトリガーワードの場合は、doraemon/img/5_doraemon/の配下に画像を配置します。フォルダは適当な場所に、新規に作成してください。

フォルダ名”5_doraemon”の意味ついてですが、”5_doraemon”配下にある画像は、5回学習に使うという意味です。

もし、10回、学習に画像を使いたければ、”10_doraemon”になります。これは、今回利用するスクリプトがこういったルールで実装されているためこうなります。

画像が大量にあれば”1_doraemon”でも良いですが、なるべく高画質な画像を少量使うのが良いので大体、10枚程度で5回ぐらいリピートするぐらいにするのが現実的です。

正則化画像とキャプションを作成する(4/5)

正則化画像とは、コンセプトを含まない画像のことです。なぜこのような画像を用意する必要があるかというと、コンセプトに関係ないキーワードの上書きを防ぐためです。

例えば学習画像に”blue sky”や”day”, “photo”といったよく使われるキーワードが含まれている場合、学習データでその概念の上書きが起こってしまいます。

これを防ぐために正則化画像を使います。つまり、”blue sky”や”day”といった画像を用意して、学習画像データとして含めることで上書きの影響が少なくなるので防げます。正則化画像ですが、多すぎると新しいコンセプトの学習に時間がかかります。

作り方ですが、今回は、各画像のキャプションファイル(.txt)からトリガーワードを除いた呪文(プロンプト)をStable Diffusion Web UIに打ち込んで作成して保存します。また打ち込んだ呪文(プロンプト)を”生成した画像名.txt”で保存します。

ディレクトリはトリガーワードが”doraemon”の場合は”doraemon/reg/5_doraemon/”に保存します。”doraemon”の箇所は適宜、読み変えてください。

今回は、はじめてなので、正則化画像は0枚でもコンセプトの学習自体に問題ないです。もしコンセプトの上書きが起こってしまい不都合があるときに追加するので良いと思われます。

フォルダ構成を整える(5/5)

最後にフォルダ構成が間違ってないか確認してGoogle Driveにアップロードします。アップロード先はどこでも大丈夫です。(ファイル名が1.jpgのように数字になっていますが基本的にはなんでもOKです。)

./doraemon/
├── img
│   └── 5_doraemon
│       ├── 1.jpg
│       ├── 1.txt
│       ├── ...
└── reg※新規作成

これでデータセットの作成は完了です。正則化画像が0枚でも、学習用スクリプトの関係上、正則化画像用のフォルダ(reg)は作成してください。

ローカル環境でLoRAを学習させるにはKohya’s GUIがおすすめ

Google Colabで学習させる場合は次の見出しへ進んでください。このセクションはスキップして大丈夫です。

ローカル環境でLoRAを学習させたい場合はKohya’s GUIというツールを使っていきます。Kohya’s GUIのインストールや使い方は次の記事で解説しているので参考にしてください。

Colabで学習させる(kohya lora dreamboothの使い方)

ノートブックをGoogle Driveにコピーする(1/3)

今回は以下のgithubリポジトリの学習スクリプトを利用させていただきます。メジャーなスクリプトでLoRAの学習だと定番になりつつあります。

GitHub - Linaqruf/kohya-trainer: Adapted from https://note.com/kohya_ss/n/nbf7ce8d80f29 for easier cloning
Adapted from for easier cloning - GitHub - Linaqruf/kohya-trainer: Adapted from for easier cloning

リポジトリにアクセスしたら少しスクロールして、Kohya LoRA Dreamboothの”Open In Colab”をクリックします。

押すとノートブックが開きます。画面上部の”ドライブにコピー”をクリックして自身のGoogle Driveにノートブックのコピーを保存します。

トレーニングデータの設定を行う(2/3)

まずはじめにメニューの”ランタイム”>”ランタイムタイプを変更”からランタイムの設定を行います。ランタイムとは、実行環境のことで、GPUとメモリの設定が行えます。LoRAは最低限のリソースで十分なのでGPUのタイプを”T4″に設定しましょう。

ランタイムタイプを変更したら、上から順に、実行する必要のあるセルを実行していきます。セルを実行するにはセルを選択して、Shift+Enterでセルが実行されます。セルの左にある再生ボタンをクリックしても大丈夫です。

1.1. Install Dependencies

まずは1.1. Install Dependenciesでmount driveにチェックを入れて実行します。

これを実行すると、Google Driveへのアクセス権を求められます。許可しましょう。

2.1. Download Available Model

次のセルはスキップして、2.1. Download Available Modelまで移動します。ここでベースとなるモデルを選択します。今回はChillout-mixを選択しますが、よく使うモデルを選択してください。選択したらセルを実行してください。

2.3 Download Available VAE(Optional)

次のセルもvaeを選択して実行します。Optionalなので任意ですが、選択したほうが良いので選択して実行します。今回は、stablediffusion.vae.ptを選択します。

3.1. Locating Train Data Directory

3.1. Locating Train Data Directoryに移動してtrain_data_dirとreg_data_dirを設定します。train_data_dirはトリガーワードdoraemonでGoogle Drive直下にデータセットをアップロードした場合、”/content/drive/MyDrive/doraemon/img”、reg_data_dirは”/content/drive/MyDrive/doraemon/reg”を指定します。

注意点が2点あります。

  1. /content/drive/MyDrive/がGoogle Driveのルート
  2. regが空でも空欄にせずフォルダを指定する。

トレーニング方法の設定(3/3)

5.1. Model Config

次は大きくスキップして、5.1. Model Configまで進みます。まずはproject_nameを入力しましょう。これは呪文(プロンプト)内でLoRAを選択するときの識別子になります。次にpretrained_model_name_or_pathには”2.1. Download Available Model”でダウンロードしたファイルをに入力します。そして、output_to_driveにチェックを入れます。ここにチェックを入れると、Google DriveにLoRAが保存されます。

“5.2. Dataset Config”はactivation_wordをトリガーワードに設定して、実行します。

“5.3. LoRA and Optimizer Config”は変更せずにセルを実行します

“5.4. Training Config”も変更せずにセルを実行します

“5.5. Start Training”も変更せずにセルを実行します。するとトレーニングが開始されます。トレーニングですが、本記事と同じ程度の画像21枚程度であれば10分程度でトレーニングが完了します。

学習が完了したらGoogle DriveでLoRA>outputの配下に<プロジェクト名>.safetensors(例: doraemon.safetensors)といったファイルがあれば、トレーニングが成功しています。

トレーニングが成功していたらColabの画面に戻ってランタイム>ランタイムを接続解除して削除を押して、ランタイムを終了しましょう。

動作確認

それでは動作確認をしていきましょう。動作確認はStable Diffusion WebUI (Auto1111)でやっていきます。last.safetensorsを/stable-diffusion-webui/models/Loraにダウンロードします。

配置したらLoRAが使えるようになるので、txt2imgで呪文(プロンプト)を入力します。呪文(プロンプト)は次のように入力すると学習させたコンセプトの画像が生成されます。必要に応じて他のキーワードも追加してください。学習データに使った呪文(プロンプト)に<lora:プロジェクト名:1>を追加するのがおすすめです。

doraemon,<lora:プロジェクト名:1>

FAQ

Q: 生成された画像が大きく崩れるけどどうすれば良いでしょうか?

A: 問題はベースモデルもしくはデータセットの問題であることが多いです。

ベースモデルですが実行時のモデルと異なる場合は学習に使ったベースモデルに切り替えて実行してみてください。これで解決した場合は、学習時に使ったモデルと実行時に使っているモデルの相性が悪くLoRAの特徴がしっかりとつかめてないのが原因です。なので、学習に使うモデルと実行時に使うモデルを同じにするか、学習時に使うモデルを切り替えてみるのをおすすめします。

データセットの問題の場合は、まずは画像を増やしてみることをおすすめします。40枚程度あれば望ましいです。それでも解決しない場合は、以下の記事でTipsをまとめているので参考にしてみてください。

データセットの作り方についての解説記事

Q: ”2.1. Download Available Model”の選択肢に、よく使っているモデルがない場合

”2.1. Download Available Model”の選択肢に、よく使っているモデルがない場合の解決方法としては、モデルをGoogle Driveにアップロードして利用する方法です。

  1. モデルをアップロードする。
  2. “5.1 Model Config”のセルにて以下のようにpretrained_model_name_or_pathにアップロードしたモデルのパスを指定してください。
    • 例: /content/drive/MyDrive/beautifulRealistic_brav5.safetensors
      • これはbeautifulRealistic_brav5.safetensorsをGoogleドライブ直下にアップロードした場合です。

この場合、”2.1. Download Available Model”で選択、セルの実行をする必要はありません。

コメント

  1. 質問よろしいでしょうか?

    キャプションファイルを自動生成する(2/5)

    の段階で早くも詰まってしまいましたw
    taggerで検索、wd14-taggerのインストールまでは進んだのですが、タブが追加されません。
    Installedのタブを見ると一覧の中にstable-diffusion-webui-wd14-taggerがあるのでインストールは成功してるっぽんですが・・・。

    環境はGoogleColab版のWEBUIです。

  2. Stable Diffusion Web UIを再起動して解決するか試してみてください。

  3. もし可能でしたら質問を・・・
    「トレーニングデータの設定を行う(2/3)」の”2.1. Download Available Model”の選択肢に、よく使っているモデルがない場合は、諦めて選択肢内のモデルで進めるべきでしょうか?

  4. コメントを受けてFAQに解決方法を追記しました。記載した方法は私もよく使う方法なので試してみてください。
    「Q: ”2.1. Download Available Model”の選択肢に、よく使っているモデルがない場合」
    https://kindanai.com/manual-lora-finetune-colab/#toc24

  5. 丁寧にありがとうございます。やってみます。

  6. LoRA学習に関してはやり方がいろいろあるようで、さらにブログやyoutube動画でいろいろな情報が錯綜していて、どのようにやったらいいのかか分からなかったのですが、こちらの通りにやったら自分の納得のいくクオリティで作成することが出来ました。大変助かりました。ありがとうございます。

  7. コメントいただきありがとうございます。