コンテンツへスキップ

自分用にkohya_ssをfork

タグ:

特殊な事は何もしていないのですけど、追加したスクリプトを管理するためにkohya_ssをforkしてみました。

基本ターミナルからCUIでの操作のみを想定しています。

前提条件

このプログラムを使用するには、以下を満たしている必要があります。

環境設定

# 適当なフォルダに git clone します。
$ git clone https://github.com/MizunagiKB/kohya_ss
$ cd kohya_ss

# 新しいPython環境を構築します。
$ conda create -n pyenv310_kohya_ss python=3.10
$ conda activate pyenv310_kohya_ss

$ pip install -r mzworks_requirements_macos_arm64.txt

# HuggingFaceへのログイン
$ pip install huggingface-hub
$ huggingface-cli login

# accelerateの設定
$ accelerate config
----------------------------------------------------------------------------------
In which compute environment are you running?
<<This machine を選択>>
----------------------------------------------------------------------------------
Which type of machine are you using?                                                                                                                                                                          
<<No distributed training を選択>>
Do you want to run your training on CPU only (even if a GPU / Apple Silicon device is available)? [yes/NO]:                                                                                                   
<<NO を選択>>
Do you wish to optimize your script with torch dynamo?[yes/NO]:                                                                                                                                               
<<NO を選択>>
----------------------------------------------------------------------------------
Do you wish to use FP16 or BF16 (mixed precision)?                                                                                                                                                             
<<no を選択>>

学習させたい画像の登録

git clone したフォルダの中に dataset というフォルダがあります。この場所に train というフォルダを作成して学習させたい画像を配置します。画像は512×512である事が理想ですが揃っていない場合はプログラムがリサイズしてくれます。

直接ファイルを配置することもできますが、以下のようにシンボリックリンクをすると差し替えやすいです。

ln -s /path/to/train_images ./dataset/train

キャプションなしで学習させる場合

お手軽に試してみたい場合は dataset/train フォルダに学習させたい絵を配置、またはシンボリックリンクしておきます。

画風を似せようと思うと結構難しいですが、特定のキャラクターっぽさを表現する場合であれば画像は20枚程度でも十分です。

mzworks_lora.toml ファイルの作成

学習のさせ方を指定するファイルを以下のように作成します。

自分のイラストを学習させたいので、class_tokens には “usu 1girl” と記載しています。

[general]
enable_bucket = true
shuffle_caption = false

[[datasets]]
resolution = 512
batch_size = 2

    [[datasets.subsets]]
    image_dir = "./dataset/train"
    num_repeats = 10
    class_tokens = "usu 1girl"
    keep_tokens = 1

mzworks_sample_prompts.txt ファイルの作成

このファイルに prompt を記述しておくと特定のステップ事に画像を生成してくれます。何も指定するものがなければ空のままで良いです。(以下は例)

usu, 1girl --n low quality, bad anatomy, low effort --d 25000 --s 30

このファイルを保存したら以下のコマンドで学習と生成が行えます。

# 学習する場合。
$ zsh mzworks_lora.sh train

# 推論(画像生成)する場合。プロンプト入力待ちになりますので、プロンプトを入力してエンターを押すと画像生成が行われます。
# 画像の生成が終わると再びプロンプト入力待ちになります。
$ zsh mzworks_lora.sh generate

キャプションをつけて学習させる場合

キャプションなしで学習させる場合と同様、dataset/train フォルダに学習させたい絵を配置、またはシンボリックリンクしておきます。

mzworks_lora.toml ファイルの作成、mzworks_sample_prompts.txt ファイルの作成はキャプションなしと同様に行ってください。すでに作成済みであればそのまま使用可能です。

キャプションの自動生成

# 画像にキャプションをつける場合。
# ./dataset/train フォルダが存在している事が前提です。
$ zsh mzworks_lora.sh tag

タグの追加

生成されたキャプションファイルを読み込み、ファイルの先頭に指定したタグを追記します。

$ python mzworks_tag.py --append usu

学習と生成はキャプションなしと同じです。

# 学習する場合。
$ zsh mzworks_lora.sh train

# 推論(画像生成)する場合。プロンプト入力待ちになりますので、プロンプトを入力してエンターを押すと画像生成が行われます。
# 画像の生成が終わると再びプロンプト入力待ちになります。
$ zsh mzworks_lora.sh generate

学習結果の例

120枚の画像を10回繰り返して読み込ませるのを、バッチサイズ2で10エポック行いました。

自分でみると「あぁ、このポーズはあの画像かな?」みたいなものが読み取れますね。確かに結構雰囲気が出ていて妙な気分です。

自分で自分の絵を生成してみた結果、背景があるとずいぶん見栄えがよくなるんだな…という事を思い知りました。