見出し画像

Diffusion Model(拡散モデル)の追加学習をColabでやる方法


こんにちは、kizamimiです。今回はDream BoothやHyper Networkではない純粋なDiffusion Modelの追加学習をColabで実行できるプログラムを書きましたので、その記録と共有になります。可能な限り、プログラムを直接触らなくても動かせるように作りました。一部、プレミアムGPU(Google Colab に課金が必要)が必要です。
(追記:2023/01/08)ver2.0に更新につき記事を書きました。ver2.0ではプレミアムGPUでなくとも動きます。

ver1.0のリンクはこちらから↓↓↓


コード➀:DeepDanbooruのキャプション作成(diffusers用)


コード②:Diffusion Modelの学習用


コード③:学習したDiffusion Modelで生成する


Diffusion Modelの追加学習を始める

追加学習の有用性

Dream BoothやHyper Networkなどの比較的軽量な追加手法でない純粋な追加学習は手軽さは下がる一方で、生成させたい画像へ導く能力において期待値が高いと予想しています。今回、実際の手法間の比較は行わず、追加学習の始め方を用意したColabベースのコードを使って説明します。


前提知識

  • google colabの使い方が分かる

  • google driveの使い方が分かる


追加学習までの流れ

  1. 画像データセットを用意する

  2. データセットのキャプションを作成する―コード➀

  3. 追加学習する―コード②

  4. 学習モデルを使って生成―コード③



データセットを用意する

まず、高さ512ピクセル以上かつ幅512ピクセル以上の画像を沢山用意します。(私の場合は3000枚程度用意しましたが100枚程度でも動きます)
次に、用意したデータセットをColabで処理するためにGoogle Driveにアップロードします。ここでは fine_turning フォルダを作成します。

Google Driveの画面
右クリックでフォルダを作成する


作成したfine_turningフォルダ内にデータセット用のフォルダをドロップしてください。

fine_turningフォルダ内にデータセットが入ったフォルダをドロップする

アップロードに少し時間がかかると思うので待ちます。


データセット画像の説明文を自動生成する

学習に使用するデータセットのアップロードが終わりましたが、用意したデータセットはそのままでは学習に使えません。画像を説明する文章が必要で、DeepDanbooruで自動的に生成させます。下のColabを使います。↓↓↓

コード➀:DeepDanbooruのキャプション作成(diffusers用)※再掲

コード➀にアクセスすると下の画面が表示される。必要な操作はdataset_pathの欄にアップロードしたデータセットフォルダのパスを、output_pathの欄に出力先のフォルダを指定する。上から順に実行し、実行時ドライブへのアクセスが要求されるので許可してください。

コード➀の画面

また最初に、RESTART RUNTIMEのボタンが出るのでクリックして再起動してください

再起動の要求がされる場合クリックして再起動する

しばらくすると実行完了するので一つ下も実行し、コード➀の操作は終わりです。


作ったデータセットを使って追加学習

ここからはコード②を扱います。下のColabを使います。↓↓↓

コード②:Diffusion Modelの学習用 ※再掲

コード②の画面は以下になります。

コード②の画面



学習に関わる設定は以下の画面で決定できます。

学習設定項目


各項目の詳細の説明は以下になります

  • pretrained_model_name_or_path:ベースに使用する学習済みモデル

  • train_data_dir:学習に使用するデータセット(コード➀のoutput_pathをそのまま使用すること)

  • output_dir:追加学習したdiffusion modelの出力先

  • batch_size:バッチサイズ

  • epoch:エポック数

  • step:ステップ数

初期設定だと40分程度で学習が行われます。


学習済みモデルを使用して画像生成してみよう

ラストスパートになります。コード③を開いて学習済みモデルを使用してみましょう。下のColabを使います。↓↓↓

コード③:学習したDiffusion Modelで生成する ※再掲

同様にコード③の画面は以下の画像です。

コード③の画面

入力項目は以下に示す通りで、生成したい画像にあったプロンプトを入力してください

  • pretrained_model_name_or_path:学習したDiffusion Modelのパス(コード②のoutput_dirが対応)

  • prompt:生成した画像の特徴

  • negative_prompt:生成したくない画像の特徴

  • id:生成画像につけられるID番号

  • seed:ランダムシード

上から実行し、生成結果が出れば追加学習の一連の流れができました。

最後に

今回はDream BoothやHyper Networkなどの軽量追加手法でない純粋な追加学習を行いました。手軽さは下がる一方で、生成させたい画像へ導く能力において期待値が高いと予想しています。今回行わなかった手法間の比較も含め、今後は追加学習を中心に書くことを予定しています。最後に私が運営のお手伝いしている Discord サーバーを載せます。このサーバーでは Novel AIやniji・journeyなど を使用した作品共有、研究やwaifu diffusionなどの追加学習の情報共有など行っています。参加してお絵描きAIの世界をのぞいてみてはいかがでしょうか。
(kizamimi)


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