メインコンテンツへスキップ
どうすれば「ヒロイン」を育てるか?
  1. ブログ/

どうすれば「ヒロイン」を育てるか?

· loading · loading ·
目次

こんにちは、Einarです。

「星光の英雄たち」のキャラクターを生成するとき、すべてのイラストが思い通りにいくわけではありません。Stable Diffusionの構造上の問題(手…)は置いておいて、このモデルの仕組みから、以前に作ったイラストやこれから作るイラストとは少しずつ異なることがあります。つまり、一貫性の問題がよく起こります:シャツが一度は白で、次には赤になることもあり、まやちゃんが可愛いときもあれば、もっと可愛いときもあります(うーん!)、靴が違うこともあります。

「マスター、なんで急に呼んだの?まだ寝てたのに…」

一部のキャラクターにとってはこれが大きな問題ではないですが、まやちゃんの変身姿や武志さんのようなキャラクターにとっては、一貫した結果を得るのは非常に難しいです(特に武志さんは、高校生として生成されることもあれば、乙女ゲームの主人公として生成されることもあります)。

特に問題のあるイラストを生成しようと数時間費やした後、私はついに大きな一歩を踏み出すことを決めました… 私のキャラクターのLoRAを作成することです!そしてもちろん、一番可愛いキャラクターから始めなければならない:まやちゃん!

何が待ち受けているのか全く知らずに…

「マスター、この『トレーニング』って何?最近太ったわけじゃないよね?」

材料を集める:学習データ
#

「なんか変だな… マスター、ちゃんとレシピ選んだの?」

LoRAをトレーニングするためのガイドはネット上にたくさんありますが、実際のイラストではなくAIイラストを使ってモデルをトレーニングするという(おそらく非常にニッチな)ケースを扱うものはほとんどありません。だから、完全に独自の試みとは言えないものの、私にとってはかなり新しい挑戦でした。最初のステップは、適切な学習データを作成するために十分な画像を集めることでした。Distyさんとの会話で、確実を期すために100枚以上の画像を使うというアイデアが浮かびました。私の目標は以下の通りです:

  • まやちゃんの画像をできるだけ多く集めること。ただし、重複しないようにする。
  • まやちゃんを様々なポーズ、表情、服装で生成すること。彼女の通常の衣装も含む。
  • 背景の要素や不要な詳細がトレーニングに干渉しないようにすること。

「私、スーパーモデルになったよ!てへぇ〜」

手動で十分な画像を生成するのは無理なので、dynamic prompts extensionという拡張機能を使うことにしました。そして、さまざまなポーズや服装の「ワイルドカード」(異なるバリエーションを含むテキストファイル)を準備しました。生成を始めると、ダイナミックプロンプトはこれらをランダムに選び、多数の異なる組み合わせを生成してくれます。

