![見出し画像](https://assets.st-note.com/production/uploads/images/149578058/rectangle_large_type_2_4ff3099f23bd085aae178345b1ec126d.jpeg?width=1200)
翼と姿勢を制御するControlNet Wing-Openposeの研究開発1
姿勢を制御するcontrolnetは存在するが、翼を含めた姿勢を制御するcontrolnetは存在しない。よって作成した。
背景
悪魔ほむら(以下画像)や女神まどかのような翼が存在するキャラクターの画像を生成した際、翼は画像内においてかなりの面積を有するため画像内の構図に大きく影響する。
![](https://assets.st-note.com/img/1722744933241-YL1FuenUTc.png?width=1200)
checkpoint:reprogineXL使用
画像生成AIにおいて構図を制御する手法としてキャラクターの人体姿勢を制御するOpenposeがあげられる。openposeは以下のように棒人間を入力し棒人間に合わせてキャラクターを生成する手法である。
![](https://assets.st-note.com/img/1722748568464-kUUWA028rr.png?width=1200)
![](https://assets.st-note.com/img/1722748574301-z9XpENU9Z8.png?width=1200)
checkpoint:animagineXL_v3.0使用
controlnet:controllllite_openpose使用
上図から自明なようにOpenposeは一般的な人体を想定しており(当たり前ながら一般的な人体に翼は存在しない)、アノテーション画像内に翼を制御するノードがないことから翼を制御できない。よって新たに翼を制御するControlNetを作成する。
準備
ControlNetを作成する手法として今回ControlNet-LLLiteを使用した。ControlNetを作成する場合入力画像と出力画像のペアを用意し、それらの対応を学習させる必要がある。通常の画像処理であれば出力画像を学習処理器にかけ入力画像を生成することで、入力画像と出力画像のペアが生成できる。以下は例えば輪郭画像とその出力画像の例である。
![](https://assets.st-note.com/img/1722749973824-pS5iYos4qb.png?width=1200)
checkpoint:animagineXL_v3.0使用
![](https://assets.st-note.com/img/1722749983180-FvZizAZdLE.png?width=1200)
MangaLineExtraction_PyTorch使用
今回学習させたい入力画像と出力画像のペアは翼入りのOpenposeと出力画像である。Openposeを自動で生成する手法は存在するが翼入りで生成することはできない。よって以下のようにGUIでノードを配置するソフトを作成し入力画像と出力画像のペアを作成した。
![](https://assets.st-note.com/img/1722750442479-PLZ09idbtG.png?width=1200)
各アノテーションの人体への対応は以下を想定している。
![](https://assets.st-note.com/img/1722750534291-T4FH04POdn.jpg?width=1200)
今回作成したアノテーションソフトは以下にアップロードしている。
学習結果
上記アノテーションソフトで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を使用することで生成できた。
![](https://assets.st-note.com/img/1722751456720-W6oV8p4bsh.png?width=1200)
![](https://assets.st-note.com/img/1722751444691-lhAApX73Ks.png?width=1200)
chekcpoint: reprogineXL
prompt: masterpiece, best quality, very aesthetic, 1girl, dress, full body ,feathered wings, indoor, bed room
![](https://assets.st-note.com/img/1722751679835-w2fY3bNlV2.png?width=1200)
![](https://assets.st-note.com/img/1722751698173-Tf3THhcXoK.png?width=1200)
checkpoint: startlightXL
prompt: masterpiece, best quality, very aesthetic, 1girl, dress, full body ,feathered wings, ruins
今後の課題
下記は学習時に類似画像がなかったポーズをもとに生成した画像である。明らかにアノテーション画像のノードが混同されている挙動が確認できる。原因としては以下が考えられるため切り分けが今後の課題である。
学習画像に正面を向いた画像が多いあるいは後ろ向いた画像が少ない
学習結果は過学習気味である
![](https://assets.st-note.com/img/1722752752713-Kj9HihBB3c.png?width=1200)
![](https://assets.st-note.com/img/1722756861018-lORzKNWAIt.png?width=1200)
prompt: masterpiece, best quality, very aesthetic, 1girl, dress, full body ,feathered wings, indoor, bed room
参考
本記事は以下を参考に作成された。
宣伝
今回検討した内容等を収録した本をコミックマーケットやBOOTHで頒布しているのでよければ買ってね。
【C104告知】 AI情報誌 希望よりも熱く絶望よりも深いもの……AIよ2 テキストだけでは生成できない画像を生成したい人に向けたLoRAとControlNetの作り方を特集した本です。 コミックマーケット104 2日目 東X-30bにて頒布予定です。こうご期待。 #C104お品書き https://t.co/Q28ZZbezGm pic.twitter.com/hjb1BSS2qa
— 偽街の子供達 (@ClaraDolls_0430) August 5, 2024
[EOF]