見出し画像

翼と姿勢を制御するControlNet Wing-Openposeの研究開発1

姿勢を制御するcontrolnetは存在するが、翼を含めた姿勢を制御するcontrolnetは存在しない。よって作成した。


背景

悪魔ほむら(以下画像)や女神まどかのような翼が存在するキャラクターの画像を生成した際、翼は画像内においてかなりの面積を有するため画像内の構図に大きく影響する。

悪魔ほむらの生成画像
checkpoint:reprogineXL使用

画像生成AIにおいて構図を制御する手法としてキャラクターの人体姿勢を制御するOpenposeがあげられる。openposeは以下のように棒人間を入力し棒人間に合わせてキャラクターを生成する手法である。

openposeで姿勢を制御する際のアノテーション画像
上記アノテーション画像から生成される画像
checkpoint:animagineXL_v3.0使用
controlnet:controllllite_openpose使用

上図から自明なようにOpenposeは一般的な人体を想定しており(当たり前ながら一般的な人体に翼は存在しない)、アノテーション画像内に翼を制御するノードがないことから翼を制御できない。よって新たに翼を制御するControlNetを作成する。

準備

ControlNetを作成する手法として今回ControlNet-LLLiteを使用した。ControlNetを作成する場合入力画像と出力画像のペアを用意し、それらの対応を学習させる必要がある。通常の画像処理であれば出力画像を学習処理器にかけ入力画像を生成することで、入力画像と出力画像のペアが生成できる。以下は例えば輪郭画像とその出力画像の例である。

出力画像の例
checkpoint:animagineXL_v3.0使用
輪郭画像処理器によって生成された入力画像の例
MangaLineExtraction_PyTorch使用

今回学習させたい入力画像と出力画像のペアは翼入りのOpenposeと出力画像である。Openposeを自動で生成する手法は存在するが翼入りで生成することはできない。よって以下のようにGUIでノードを配置するソフトを作成し入力画像と出力画像のペアを作成した。

作成したアノテーションソフトのUI

各アノテーションの人体への対応は以下を想定している。

ノードと人体への対応

今回作成したアノテーションソフトは以下にアップロードしている。

学習結果

上記アノテーションソフトで1062枚の画像のアノテーション画像を作成し以下のようなパラメータで学習を行った。なお慣れると約50枚/1時間ぐらいでアノテーションファイルを作成可能である。上記の場合大体20時間ぐらいで終わった。また下記設定での学習時間はRTX3060で大体50時間ぐらいと比較的?短めである。

pretrained_model_name_or_path = "animagine-xl-3.0.safetensors"
max_train_epochs = 100
max_data_loader_n_workers = 4
persistent_data_loader_workers = true
seed = 42
gradient_checkpointing = true
mixed_precision = "bf16"
save_precision = "bf16"
full_bf16 = false
optimizer_type = "adafactor"
learning_rate = 2e-4
xformers = true
output_dir = "保存先"
output_name = "wing_openpose"
save_every_n_epochs = 10
save_model_as = "safetensors"
vae_batch_size = 1
cache_latents = true
cache_latents_to_disk = true
cache_text_encoder_outputs = true
cache_text_encoder_outputs_to_disk = true
network_dim = 64
cond_emb_dim = 32
dataset_config = "データセット.toml"
[general]
flip_aug = false
color_aug = false
resolution = [1024,1024]

[[datasets]]
batch_size = 3
enable_bucket = true

    [[datasets.subsets]]
    image_dir = "入力画像"
    caption_extension = ".txt"
    conditioning_data_dir = "出力画像"

作成したControlNetは以下にアップロードしている。

作成したControlNetを使用して各checkpointで画像を生成した結果を以下に示す。以下より翼と姿勢を制御した画像が本ControlNetを使用することで生成できた。

アノテーション画像サンプル1
画像生成結果サンプル1
chekcpoint: reprogineXL
prompt: masterpiece, best quality, very aesthetic, 1girl, dress, full body ,feathered wings, indoor, bed room
アノテーション画像サンプル2
画像生成結果サンプル2
checkpoint: startlightXL
prompt: masterpiece, best quality, very aesthetic, 1girl, dress, full body ,feathered wings, ruins

今後の課題

下記は学習時に類似画像がなかったポーズをもとに生成した画像である。明らかにアノテーション画像のノードが混同されている挙動が確認できる。原因としては以下が考えられるため切り分けが今後の課題である。

  • 学習画像に正面を向いた画像が多いあるいは後ろ向いた画像が少ない

  • 学習結果は過学習気味である

アノテーション画像(シャフ度っぽいポーズ)
画像生成結果サンプル1chekcpoint: reprogineXL
prompt: masterpiece, best quality, very aesthetic, 1girl, dress, full body ,feathered wings, indoor, bed room

参考

本記事は以下を参考に作成された。

宣伝

今回検討した内容等を収録した本をコミックマーケットやBOOTHで頒布しているのでよければ買ってね。

[EOF]

いいなと思ったら応援しよう!