1 f i ( s d l { ( p a n v < g r n b e a o w e n e e l i o t l r r a s i r i w r o r m r u a k f e t f m e y r l i n f e r h e e s a , s c t u b r i c t a : i a k l s o a t s , e D o d t e u u , u t s i r e e n , e s w h y l t f i d w h a l a h f g d s w s h | i n e t e e i } a : h a i t d , e t r n r 1 i i t s e s , i e a , k . t l e m , k c n l 3 e o i b e a , c , b ) r s l a d y n e _ r , s o e c e i a _ ( e o a c c k t v m b A s x w b i o k | g a i e s n o t n l l l s r i s u i l r u o l h o l u c r m o a h n r a | a u e a o d e : / a t r p n d l l r F 1 p i s , y p d , o e a . o r b h e y : s r s c 1 s , a i a l , 1 h v i e ) e n r q l . a i n < : , s b g t u o e 2 d b g l 1 _ l s , a w n ) o r , o > { _ u , t , w a r , e d n t h s n m a < a e - u s , t a : l s a e l r c s s i , s g o t t y e k k h i m d t r r r h e f e i a p e s e e a a l s t b r r s l t t r a : i e , l c t t e a u p t w g t s u h , i i d i _ h h i ( w e i c b l i e l i t c b e e d , a e o c i t - , o p p f e c d e g e o b t l , n s k a , h _ n m e i m g b n t 1 e c b a s m i r o i b i _ | d u a t h l o d m e n 0 i t n e o s e u y e s g : f u : g d r h , n , , t : 1 r m 1 s t o d 4 > o . , s r o , a h q > m b 1 k s t p n i u r ) { i l s e g i g a < a e , r e n r m h l l b a c t e e e l i o o s ( o , v } m a y t r v t s m e , o t a y a e s h p s u r d , : , o l , t l t e d | r e h i w t e t t g o a t f e | h r i a r h l t k l i o a y s i , e l m i a n d : r n d g , 0 b : u , . e 1 d | 8 h . e > i 1 a n | n d , g r | y }

生成されたイラストのクオリティを向上させるために、いくつかのLoRAも追加しました(このことについてはこの記事で話しました)。特に「white」LoRAを追加して、白い背景が生成されるようにしました。

AnimagineXLの出力を特別なLoRAでグレードアップ!
· loading · loading

「プロンプトに何か見える… マスター、ホルモンレベルをチェックしなきゃ!」

それはそんなことじゃないんですよ、詠子さん!モデルが裸のポーズをちゃんと描けるように(特に変身シーンなどのために)いくつかの裸のポーズが必要だったんです。うーん…続けましょう。次の問題は背景でした:masterpieceなどのタグを使うと奇妙な要素が現れますが、モデルがそれから学ばないように完全に白い背景が必要でした。このために、SD.Nextの便利な機能を使いました。これはイラストが生成された直後に実行できる内蔵の背景除去ツールです:

顔を改善するために、SD.Nextのもう一つの内蔵機能を使いました(便利な機能がたくさんあるので、ぜひチェックしてみてください)。これはADetailerのような顔の修復機能です。ADetailerを直接使えないのは、画像処理中に透明性が失われてしまうからです。

「パワーが足りない!」

私のグラボもPaperspaceも、これらの画像を合理的な時間内に生成するにはあまりにも弱すぎたので、RunPodでグラボを借りて生成を始めました!すべての画像がハイクオリティというわけではなかったので、手動で調整を行い、最終的に500枚のうち300枚強の画像が残りました。

最終的には、以下のようなイラストをいくつか作成することができました:

トレーニング
#

「もっと強くなりたい!」

そのトレーニングじゃないよ、まやちゃん!うーん、さて、ここからがこの旅の最も難しい部分です… このデータでモデルをトレーニングするための正しい方法を見つけること。ネット上のガイドはさまざまなことを言っていて、それに反することもあり、しかもすぐに時代遅れになります。その上、ほとんどのガイドはSD 1.5向けで、私はSDXLとAnimagine XL 3.1をベースにしたかったのです…

何を使うべきかを見つけるために数日を費やしました。最終的に、Distyさんとの会話とこのガイド(英語)を読んだことで、パラメータを選ぶのに役立ちました。残っているのはトレーニングを実行することだけで、次に生成されたモデルをテストしなければなりませんでした。

そこから問題が始まった…

不愉快な驚きと衝撃の真実
#

「どうして、どうして、どうして!」

モデルのテストを始めたら、すべての生成が一見いいではあるものの、問題がありました。主に線が断裂していてノイズが多く、目が少し歪んでいて安定していませんでした。以下の例を見てください:

1週間半、モデルを作り直し、画像を追加し、原因を見つけることができませんでした。すべてがかなりひどく見えました。諦めかけていたときに、除去プロセスを試すことにしました:最もシンプルなプロンプトから始め、徐々に使っていたものを追加していきました。

最初のプロンプトはこんな感じで、問題は全くありませんでした:

しかし、通常のネガティブプロンプトを追加すると、また問題が発生しました。そして、その時に気づきました。プロンプトには常に何かが含まれていたのです…

「ありえない!」

私がAnimagine XL 3.0の時代から使っていたネガティブエンベディングが、クオリティの低下の原因でした!これを削除した瞬間、生成結果は再び素晴らしいものになりました。以下はその例です:

そして、さらに驚きの発見がありました… このLoRAを数日間使用した後も、問題は依然として存在していましたが、頻度は少なくなっていました。さらにテストを行い、私が使っていたもう一つのLoRAが原因であることが判明しました(これも私の他のすべての画像に影響を与えていましたが、全く気づきませんでした!)。これを削除すると、すべてが良くなりました:

終わりなのか?
#

「粘り強さには感心します、マスター」

主な問題が解決した後は、サンプルイラストを作成し、モデルをCivitAIHuggingFaceにアップするだけでした。生成パラメータとプロンプトを少し調整する必要がありましたが、最終的にLoRAはまやちゃんを私が望むほど可愛く生成してくれました!

もちろん、これで終わりというわけではありません。まやちゃんは最も簡単にLoRAを作成できるキャラクターでした。本当の挑戦はこれからです!次のキャラクター、ゆかちゃんのための画像集めをすでに始めています!

でもその話はまた今度にしましょう。また次回!

Einarでした。